mirror of
https://github.com/LIV2/WinUAE.git
synced 2025-12-06 00:12:52 +00:00
2200b8
This commit is contained in:
parent
f8eb797b13
commit
7d690b9c9f
@ -801,11 +801,11 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
|
||||
cfgfile_write (f, L"mbresmem_size", L"%d", p->mbresmem_high_size / 0x100000);
|
||||
cfgfile_write (f, L"z3mem_size", L"%d", p->z3fastmem_size / 0x100000);
|
||||
cfgfile_write (f, L"z3mem2_size", L"%d", p->z3fastmem2_size / 0x100000);
|
||||
cfgfile_write (f, L"z3chipmem_size", L"%d", p->z3chipmem_size / 0x100000);
|
||||
cfgfile_write (f, L"z3mem_start", L"0x%x", p->z3fastmem_start);
|
||||
cfgfile_write (f, L"bogomem_size", L"%d", p->bogomem_size / 0x40000);
|
||||
cfgfile_write (f, L"gfxcard_size", L"%d", p->gfxmem_size / 0x100000);
|
||||
cfgfile_write (f, L"chipmem_size", L"%d", p->chipmem_size == 0x20000 ? -1 : (p->chipmem_size == 0x40000 ? 0 : p->chipmem_size / 0x80000));
|
||||
cfgfile_dwrite (f, L"megachipmem_size", L"%d", p->z3chipmem_size / 0x100000);
|
||||
|
||||
if (p->m68k_speed > 0)
|
||||
cfgfile_write (f, L"finegrain_cpu_speed", L"%d", p->m68k_speed);
|
||||
@ -1767,7 +1767,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, TCHAR *option, TCHAR *va
|
||||
|| cfgfile_intval (option, value, L"mbresmem_size", &p->mbresmem_high_size, 0x100000)
|
||||
|| cfgfile_intval (option, value, L"z3mem_size", &p->z3fastmem_size, 0x100000)
|
||||
|| cfgfile_intval (option, value, L"z3mem2_size", &p->z3fastmem2_size, 0x100000)
|
||||
|| cfgfile_intval (option, value, L"z3chipmem_size", &p->z3chipmem_size, 0x100000)
|
||||
|| cfgfile_intval (option, value, L"megachipmem_size", &p->z3chipmem_size, 0x100000)
|
||||
|| cfgfile_intval (option, value, L"z3mem_start", &p->z3fastmem_start, 1)
|
||||
|| cfgfile_intval (option, value, L"bogomem_size", &p->bogomem_size, 0x40000)
|
||||
|| cfgfile_intval (option, value, L"gfxcard_size", &p->gfxmem_size, 0x100000)
|
||||
|
||||
@ -286,13 +286,11 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
|
||||
if (expamem[0] & add_memory) {
|
||||
// Z3 RAM expansion
|
||||
p2 = 0;
|
||||
while (!p2 && z3num < 3) {
|
||||
while (!p2 && z3num < 2) {
|
||||
if (z3num == 0 && currprefs.z3fastmem_size)
|
||||
p2 = z3fastmem_start >> 16;
|
||||
else if (z3num == 1 && currprefs.z3fastmem2_size)
|
||||
p2 = z3fastmem2_start >> 16;
|
||||
else if (z3num == 2 && currprefs.z3chipmem_size)
|
||||
p2 = z3chipmem_start >> 16;
|
||||
if (!p2)
|
||||
z3num++;
|
||||
}
|
||||
@ -894,7 +892,7 @@ addrbank z3fastmem2_bank = {
|
||||
addrbank z3chipmem_bank = {
|
||||
z3chipmem_lget, z3chipmem_wget, z3chipmem_bget,
|
||||
z3chipmem_lput, z3chipmem_wput, z3chipmem_bput,
|
||||
z3chipmem_xlate, z3chipmem_check, NULL, L"ZorroIII FakeChipRAM",
|
||||
z3chipmem_xlate, z3chipmem_check, NULL, L"MegaChipRAM",
|
||||
z3chipmem_lget, z3chipmem_wget, ABFLAG_RAM
|
||||
};
|
||||
|
||||
@ -1045,11 +1043,6 @@ static void expamem_map_z3fastmem2 (void)
|
||||
{
|
||||
expamem_map_z3fastmem_2 (&z3fastmem2_bank, &z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2, 0);
|
||||
}
|
||||
static void expamem_map_z3chipmem (void)
|
||||
{
|
||||
expamem_map_z3fastmem_2 (&z3chipmem_bank, &z3chipmem_start, currprefs.z3chipmem_size, allocated_z3chipmem, 1);
|
||||
}
|
||||
|
||||
|
||||
static void expamem_init_z3fastmem_2 (addrbank *bank, uae_u32 start, uae_u32 size, uae_u32 allocated)
|
||||
{
|
||||
@ -1096,10 +1089,6 @@ static void expamem_init_z3fastmem2 (void)
|
||||
{
|
||||
expamem_init_z3fastmem_2 (&z3fastmem2_bank, z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2);
|
||||
}
|
||||
static void expamem_init_z3chipmem (void)
|
||||
{
|
||||
expamem_init_z3fastmem_2 (&z3chipmem_bank, z3chipmem_start, currprefs.z3chipmem_size, allocated_z3chipmem);
|
||||
}
|
||||
|
||||
#ifdef PICASSO96
|
||||
/*
|
||||
@ -1175,6 +1164,12 @@ static void allocate_expamem (void)
|
||||
currprefs.gfxmem_size = changed_prefs.gfxmem_size;
|
||||
currprefs.z3chipmem_size = changed_prefs.z3chipmem_size;
|
||||
|
||||
z3chipmem_start = currprefs.z3fastmem_start;
|
||||
z3fastmem_start = currprefs.z3fastmem_start;
|
||||
if (currprefs.z3chipmem_size)
|
||||
z3fastmem_start += currprefs.z3chipmem_size + 16 * 1024 * 1024;
|
||||
z3fastmem2_start = currprefs.z3fastmem_start + currprefs.z3fastmem_size;
|
||||
|
||||
if (allocated_fastmem != currprefs.fastmem_size) {
|
||||
free_fastmemory ();
|
||||
allocated_fastmem = currprefs.fastmem_size;
|
||||
@ -1234,7 +1229,7 @@ static void allocate_expamem (void)
|
||||
if (allocated_z3chipmem) {
|
||||
z3chipmem = mapped_malloc (allocated_z3chipmem, L"z3_chip");
|
||||
if (z3chipmem == 0) {
|
||||
write_log (L"Out of memory for 32 bit fake chip memory.\n");
|
||||
write_log (L"Out of memory for 32 bit chip memory.\n");
|
||||
allocated_z3chipmem = 0;
|
||||
}
|
||||
}
|
||||
@ -1423,8 +1418,6 @@ void expamem_reset (void)
|
||||
card_map[cardno++] = expamem_map_fastcard;
|
||||
}
|
||||
|
||||
z3fastmem_start = currprefs.z3fastmem_start;
|
||||
z3fastmem2_start = currprefs.z3fastmem_start + currprefs.z3fastmem_size;
|
||||
if (z3fastmem != NULL) {
|
||||
z3num = 0;
|
||||
if (kickstart_version >= 36) {
|
||||
@ -1440,17 +1433,8 @@ void expamem_reset (void)
|
||||
map_banks (&z3fastmem2_bank, z3fastmem2_start >> 16, currprefs.z3fastmem2_size >> 16, allocated_z3fastmem2);
|
||||
}
|
||||
}
|
||||
z3chipmem_start = z3fastmem2_start + currprefs.z3fastmem2_size;
|
||||
if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size)
|
||||
z3chipmem_start += 16 * 1024 * 1024;
|
||||
if (z3chipmem != NULL) {
|
||||
z3num = 0;
|
||||
if (kickstart_version >= 36) {
|
||||
card_init[cardno] = expamem_init_z3chipmem;
|
||||
card_map[cardno++] = expamem_map_z3chipmem;
|
||||
}
|
||||
if (z3chipmem != NULL)
|
||||
map_banks (&z3chipmem_bank, z3chipmem_start >> 16, currprefs.z3chipmem_size >> 16, allocated_z3chipmem);
|
||||
}
|
||||
#ifdef CDTV
|
||||
if (currprefs.cs_cdtvcd) {
|
||||
card_init[cardno] = expamem_init_cdtv;
|
||||
|
||||
34
filesys.asm
34
filesys.asm
@ -225,13 +225,14 @@ FSIN_none:
|
||||
; jsr -$007e(a6) ; Enable
|
||||
|
||||
|
||||
filesys_dev_storeinfo ; add >2MB chip RAM to memory list
|
||||
filesys_dev_storeinfo
|
||||
moveq #3,d4 ; MEMF_CHIP | MEMF_PUBLIC
|
||||
cmp.w #36,20(a6)
|
||||
bcs.s FSIN_ksold
|
||||
or.w #256,d4 ; MEMF_LOCAL
|
||||
FSIN_ksold
|
||||
|
||||
; add >2MB-6MB chip RAM to memory list
|
||||
move.w #$FF80,d0
|
||||
bsr.w getrtbase
|
||||
jsr (a0)
|
||||
@ -245,40 +246,17 @@ FSIN_ksold
|
||||
jsr -618(a6) ; AddMemList
|
||||
FSIN_chip_done
|
||||
|
||||
; patch >8MB Z3 FakeChipRAM memory type to Chip
|
||||
; add MegaChipRAM
|
||||
move.w #$FF80,d0
|
||||
bsr.w getrtbase
|
||||
jsr (a0) ; d1 = size, a1 = start address
|
||||
move.l d1,d2
|
||||
beq.s FSIN_fchip_done
|
||||
move.l a1,a2
|
||||
jsr -$0078(a6) ; Disable
|
||||
lea 322(a6),a0 ; MemHeader
|
||||
FSIN_scanfchip:
|
||||
move.l (a0),a0 ; first MemList
|
||||
tst.l (a0)
|
||||
bne.s FSIN_fchip_found
|
||||
; not in memlist, AddMem() it
|
||||
move.l a2,a0
|
||||
move.l d2,d0
|
||||
move.l a1,a0
|
||||
move.l d1,d0
|
||||
move.l d4,d1
|
||||
moveq #-5,d2
|
||||
lea fchipname(pc),a1
|
||||
jsr -618(a6) ; AddMemList
|
||||
bra.s FSIN_fchip_done2
|
||||
FSIN_fchip_found
|
||||
move.l 20(a0),d0 ; mh_Lower
|
||||
clr.w d0
|
||||
cmp.l d0,a2
|
||||
bne.s FSIN_scanfchip
|
||||
move.w 14(a0),d0 ; attributes
|
||||
and.w #~4,d0 ; MEMF_FAST
|
||||
or.w d4,d0
|
||||
move.w d0,14(a0)
|
||||
lea fchipname(pc),a1
|
||||
move.l a1,10(a0)
|
||||
FSIN_fchip_done2
|
||||
jsr -$007e(a6) ; Enable
|
||||
FSIN_fchip_done
|
||||
|
||||
lea fstaskname(pc),a0
|
||||
@ -2495,5 +2473,5 @@ intlibname: dc.b 'intuition.library',0
|
||||
gfxlibname: dc.b 'graphics.library',0
|
||||
explibname: dc.b 'expansion.library',0
|
||||
fsresname: dc.b 'FileSystem.resource',0
|
||||
fchipname: dc.b 'z3chip memory',0
|
||||
fchipname: dc.b 'megachip memory',0
|
||||
END
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
|
||||
db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0x82);
|
||||
db(0x00); db(0x00); db(0x08); db(0x64); db(0x00); db(0x00); db(0x00); db(0xd0);
|
||||
db(0x00); db(0x00); db(0x02); db(0x8c); db(0x00); db(0x00); db(0x00); db(0x24);
|
||||
db(0x00); db(0x00); db(0x03); db(0x48); db(0x00); db(0x00); db(0x0e); db(0x54);
|
||||
db(0x00); db(0x00); db(0x12); db(0xe4); db(0x43); db(0xfa); db(0x17); db(0xba);
|
||||
db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0x4a);
|
||||
db(0x00); db(0x00); db(0x08); db(0x2c); db(0x00); db(0x00); db(0x00); db(0xd0);
|
||||
db(0x00); db(0x00); db(0x02); db(0x54); db(0x00); db(0x00); db(0x00); db(0x24);
|
||||
db(0x00); db(0x00); db(0x03); db(0x10); db(0x00); db(0x00); db(0x0e); db(0x1c);
|
||||
db(0x00); db(0x00); db(0x12); db(0xac); db(0x43); db(0xfa); db(0x17); db(0x82);
|
||||
db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28);
|
||||
db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75);
|
||||
db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04);
|
||||
@ -20,16 +20,16 @@
|
||||
db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90);
|
||||
db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e);
|
||||
db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8);
|
||||
db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x12); db(0x36);
|
||||
db(0x61); db(0x00); db(0x15); db(0xe8); db(0x4c); db(0xdf); db(0x7e); db(0xff);
|
||||
db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02);
|
||||
db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x11); db(0xfe);
|
||||
db(0x61); db(0x00); db(0x15); db(0xb0); db(0x4c); db(0xdf); db(0x7e); db(0xff);
|
||||
db(0x4e); db(0x75); db(0x4e); db(0xae); db(0x08); db(0x00); db(0x00); db(0x02);
|
||||
db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00);
|
||||
db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00);
|
||||
db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x28); db(0x40);
|
||||
db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04);
|
||||
db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0b); db(0xe2);
|
||||
db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x17); db(0x2b); db(0x70); db(0x24);
|
||||
db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0b); db(0xaa);
|
||||
db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x16); db(0xf3); db(0x70); db(0x24);
|
||||
db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80);
|
||||
db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x17); db(0x1b); db(0x70); db(0x00);
|
||||
db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x16); db(0xe3); db(0x70); db(0x00);
|
||||
db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40);
|
||||
db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x5a); db(0x20); db(0x3c);
|
||||
db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01);
|
||||
@ -37,7 +37,7 @@
|
||||
db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00); db(0xbc); db(0xad);
|
||||
db(0x01); db(0x0c); db(0x64); db(0x2c); db(0x2f); db(0x06); db(0x7e); db(0x01);
|
||||
db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02);
|
||||
db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x07); db(0x2e);
|
||||
db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x06); db(0xf6);
|
||||
db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe);
|
||||
db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46);
|
||||
db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xce);
|
||||
@ -46,21 +46,14 @@
|
||||
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); db(0x4e); db(0xae);
|
||||
db(0xfe); db(0x62); db(0x78); db(0x03); db(0x0c); db(0x6e); db(0x00); db(0x24);
|
||||
db(0x00); db(0x14); db(0x65); db(0x04); db(0x00); db(0x44); db(0x01); db(0x00);
|
||||
db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0x42);
|
||||
db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0x0a);
|
||||
db(0x4e); db(0x90); db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c);
|
||||
db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x08);
|
||||
db(0x67); db(0x06); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96);
|
||||
db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0x22);
|
||||
db(0x4e); db(0x90); db(0x24); db(0x01); db(0x67); db(0x46); db(0x24); db(0x49);
|
||||
db(0x4e); db(0xae); db(0xff); db(0x88); db(0x41); db(0xee); db(0x01); db(0x42);
|
||||
db(0x20); db(0x50); db(0x4a); db(0x90); db(0x66); db(0x12); db(0x20); db(0x4a);
|
||||
db(0x20); db(0x02); db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa);
|
||||
db(0x16); db(0x75); db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x60); db(0x20);
|
||||
db(0x20); db(0x28); db(0x00); db(0x14); db(0x42); db(0x40); db(0xb5); db(0xc0);
|
||||
db(0x66); db(0xde); db(0x30); db(0x28); db(0x00); db(0x0e); db(0x02); db(0x40);
|
||||
db(0xff); db(0xfb); db(0x80); db(0x44); db(0x31); db(0x40); db(0x00); db(0x0e);
|
||||
db(0x43); db(0xfa); db(0x16); db(0x53); db(0x21); db(0x49); db(0x00); db(0x0a);
|
||||
db(0x4e); db(0xae); db(0xff); db(0x82); db(0x41); db(0xfa); db(0x15); db(0xc6);
|
||||
db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0a); db(0xea);
|
||||
db(0x4e); db(0x90); db(0x67); db(0x10); db(0x20); db(0x49); db(0x20); db(0x01);
|
||||
db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x16); db(0x4f);
|
||||
db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x15); db(0xc6);
|
||||
db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00);
|
||||
db(0x0b); db(0xa4); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c);
|
||||
db(0xff); db(0x48); db(0x61); db(0x00); db(0x0a); db(0xbc); db(0x4e); db(0x90);
|
||||
@ -104,7 +97,7 @@
|
||||
db(0x60); db(0x00); db(0xff); db(0x74); db(0x30); db(0x3c); db(0xff); db(0x50);
|
||||
db(0x61); db(0x00); db(0x09); db(0x86); db(0x70); db(0x04); db(0x4e); db(0x90);
|
||||
db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75);
|
||||
db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0xea);
|
||||
db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfd); db(0x22);
|
||||
db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
|
||||
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa);
|
||||
db(0x14); db(0x45); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa);
|
||||
@ -294,7 +287,7 @@
|
||||
db(0xff); db(0x18); db(0x61); db(0x00); db(0x03); db(0x9c); db(0x4e); db(0x90);
|
||||
db(0x20); db(0x03); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80);
|
||||
db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70);
|
||||
db(0x00); db(0x14); db(0x41); db(0xfa); db(0xf6); db(0xc0); db(0x20); db(0x08);
|
||||
db(0x00); db(0x14); db(0x41); db(0xfa); db(0xf6); db(0xf8); db(0x20); db(0x08);
|
||||
db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff);
|
||||
db(0x27); db(0x40); db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00);
|
||||
db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14);
|
||||
@ -407,7 +400,7 @@
|
||||
db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e);
|
||||
db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a);
|
||||
db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75);
|
||||
db(0x41); db(0xfa); db(0xf3); db(0x32); db(0x02); db(0x80); db(0x00); db(0x00);
|
||||
db(0x41); db(0xfa); db(0xf3); db(0x6a); db(0x02); db(0x80); db(0x00); db(0x00);
|
||||
db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x20); db(0x88);
|
||||
db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48);
|
||||
db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22);
|
||||
@ -773,7 +766,8 @@
|
||||
db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79);
|
||||
db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73);
|
||||
db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f);
|
||||
db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x7a); db(0x33); db(0x63);
|
||||
db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d); db(0x6f);
|
||||
db(0x72); db(0x79); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);
|
||||
db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x6d); db(0x65); db(0x67);
|
||||
db(0x61); db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65);
|
||||
db(0x6d); db(0x6f); db(0x72); db(0x79); db(0x00); db(0x00); db(0x00); db(0x00);
|
||||
db(0x00); db(0x00); db(0x03); db(0xf2);
|
||||
|
||||
|
||||
@ -73,7 +73,7 @@ struct inputevent {
|
||||
extern int inputdevice_iterate (int devnum, int num, TCHAR *name, int *af);
|
||||
extern bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int num, const TCHAR *name, int port);
|
||||
extern int inputdevice_set_mapping (int devnum, int num, const TCHAR *name, TCHAR *custom, int flags, int port, int sub);
|
||||
extern int inputdevice_get_mapped_name (int devnum, int num, int *pflags, int *port, TCHAR *name, TCHAR *custom, int sub);
|
||||
extern int inputdevice_get_mapping (int devnum, int num, int *pflags, int *port, TCHAR *name, TCHAR *custom, int sub);
|
||||
extern void inputdevice_copyconfig (const struct uae_prefs *src, struct uae_prefs *dst);
|
||||
extern void inputdevice_copy_single_config (struct uae_prefs *p, int src, int dst, int devnum);
|
||||
extern void inputdevice_swap_ports (struct uae_prefs *p, int devnum);
|
||||
|
||||
@ -29,16 +29,16 @@ struct strlist {
|
||||
#define MAX_INPUT_SETTINGS 4
|
||||
#define GAMEPORT_INPUT_SETTINGS 3 // last slot is for gameport panel mappings
|
||||
#define MAX_INPUT_SUB_EVENT 4
|
||||
#define MAX_INPUT_SIMULTANEOUS_KEYS 4
|
||||
#define SPARE_SUB_EVENT 4
|
||||
|
||||
struct uae_input_device {
|
||||
TCHAR *name;
|
||||
TCHAR *configname;
|
||||
uae_s16 eventid[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT];
|
||||
TCHAR *custom[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT];
|
||||
uae_u16 flags[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT];
|
||||
uae_s16 extra[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SIMULTANEOUS_KEYS];
|
||||
uae_s8 port[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SIMULTANEOUS_KEYS];
|
||||
uae_s16 eventid[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT + 1];
|
||||
TCHAR *custom[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT + 1];
|
||||
uae_u16 flags[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT + 1];
|
||||
uae_s8 port[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT + 1];
|
||||
uae_s16 extra[MAX_INPUT_DEVICE_EVENTS];
|
||||
uae_s8 enabled;
|
||||
};
|
||||
|
||||
|
||||
485
inputdevice.cpp
485
inputdevice.cpp
@ -554,47 +554,83 @@ static bool write_config_head (struct zfile *f, int idnum, int devnum, TCHAR *na
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool write_slot (TCHAR *p, struct uae_input_device *uid, int i, int j)
|
||||
{
|
||||
bool ok = false;
|
||||
if (uid->custom[i][j] && _tcslen (uid->custom[i][j]) > 0) {
|
||||
_stprintf (p, L"'%s'.%d", uid->custom[i][j], uid->flags[i][j] & ID_FLAG_SAVE_MASK);
|
||||
ok = true;
|
||||
} else if (uid->eventid[i][j] > 0) {
|
||||
_stprintf (p, L"%s.%d", events[uid->eventid[i][j]].confname, uid->flags[i][j] & ID_FLAG_SAVE_MASK);
|
||||
ok = true;
|
||||
} else {
|
||||
_tcscat (p, L"NULL");
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
static struct inputdevice_functions *getidf (int devnum);
|
||||
|
||||
static void kbrlabel (TCHAR *s)
|
||||
{
|
||||
while (*s) {
|
||||
*s = _totupper (*s);
|
||||
if (*s == ' ')
|
||||
*s = '_';
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
static void write_config2 (struct zfile *f, int idnum, int i, int offset, TCHAR *tmp1, struct uae_input_device *id)
|
||||
{
|
||||
TCHAR tmp2[200], tmp3[200], *p;
|
||||
int evt, got, j, k;
|
||||
TCHAR *custom;
|
||||
int slotorder1[] = { 0, 1, 2, 3 };
|
||||
int slotorder2[] = { 4, 1, 2, 3 };
|
||||
int *slotorder;
|
||||
int io = i + offset;
|
||||
|
||||
p = tmp2;
|
||||
got = 0;
|
||||
|
||||
slotorder = slotorder1;
|
||||
// if gameports non-custom mapping in slot0 -> save slot4 as slot0
|
||||
if (id->port[io][0] && !(id->flags[io][0] & ID_FLAG_GAMEPORTSCUSTOM))
|
||||
slotorder = slotorder2;
|
||||
|
||||
for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) {
|
||||
evt = id->eventid[i + offset][j];
|
||||
custom = id->custom[i + offset][j];
|
||||
|
||||
evt = id->eventid[io][slotorder[j]];
|
||||
custom = id->custom[io][slotorder[j]];
|
||||
if (custom == NULL && evt <= 0) {
|
||||
for (k = j + 1; k < MAX_INPUT_SUB_EVENT; k++) {
|
||||
if (id->eventid[i + offset][k] > 0 || id->custom[i + offset][k] != NULL)
|
||||
if (id->eventid[io][slotorder[k]] > 0 || id->custom[io][slotorder[k]] != NULL)
|
||||
break;
|
||||
}
|
||||
if (k == MAX_INPUT_SUB_EVENT)
|
||||
break;
|
||||
}
|
||||
if (id->port[i + offset][0] > 0 && !(id->flags[i + offset][0] & ID_FLAG_GAMEPORTSCUSTOM))
|
||||
break;
|
||||
if (id->port[io][0] > 0) {
|
||||
if (!(id->flags[io][0] & ID_FLAG_GAMEPORTSCUSTOM) && id->port[io][SPARE_SUB_EVENT] == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (p > tmp2) {
|
||||
*p++ = ',';
|
||||
*p = 0;
|
||||
}
|
||||
bool ok = false;
|
||||
if (custom && _tcslen (custom) > 0) {
|
||||
_stprintf (p, L"'%s'.%d", custom, id->flags[i + offset][j] & ID_FLAG_SAVE_MASK);
|
||||
ok = true;
|
||||
} else if (evt <= 0) {
|
||||
_stprintf (p, L"NULL");
|
||||
} else {
|
||||
_stprintf (p, L"%s.%d", events[evt].confname, id->flags[i + offset][j] & ID_FLAG_SAVE_MASK);
|
||||
ok = true;
|
||||
}
|
||||
bool ok = write_slot (p, id, io, slotorder[j]);
|
||||
p += _tcslen (p);
|
||||
if (ok) {
|
||||
if (id->port[i + offset][j] > 0) {
|
||||
_stprintf (p, L".%d", id->port[i + offset][j] - 1);
|
||||
if (id->port[io][slotorder[j]] > 0) {
|
||||
_stprintf (p, L".%d", id->port[io][slotorder[j]] - 1);
|
||||
p += _tcslen (p);
|
||||
if (idnum != GAMEPORT_INPUT_SETTINGS && j == 0 && id->port[io][SPARE_SUB_EVENT] && slotorder == slotorder1) {
|
||||
*p++ = '.';
|
||||
write_slot (p, id, io, SPARE_SUB_EVENT);
|
||||
p += _tcslen (p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -604,7 +640,97 @@ static void write_config2 (struct zfile *f, int idnum, int i, int offset, TCHAR
|
||||
}
|
||||
}
|
||||
|
||||
static struct inputdevice_functions *getidf (int devnum);
|
||||
static void write_kbr_config (struct zfile *f, int idnum, int devnum, struct uae_input_device *kbr, struct inputdevice_functions *idf)
|
||||
{
|
||||
TCHAR tmp1[200], tmp2[200], tmp3[200], tmp4[200], tmp5[200], *p;
|
||||
int i, j, k, evt, skip;
|
||||
int slotorder1[] = { 0, 1, 2, 3 };
|
||||
int slotorder2[] = { 4, 1, 2, 3 };
|
||||
int *slotorder;
|
||||
|
||||
if (!keyboard_default)
|
||||
return;
|
||||
|
||||
if (!write_config_head (f, idnum, devnum, L"keyboard", kbr, idf))
|
||||
return;
|
||||
|
||||
i = 0;
|
||||
while (i < MAX_INPUT_DEVICE_EVENTS && kbr->extra[i] >= 0) {
|
||||
|
||||
slotorder = slotorder1;
|
||||
// if gameports non-custom mapping in slot0 -> save slot4 as slot0
|
||||
if (kbr->port[i][0] && !(kbr->flags[i][0] & ID_FLAG_GAMEPORTSCUSTOM))
|
||||
slotorder = slotorder2;
|
||||
|
||||
skip = 0;
|
||||
k = 0;
|
||||
while (keyboard_default[k].scancode >= 0) {
|
||||
if (keyboard_default[k].scancode == kbr->extra[i]) {
|
||||
skip = 1;
|
||||
for (j = 1; j < MAX_INPUT_SUB_EVENT; j++) {
|
||||
if ((kbr->flags[i][slotorder[j]] & ID_FLAG_SAVE_MASK) != 0 || kbr->eventid[i][slotorder[j]] > 0)
|
||||
skip = 0;
|
||||
}
|
||||
if (keyboard_default[k].evt != kbr->eventid[i][slotorder[0]] || keyboard_default[k].flags != (kbr->flags[i][slotorder[0]] & ID_FLAG_SAVE_MASK))
|
||||
skip = 0;
|
||||
break;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
bool isdefaultspare =
|
||||
kbr->port[i][SPARE_SUB_EVENT] &&
|
||||
keyboard_default[k].evt == kbr->eventid[i][SPARE_SUB_EVENT] && keyboard_default[k].flags == (kbr->flags[i][SPARE_SUB_EVENT] & ID_FLAG_SAVE_MASK);
|
||||
|
||||
if (kbr->port[i][0] > 0 && !(kbr->flags[i][0] & ID_FLAG_GAMEPORTSCUSTOM) && (kbr->port[i][SPARE_SUB_EVENT] == 0 || isdefaultspare))
|
||||
skip = 1;
|
||||
if (kbr->eventid[i][0] == 0 && (kbr->flags[i][0] & ID_FLAG_SAVE_MASK) == 0 && keyboard_default[k].scancode < 0)
|
||||
skip = 1;
|
||||
if (skip) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
p = tmp2;
|
||||
p[0] = 0;
|
||||
for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) {
|
||||
TCHAR *custom = kbr->custom[i][slotorder[j]];
|
||||
evt = kbr->eventid[i][slotorder[j]];
|
||||
if (custom == NULL && evt <= 0) {
|
||||
for (k = j + 1; k < MAX_INPUT_SUB_EVENT; k++) {
|
||||
if (kbr->eventid[i][slotorder[k]] > 0 || kbr->custom[i][slotorder[k]] != NULL)
|
||||
break;
|
||||
}
|
||||
if (k == MAX_INPUT_SUB_EVENT)
|
||||
break;
|
||||
}
|
||||
if (p > tmp2) {
|
||||
*p++ = ',';
|
||||
*p = 0;
|
||||
}
|
||||
bool ok = write_slot (p, kbr, i, slotorder[j]);
|
||||
p += _tcslen (p);
|
||||
if (ok) {
|
||||
// save port number + SPARE SLOT if needed
|
||||
if (kbr->port[i][slotorder[j]] > 0 && (kbr->flags[i][slotorder[j]] & ID_FLAG_GAMEPORTSCUSTOM)) {
|
||||
_stprintf (p, L".%d", kbr->port[i][slotorder[j]] - 1);
|
||||
p += _tcslen (p);
|
||||
if (idnum != GAMEPORT_INPUT_SETTINGS && j == 0 && kbr->port[i][SPARE_SUB_EVENT] && !isdefaultspare && slotorder == slotorder1) {
|
||||
*p++ = '.';
|
||||
write_slot (p, kbr, i, SPARE_SUB_EVENT);
|
||||
p += _tcslen (p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
idf->get_widget_type (devnum, i, tmp5, NULL);
|
||||
p = tmp5 + _tcslen (tmp5) + 1;
|
||||
_stprintf (tmp3, L"%d%s%s", kbr->extra[i], p[0] ? L"." : L"", p[0] ? p : L"");
|
||||
kbrlabel (tmp3);
|
||||
_stprintf (tmp1, L"keyboard.%d.button.%s", devnum, tmp3);
|
||||
_stprintf (tmp4, L"input.%d.%s", idnum + 1, tmp1);
|
||||
cfgfile_write_str (f, tmp4, tmp2[0] ? tmp2 : L"NULL");
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
static void write_config (struct zfile *f, int idnum, int devnum, TCHAR *name, struct uae_input_device *id, struct uae_input_device2 *id2, struct inputdevice_functions *idf)
|
||||
{
|
||||
@ -622,96 +748,6 @@ static void write_config (struct zfile *f, int idnum, int devnum, TCHAR *name, s
|
||||
write_config2 (f, idnum, i, ID_BUTTON_OFFSET, tmp1, id);
|
||||
}
|
||||
|
||||
static void kbrlabel (TCHAR *s)
|
||||
{
|
||||
while (*s) {
|
||||
*s = _totupper (*s);
|
||||
if (*s == ' ')
|
||||
*s = '_';
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
static void write_kbr_config (struct zfile *f, int idnum, int devnum, struct uae_input_device *kbr, struct inputdevice_functions *idf)
|
||||
{
|
||||
TCHAR tmp1[200], tmp2[200], tmp3[200], tmp4[200], *p;
|
||||
int i, j, k, evt, skip;
|
||||
|
||||
if (!keyboard_default)
|
||||
return;
|
||||
|
||||
if (!write_config_head (f, idnum, devnum, L"keyboard", kbr, idf))
|
||||
return;
|
||||
|
||||
i = 0;
|
||||
while (i < MAX_INPUT_DEVICE_EVENTS && kbr->extra[i][0] >= 0) {
|
||||
skip = 0;
|
||||
k = 0;
|
||||
while (keyboard_default[k].scancode >= 0) {
|
||||
if (keyboard_default[k].scancode == kbr->extra[i][0]) {
|
||||
skip = 1;
|
||||
for (j = 1; j < MAX_INPUT_SUB_EVENT; j++) {
|
||||
if ((kbr->flags[i][j] & ID_FLAG_SAVE_MASK) != 0 || kbr->eventid[i][j] > 0)
|
||||
skip = 0;
|
||||
}
|
||||
if (keyboard_default[k].evt != kbr->eventid[i][0] || keyboard_default[k].flags != (kbr->flags[i][0] & ID_FLAG_SAVE_MASK))
|
||||
skip = 0;
|
||||
break;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
if (kbr->port[i][0] > 0 && !(kbr->flags[i][0] & ID_FLAG_GAMEPORTSCUSTOM))
|
||||
skip = 1;
|
||||
if (kbr->eventid[i][0] == 0 && (kbr->flags[i][0] & ID_FLAG_SAVE_MASK) == 0 && keyboard_default[k].scancode < 0)
|
||||
skip = 1;
|
||||
if (skip) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
p = tmp2;
|
||||
p[0] = 0;
|
||||
for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) {
|
||||
TCHAR *custom = kbr->custom[i][j];
|
||||
evt = kbr->eventid[i][j];
|
||||
if (custom == NULL && evt <= 0) {
|
||||
for (k = j + 1; k < MAX_INPUT_SUB_EVENT; k++) {
|
||||
if (kbr->eventid[i][k] > 0 || kbr->custom[i][k] != NULL)
|
||||
break;
|
||||
}
|
||||
if (k == MAX_INPUT_SUB_EVENT)
|
||||
break;
|
||||
}
|
||||
if (p > tmp2) {
|
||||
*p++ = ',';
|
||||
*p = 0;
|
||||
}
|
||||
bool ok = false;
|
||||
if (custom && _tcslen (custom) > 0) {
|
||||
_stprintf (p, L"'%s'.%d", custom, kbr->flags[i][j] & ID_FLAG_SAVE_MASK);
|
||||
ok = true;
|
||||
} else if (evt > 0) {
|
||||
_stprintf (p, L"%s.%d", events[evt].confname, kbr->flags[i][j] & ID_FLAG_SAVE_MASK);
|
||||
ok = true;
|
||||
} else {
|
||||
_tcscat (p, L"NULL");
|
||||
}
|
||||
p += _tcslen(p);
|
||||
if (ok) {
|
||||
if (kbr->port[i][j] > 0) {
|
||||
_stprintf (p, L".%d", kbr->port[i][j] - 1);
|
||||
p += _tcslen (p);
|
||||
}
|
||||
}
|
||||
}
|
||||
_stprintf (tmp3, L"%d", kbr->extra[i][0]);
|
||||
kbrlabel (tmp3);
|
||||
_stprintf (tmp1, L"keyboard.%d.button.%s", devnum, tmp3);
|
||||
_stprintf (tmp4, L"input.%d.%s", idnum + 1, tmp1);
|
||||
cfgfile_write_str (f, tmp4, tmp2[0] ? tmp2 : L"NULL");
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void write_inputdevice_config (struct uae_prefs *p, struct zfile *f)
|
||||
{
|
||||
int i, id;
|
||||
@ -763,7 +799,7 @@ static TCHAR *getstring (TCHAR **pp)
|
||||
if (*p == 0)
|
||||
return 0;
|
||||
i = 0;
|
||||
while (*p != 0 && *p !='.' && *p != ',')
|
||||
while (*p != 0 && *p !='.' && *p != ',' && i < 1000 - 1)
|
||||
str[i++] = *p++;
|
||||
if (*p == '.' || *p == ',')
|
||||
p++;
|
||||
@ -801,7 +837,7 @@ void reset_inputdevice_config (struct uae_prefs *prefs)
|
||||
static void set_kbr_default_event (struct uae_input_device *kbr, struct uae_input_device_kbr_default *trans, int num)
|
||||
{
|
||||
for (int i = 0; trans[i].scancode >= 0; i++) {
|
||||
if (kbr->extra[num][0] == trans[i].scancode) {
|
||||
if (kbr->extra[num] == trans[i].scancode) {
|
||||
int k;
|
||||
for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {
|
||||
if (kbr->eventid[num][k] == 0)
|
||||
@ -834,14 +870,14 @@ static void set_kbr_default (struct uae_prefs *p, int index, int devnum)
|
||||
kbr = &p->keyboard_settings[index][j];
|
||||
for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) {
|
||||
memset (kbr, 0, sizeof (struct uae_input_device));
|
||||
kbr->extra[i][0] = -1;
|
||||
kbr->extra[i] = -1;
|
||||
}
|
||||
if (j < id->get_num ()) {
|
||||
if (input_get_default_keyboard (j))
|
||||
kbr->enabled = 1;
|
||||
for (i = 0; i < id->get_widget_num (j); i++) {
|
||||
id->get_widget_type (j, i, 0, &scancode);
|
||||
kbr->extra[i][0] = scancode;
|
||||
kbr->extra[i] = scancode;
|
||||
set_kbr_default_event (kbr, trans, i);
|
||||
}
|
||||
}
|
||||
@ -865,12 +901,83 @@ static void clear_id (struct uae_input_device *id)
|
||||
id->name = n;
|
||||
}
|
||||
|
||||
|
||||
static bool readslot (TCHAR *parm, int num, int joystick, int button, struct uae_input_device *id, int keynum, int subnum, struct inputevent *ie, int flags, int port, TCHAR *custom)
|
||||
{
|
||||
int mask;
|
||||
|
||||
if (custom == NULL && ie->name == NULL) {
|
||||
if (!_tcscmp (parm, L"NULL")) {
|
||||
if (joystick < 0) {
|
||||
id->eventid[keynum][subnum] = 0;
|
||||
id->flags[keynum][subnum] = 0;
|
||||
} else if (button) {
|
||||
id->eventid[num + ID_BUTTON_OFFSET][subnum] = 0;
|
||||
id->flags[num + ID_BUTTON_OFFSET][subnum] = 0;
|
||||
} else {
|
||||
id->eventid[num + ID_AXIS_OFFSET][subnum] = 0;
|
||||
id->flags[num + ID_AXIS_OFFSET][subnum] = 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (joystick < 0) {
|
||||
if (!(ie->allow_mask & AM_K))
|
||||
return false;
|
||||
id->eventid[keynum][subnum] = ie - events;
|
||||
id->flags[keynum][subnum] = flags;
|
||||
id->port[keynum][subnum] = port;
|
||||
xfree (id->custom[keynum][subnum]);
|
||||
id->custom[keynum][subnum] = custom;
|
||||
} else if (button) {
|
||||
if (joystick)
|
||||
mask = AM_JOY_BUT;
|
||||
else
|
||||
mask = AM_MOUSE_BUT;
|
||||
if (!(ie->allow_mask & mask))
|
||||
return false;
|
||||
id->eventid[num + ID_BUTTON_OFFSET][subnum] = ie - events;
|
||||
id->flags[num + ID_BUTTON_OFFSET][subnum] = flags;
|
||||
id->port[num + ID_BUTTON_OFFSET][subnum] = port;
|
||||
xfree (id->custom[num + ID_BUTTON_OFFSET][subnum]);
|
||||
id->custom[num + ID_BUTTON_OFFSET][subnum] = custom;
|
||||
} else {
|
||||
if (joystick)
|
||||
mask = AM_JOY_AXIS;
|
||||
else
|
||||
mask = AM_MOUSE_AXIS;
|
||||
if (!(ie->allow_mask & mask))
|
||||
return false;
|
||||
id->eventid[num + ID_AXIS_OFFSET][subnum] = ie - events;
|
||||
id->flags[num + ID_AXIS_OFFSET][subnum] = flags;
|
||||
id->port[num + ID_AXIS_OFFSET][subnum] = port;
|
||||
xfree (id->custom[num + ID_AXIS_OFFSET][subnum]);
|
||||
id->custom[num + ID_AXIS_OFFSET][subnum] = custom;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static struct inputevent *readevent (TCHAR *name, TCHAR **customp)
|
||||
{
|
||||
int i = 1;
|
||||
while (events[i].name) {
|
||||
if (!_tcscmp (events[i].confname, name))
|
||||
return &events[i];
|
||||
i++;
|
||||
}
|
||||
if (_tcslen (name) > 2 && name[0] == '\'' && name[_tcslen (name) - 1] == '\'') {
|
||||
TCHAR *custom = my_strdup (name + 1);
|
||||
custom[_tcslen (custom) - 1] = 0;
|
||||
*customp = custom;
|
||||
}
|
||||
return &events[0];
|
||||
}
|
||||
|
||||
void read_inputdevice_config (struct uae_prefs *pr, TCHAR *option, TCHAR *value)
|
||||
{
|
||||
struct uae_input_device *id = 0;
|
||||
struct inputevent *ie;
|
||||
int devnum, num, button, joystick, flags, port, i, subnum, idnum, keynum;
|
||||
int mask;
|
||||
int devnum, num, button, joystick, subnum, idnum, keynum;
|
||||
TCHAR *p, *p2, *custom;
|
||||
|
||||
option += 6; /* "input." */
|
||||
@ -988,10 +1095,12 @@ void read_inputdevice_config (struct uae_prefs *pr, TCHAR *option, TCHAR *value)
|
||||
if (idnum == GAMEPORT_INPUT_SETTINGS && id->enabled == 0)
|
||||
return;
|
||||
|
||||
button = 0;
|
||||
keynum = 0;
|
||||
if (joystick < 0) {
|
||||
num = getnum (&p);
|
||||
for (keynum = 0; keynum < MAX_INPUT_DEVICE_EVENTS; keynum++) {
|
||||
if (id->extra[keynum][0] == num)
|
||||
if (id->extra[keynum] == num)
|
||||
break;
|
||||
}
|
||||
if (keynum >= MAX_INPUT_DEVICE_EVENTS)
|
||||
@ -1010,25 +1119,13 @@ void read_inputdevice_config (struct uae_prefs *pr, TCHAR *option, TCHAR *value)
|
||||
|
||||
custom = NULL;
|
||||
for (subnum = 0; subnum < MAX_INPUT_SUB_EVENT; subnum++) {
|
||||
int flags, port;
|
||||
xfree (custom);
|
||||
custom = NULL;
|
||||
p2 = getstring (&p);
|
||||
if (!p2)
|
||||
break;
|
||||
i = 1;
|
||||
while (events[i].name) {
|
||||
if (!_tcscmp (events[i].confname, p2))
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
ie = &events[i];
|
||||
if (!ie->name) {
|
||||
ie = &events[0];
|
||||
if (_tcslen (p2) > 2 && p2[0] == '\'' && p2[_tcslen (p2) - 1] == '\'') {
|
||||
custom = my_strdup (p2 + 1);
|
||||
custom[_tcslen (custom) - 1] = 0;
|
||||
}
|
||||
}
|
||||
ie = readevent (p2, &custom);
|
||||
flags = 0;
|
||||
port = 0;
|
||||
if (p[-1] == '.')
|
||||
@ -1036,60 +1133,27 @@ void read_inputdevice_config (struct uae_prefs *pr, TCHAR *option, TCHAR *value)
|
||||
if (p[-1] == '.') {
|
||||
port = getnum (&p) + 1;
|
||||
}
|
||||
if (idnum == GAMEPORT_INPUT_SETTINGS && port == 0)
|
||||
continue;
|
||||
if (p[-1] == '.' && idnum != GAMEPORT_INPUT_SETTINGS) {
|
||||
p2 = getstring (&p);
|
||||
if (p2) {
|
||||
int flags2 = 0;
|
||||
if (p[-1] == '.')
|
||||
flags2 = getnum (&p);
|
||||
TCHAR *custom2 = NULL;
|
||||
struct inputevent *ie2 = readevent (p2, &custom2);
|
||||
readslot (p2, num, joystick, button, id, keynum, SPARE_SUB_EVENT, ie2, flags2, MAX_JPORTS + 1, custom2);
|
||||
}
|
||||
}
|
||||
|
||||
while (*p != 0) {
|
||||
if (p[-1] == ',')
|
||||
break;
|
||||
p++;
|
||||
}
|
||||
|
||||
if (custom == NULL && ie->name == NULL) {
|
||||
if (!_tcscmp(p2, L"NULL")) {
|
||||
if (joystick < 0) {
|
||||
id->eventid[keynum][subnum] = 0;
|
||||
id->flags[keynum][subnum] = 0;
|
||||
} else if (button) {
|
||||
id->eventid[num + ID_BUTTON_OFFSET][subnum] = 0;
|
||||
id->flags[num + ID_BUTTON_OFFSET][subnum] = 0;
|
||||
} else {
|
||||
id->eventid[num + ID_AXIS_OFFSET][subnum] = 0;
|
||||
id->flags[num + ID_AXIS_OFFSET][subnum] = 0;
|
||||
}
|
||||
}
|
||||
if (!readslot (p2, num, joystick, button, id, keynum, subnum, ie, flags, port, custom))
|
||||
continue;
|
||||
}
|
||||
if (joystick < 0) {
|
||||
if (!(ie->allow_mask & AM_K))
|
||||
continue;
|
||||
id->eventid[keynum][subnum] = ie - events;
|
||||
id->flags[keynum][subnum] = flags;
|
||||
id->port[keynum][subnum] = port;
|
||||
xfree (id->custom[keynum][subnum]);
|
||||
id->custom[keynum][subnum] = custom;
|
||||
} else if (button) {
|
||||
if (joystick)
|
||||
mask = AM_JOY_BUT;
|
||||
else
|
||||
mask = AM_MOUSE_BUT;
|
||||
if (!(ie->allow_mask & mask))
|
||||
continue;
|
||||
id->eventid[num + ID_BUTTON_OFFSET][subnum] = ie - events;
|
||||
id->flags[num + ID_BUTTON_OFFSET][subnum] = flags;
|
||||
id->port[num + ID_BUTTON_OFFSET][subnum] = port;
|
||||
xfree (id->custom[num + ID_BUTTON_OFFSET][subnum]);
|
||||
id->custom[num + ID_BUTTON_OFFSET][subnum] = custom;
|
||||
} else {
|
||||
if (joystick)
|
||||
mask = AM_JOY_AXIS;
|
||||
else
|
||||
mask = AM_MOUSE_AXIS;
|
||||
if (!(ie->allow_mask & mask))
|
||||
continue;
|
||||
id->eventid[num + ID_AXIS_OFFSET][subnum] = ie - events;
|
||||
id->flags[num + ID_AXIS_OFFSET][subnum] = flags;
|
||||
id->port[num + ID_AXIS_OFFSET][subnum] = port;
|
||||
xfree (id->custom[num + ID_AXIS_OFFSET][subnum]);
|
||||
id->custom[num + ID_AXIS_OFFSET][subnum] = custom;
|
||||
}
|
||||
custom = NULL;
|
||||
}
|
||||
xfree (custom);
|
||||
@ -3343,7 +3407,7 @@ static void scanevents (struct uae_prefs *p)
|
||||
use_keyboards[i] = 0;
|
||||
if (keyboards[i].enabled && i < idev[IDTYPE_KEYBOARD].get_num()) {
|
||||
j = 0;
|
||||
while (j < MAX_INPUT_DEVICE_EVENTS && keyboards[i].extra[j][0] >= 0) {
|
||||
while (j < MAX_INPUT_DEVICE_EVENTS && keyboards[i].extra[j] >= 0) {
|
||||
use_keyboards[i] = 1;
|
||||
for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {
|
||||
ei = keyboards[i].eventid[j][k];
|
||||
@ -3352,7 +3416,7 @@ static void scanevents (struct uae_prefs *p)
|
||||
ismouse (ei);
|
||||
isdigitalbutton (ei);
|
||||
if (ei > 0)
|
||||
scancodeused[i][keyboards[i].extra[j][k]] = ei;
|
||||
scancodeused[i][keyboards[i].extra[j]] = ei;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
@ -3531,7 +3595,7 @@ static void checkcompakb (int *kb, int *srcmap)
|
||||
while (kb[j] >= 0 && srcmap[k] >= 0) {
|
||||
int id = kb[j];
|
||||
for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) {
|
||||
if (uid->extra[l][0] == id) {
|
||||
if (uid->extra[l] == id) {
|
||||
avail++;
|
||||
if (uid->eventid[l][0] == srcmap[k])
|
||||
found++;
|
||||
@ -3560,7 +3624,7 @@ static void checkcompakb (int *kb, int *srcmap)
|
||||
k++;
|
||||
}
|
||||
for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) {
|
||||
if (uid->extra[l][0] == id) {
|
||||
if (uid->extra[l] == id) {
|
||||
uid->eventid[l][0] = evt;
|
||||
break;
|
||||
}
|
||||
@ -3588,6 +3652,27 @@ static void setautofireevent (struct uae_input_device *uid, int num, int sub, in
|
||||
}
|
||||
}
|
||||
|
||||
static void sparerestore (struct uae_input_device *uid, int num, int sub)
|
||||
{
|
||||
uid->eventid[num][sub] = uid->eventid[num][SPARE_SUB_EVENT];
|
||||
uid->flags[num][sub] = uid->flags[num][SPARE_SUB_EVENT];
|
||||
uid->custom[num][sub] = uid->custom[num][SPARE_SUB_EVENT];
|
||||
uid->eventid[num][SPARE_SUB_EVENT] = 0;
|
||||
uid->flags[num][SPARE_SUB_EVENT] = 0;
|
||||
uid->port[num][SPARE_SUB_EVENT] = 0;
|
||||
uid->custom[num][SPARE_SUB_EVENT] = 0;
|
||||
}
|
||||
|
||||
static void sparecopy (struct uae_input_device *uid, int num, int sub)
|
||||
{
|
||||
uid->eventid[num][SPARE_SUB_EVENT] = uid->eventid[num][sub];
|
||||
uid->flags[num][SPARE_SUB_EVENT] = uid->flags[num][sub];
|
||||
uid->port[num][SPARE_SUB_EVENT] = MAX_JPORTS + 1;
|
||||
xfree (uid->custom[num][SPARE_SUB_EVENT]);
|
||||
uid->custom[num][SPARE_SUB_EVENT] = uid->custom[num][sub];
|
||||
uid->custom[num][sub] = NULL;
|
||||
}
|
||||
|
||||
static void setcompakb (int *kb, int *srcmap, int index, int af)
|
||||
{
|
||||
int j, k;
|
||||
@ -3598,7 +3683,8 @@ static void setcompakb (int *kb, int *srcmap, int index, int af)
|
||||
for (int m = 0; m < MAX_INPUT_DEVICES; m++) {
|
||||
struct uae_input_device *uid = &keyboards[m];
|
||||
for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) {
|
||||
if (uid->extra[l][0] == id) {
|
||||
if (uid->extra[l] == id) {
|
||||
sparecopy (uid, l, 0);
|
||||
uid->eventid[l][0] = srcmap[k];
|
||||
uid->flags[l][0] = 0;
|
||||
uid->port[l][0] = index + 1;
|
||||
@ -3732,6 +3818,8 @@ static void cleardevgp (struct uae_input_device *uid, int num, bool nocustom, in
|
||||
xfree (uid[num].custom[i][j]);
|
||||
uid[num].custom[i][j] = NULL;
|
||||
uid[num].port[i][j] = 0;
|
||||
if (uid[num].port[i][SPARE_SUB_EVENT])
|
||||
sparerestore (&uid[num], i, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3748,8 +3836,11 @@ static void cleardevkbrgp (struct uae_input_device *uid, int num, bool nocustom,
|
||||
xfree (uid[num].custom[i][j]);
|
||||
uid[num].custom[i][j] = NULL;
|
||||
uid[num].port[i][j] = 0;
|
||||
if (j == 0)
|
||||
if (uid[num].port[i][SPARE_SUB_EVENT]) {
|
||||
sparerestore (&uid[num], i, j);
|
||||
} else if (j == 0) {
|
||||
set_kbr_default_event (&uid[num], keyboard_default, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4284,7 +4375,7 @@ bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int
|
||||
int sub = 0;
|
||||
if (inputdevice_get_widget_type (devnum, num, NULL) != IDEV_WIDGET_KEY) {
|
||||
for (sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) {
|
||||
if (!inputdevice_get_mapped_name (devnum, num, NULL, NULL, NULL, NULL, sub))
|
||||
if (!inputdevice_get_mapping (devnum, num, NULL, NULL, NULL, NULL, sub))
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -4295,8 +4386,14 @@ bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int
|
||||
joysticks = prefs->joystick_settings[prefs->input_selected_setting];
|
||||
mice = prefs->mouse_settings[prefs->input_selected_setting];
|
||||
keyboards = prefs->keyboard_settings[prefs->input_selected_setting];
|
||||
if (prefs->input_selected_setting != GAMEPORT_INPUT_SETTINGS)
|
||||
if (prefs->input_selected_setting != GAMEPORT_INPUT_SETTINGS) {
|
||||
int xflags, xport;
|
||||
TCHAR xname[MAX_DPATH], xcustom[MAX_DPATH];
|
||||
inputdevice_get_mapping (devnum, num, &xflags, &xport, xname, xcustom, 0);
|
||||
if (xport == 0)
|
||||
inputdevice_set_mapping (devnum, num, xname, xcustom, xflags, MAX_JPORTS + 1, SPARE_SUB_EVENT);
|
||||
inputdevice_set_mapping (devnum, num, name, NULL, IDEV_MAPPED_GAMEPORTSCUSTOM, port + 1, 0);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -4482,10 +4579,10 @@ int inputdevice_synccapslock (int oldcaps, int *capstable)
|
||||
|
||||
if (!keyboards)
|
||||
return -1;
|
||||
for (j = 0; na->extra[j][0]; j++) {
|
||||
if (na->extra[j][0] == INPUTEVENT_KEY_CAPS_LOCK) {
|
||||
for (j = 0; na->extra[j]; j++) {
|
||||
if (na->extra[j] == INPUTEVENT_KEY_CAPS_LOCK) {
|
||||
for (i = 0; capstable[i]; i += 2) {
|
||||
if (na->extra[j][0] == capstable[i]) {
|
||||
if (na->extra[j] == capstable[i]) {
|
||||
if (oldcaps != capstable[i + 1]) {
|
||||
oldcaps = capstable[i + 1];
|
||||
inputdevice_translatekeycode (0, capstable[i], oldcaps ? -1 : 0);
|
||||
@ -4507,8 +4604,8 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state
|
||||
if (!keyboards || scancode < 0)
|
||||
return handled;
|
||||
j = 0;
|
||||
while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j][0] >= 0) {
|
||||
if (na->extra[j][0] == scancode) {
|
||||
while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) {
|
||||
if (na->extra[j] == scancode) {
|
||||
for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {/* send key release events in reverse order */
|
||||
int autofire = (na->flags[j][sublevdir[state == 0 ? 1 : 0][k]] & ID_FLAG_AUTOFIRE) ? 1 : 0;
|
||||
int toggle = (na->flags[j][sublevdir[state == 0 ? 1 : 0][k]] & ID_FLAG_TOGGLE) ? 1 : 0;
|
||||
@ -4878,7 +4975,7 @@ int inputdevice_iterate (int devnum, int num, TCHAR *name, int *af)
|
||||
}
|
||||
|
||||
// return mapped event from devnum/num/sub
|
||||
int inputdevice_get_mapped_name (int devnum, int num, int *pflags, int *pport, TCHAR *name, TCHAR *custom, int sub)
|
||||
int inputdevice_get_mapping (int devnum, int num, int *pflags, int *pport, TCHAR *name, TCHAR *custom, int sub)
|
||||
{
|
||||
const struct inputdevice_functions *idf = getidf (devnum);
|
||||
const struct uae_input_device *uid = get_uid (idf, inputdevice_get_device_index (devnum));
|
||||
@ -5160,14 +5257,14 @@ void inputdevice_testrecord (int type, int num, int wtype, int wnum, int state)
|
||||
} else {
|
||||
struct uae_input_device *na = &keyboards[num];
|
||||
int j = 0;
|
||||
while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j][0] >= 0) {
|
||||
if (na->extra[j][0] == wnum) {
|
||||
while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) {
|
||||
if (na->extra[j] == wnum) {
|
||||
wnum = j;
|
||||
break;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
if (j >= MAX_INPUT_DEVICE_EVENTS || na->extra[j][0] < 0)
|
||||
if (j >= MAX_INPUT_DEVICE_EVENTS || na->extra[j] < 0)
|
||||
type = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,6 +68,7 @@ struct didata {
|
||||
TCHAR *name;
|
||||
TCHAR *sortname;
|
||||
TCHAR *configname;
|
||||
int vid, pid;
|
||||
|
||||
int connection;
|
||||
LPDIRECTINPUTDEVICE8 lpdi;
|
||||
@ -615,8 +616,8 @@ static int initialize_catweasel (void)
|
||||
}
|
||||
|
||||
|
||||
#define RDP_DEVICE1 L"\\??\\Root#RDP_"
|
||||
#define RDP_DEVICE2 L"\\\\?\\Root#RDP_"
|
||||
#define RDP_DEVICE1 L"\\??\\Root#"
|
||||
#define RDP_DEVICE2 L"\\\\?\\Root#"
|
||||
|
||||
static int rdpdevice(TCHAR *buf)
|
||||
{
|
||||
@ -650,8 +651,12 @@ static void rawinputfixname (const TCHAR *name, const TCHAR *friendlyname)
|
||||
if (_tcslen (tmp2) >= _tcslen (tmp) && !_tcsncmp (tmp2, tmp, _tcslen (tmp))) {
|
||||
xfree (did->name);
|
||||
xfree (did->sortname);
|
||||
did->name = my_strdup (friendlyname);
|
||||
did->sortname = my_strdup (friendlyname);
|
||||
if (did->vid > 0 && did->pid > 0)
|
||||
_stprintf (tmp, L"%s [%04X/%04X]", friendlyname, did->vid, did->pid);
|
||||
else
|
||||
_stprintf (tmp, L"%s", friendlyname);
|
||||
did->name = my_strdup (tmp);
|
||||
did->sortname = my_strdup (tmp);
|
||||
write_log (L"'%s' ('%s')\n", did->name, did->configname);
|
||||
}
|
||||
}
|
||||
@ -730,6 +735,23 @@ static TCHAR *rawkeyboardlabels[256] =
|
||||
L""
|
||||
};
|
||||
|
||||
static void getvidpid2 (TCHAR *devname, int *id, TCHAR *str)
|
||||
{
|
||||
TCHAR *s = _tcsstr (devname, str);
|
||||
if (!s)
|
||||
return;
|
||||
int val = -1;
|
||||
_stscanf (s + _tcslen (str), L"%X", &val);
|
||||
*id = val;
|
||||
}
|
||||
|
||||
static void getvidpid (TCHAR *devname, int *vid, int *pid)
|
||||
{
|
||||
*vid = *pid = -1;
|
||||
getvidpid2 (devname, vid, L"VID_");
|
||||
getvidpid2 (devname, pid, L"PID_");
|
||||
}
|
||||
|
||||
static int initialize_rawinput (void)
|
||||
{
|
||||
RAWINPUTDEVICELIST *ridl = 0;
|
||||
@ -816,7 +838,11 @@ static int initialize_rawinput (void)
|
||||
|
||||
rnum_raw++;
|
||||
cleardid (did);
|
||||
_stprintf (tmp, L"%s", type == RIM_TYPEMOUSE ? L"RAW Mouse" : L"RAW Keyboard");
|
||||
getvidpid (buf, &did->vid, &did->pid);
|
||||
if (did->vid > 0 && did->pid > 0)
|
||||
_stprintf (tmp, L"%s (%04X/%04X)", type == RIM_TYPEMOUSE ? L"RAW Mouse" : L"RAW Keyboard", did->vid, did->pid);
|
||||
else
|
||||
_stprintf (tmp, L"%s", type == RIM_TYPEMOUSE ? L"RAW Mouse" : L"RAW Keyboard");
|
||||
did->name = my_strdup (tmp);
|
||||
did->rawinput = h;
|
||||
did->connection = DIDC_RAW;
|
||||
@ -1822,8 +1848,11 @@ static int get_kb_widget_first (int kb, int type)
|
||||
|
||||
static int get_kb_widget_type (int kb, int num, TCHAR *name, uae_u32 *code)
|
||||
{
|
||||
if (name)
|
||||
if (name) {
|
||||
_stprintf (name, L"[%02X] %s", di_keyboard[kb].buttonmappings[num], di_keyboard[kb].buttonname[num]);
|
||||
name += _tcslen (name) + 1;
|
||||
_tcscpy (name, di_keyboard[kb].buttonname[num]);
|
||||
}
|
||||
if (code)
|
||||
*code = di_keyboard[kb].buttonmappings[num];
|
||||
return IDEV_WIDGET_KEY;
|
||||
@ -2580,6 +2609,14 @@ int input_get_default_keyboard (int i)
|
||||
|
||||
static void setid (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt)
|
||||
{
|
||||
// wrong place!
|
||||
uid->eventid[slot][SPARE_SUB_EVENT] = uid->eventid[slot][sub];
|
||||
uid->flags[slot][SPARE_SUB_EVENT] = uid->flags[slot][sub];
|
||||
uid->port[slot][SPARE_SUB_EVENT] = MAX_JPORTS + 1;
|
||||
xfree (uid->custom[slot][SPARE_SUB_EVENT]);
|
||||
uid->custom[slot][SPARE_SUB_EVENT] = uid->custom[slot][sub];
|
||||
uid->custom[slot][sub] = NULL;
|
||||
|
||||
uid[i].eventid[slot][sub] = evt;
|
||||
uid[i].port[slot][sub] = port + 1;
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
#if defined (D3D) && defined (GFXFILTER)
|
||||
|
||||
#define EFFECT_VERSION 2
|
||||
#define D3DX9DLL L"d3dx9_43.dll"
|
||||
|
||||
#include "options.h"
|
||||
#include "xwin.h"
|
||||
@ -444,7 +445,7 @@ int D3D_canshaders (void)
|
||||
if (d3d_yesno > 0)
|
||||
return 1;
|
||||
d3d_yesno = -1;
|
||||
h = LoadLibrary (L"d3dx9_42.dll");
|
||||
h = LoadLibrary (D3DX9DLL);
|
||||
if (h != NULL) {
|
||||
FreeLibrary (h);
|
||||
d3dx = Direct3DCreate9 (D3D_SDK_VERSION);
|
||||
@ -1569,9 +1570,9 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int t_w, int t_h, int depth
|
||||
return errmsg;
|
||||
}
|
||||
|
||||
d3dx = LoadLibrary (L"d3dx9_42.dll");
|
||||
d3dx = LoadLibrary (D3DX9DLL);
|
||||
if (d3dx == NULL) {
|
||||
_tcscpy (errmsg, L"Direct3D: August 2009 or newer DirectX Runtime required.\n\nhttp://go.microsoft.com/fwlink/?linkid=56513");
|
||||
_tcscpy (errmsg, L"Direct3D: June 2010 or newer DirectX Runtime required.\n\nhttp://go.microsoft.com/fwlink/?linkid=56513");
|
||||
if (isfullscreen () <= 0)
|
||||
ShellExecute(NULL, L"open", L"http://go.microsoft.com/fwlink/?linkid=56513", NULL, NULL, SW_SHOWNORMAL);
|
||||
return errmsg;
|
||||
|
||||
@ -418,21 +418,18 @@ void *shmat (int shmid, void *shmaddr, int shmflg)
|
||||
got = TRUE;
|
||||
}
|
||||
if(!_tcscmp (shmids[shmid].name, L"z3")) {
|
||||
shmaddr=natmem_offset + currprefs.z3fastmem_start;
|
||||
shmaddr=natmem_offset + z3fastmem_start;
|
||||
if (!currprefs.z3fastmem2_size)
|
||||
size += BARRIER;
|
||||
got = TRUE;
|
||||
}
|
||||
if(!_tcscmp (shmids[shmid].name, L"z3_2")) {
|
||||
shmaddr=natmem_offset + currprefs.z3fastmem_start + currprefs.z3fastmem_size;
|
||||
shmaddr=natmem_offset + z3fastmem_start + currprefs.z3fastmem_size;
|
||||
size += BARRIER;
|
||||
got = TRUE;
|
||||
}
|
||||
if(!_tcscmp (shmids[shmid].name, L"z3_chip")) {
|
||||
uae_u32 l = currprefs.z3fastmem_start + currprefs.z3fastmem_size + currprefs.z3fastmem2_size;
|
||||
if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size)
|
||||
l += 16 * 1024 * 1024;
|
||||
shmaddr=natmem_offset + l;
|
||||
shmaddr=natmem_offset + z3chipmem_start;
|
||||
size += BARRIER;
|
||||
got = TRUE;
|
||||
}
|
||||
|
||||
@ -177,7 +177,7 @@ BEGIN
|
||||
RTEXT "Chip:",IDC_STATIC,19,25,32,15,SS_CENTERIMAGE
|
||||
RTEXT "Slow:",IDC_STATIC,144,25,32,15,SS_CENTERIMAGE
|
||||
RTEXT "Z3 Fast:",IDC_STATIC,144,49,32,15,SS_CENTERIMAGE
|
||||
RTEXT "Z3 Chip:",IDC_STATIC,123,73,54,15,SS_CENTERIMAGE
|
||||
RTEXT "32-bit Chip:",IDC_STATIC,99,73,78,15,SS_CENTERIMAGE
|
||||
CONTROL "",IDC_Z3CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,71,60,20
|
||||
EDITTEXT IDC_Z3CHIPRAM,243,76,34,12,ES_CENTER | ES_READONLY
|
||||
END
|
||||
@ -717,8 +717,8 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x1
|
||||
BEGIN
|
||||
CONTROL "List1",IDC_INPUTLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,22,290,146
|
||||
COMBOBOX IDC_INPUTTYPE,5,5,98,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_INPUTDEVICE,109,5,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_INPUTTYPE,5,5,77,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_INPUTDEVICE,87,5,190,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "",IDC_INPUTDEVICEDISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,282,8,9,8
|
||||
COMBOBOX IDC_INPUTAMIGACNT,5,174,24,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_INPUTAMIGA,33,174,202,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
@ -18,8 +18,8 @@
|
||||
#define WINUAEPUBLICBETA 1
|
||||
#define LANG_DLL 1
|
||||
|
||||
#define WINUAEBETA L"7"
|
||||
#define WINUAEDATE MAKEBD(2010, 6, 6)
|
||||
#define WINUAEBETA L"8"
|
||||
#define WINUAEDATE MAKEBD(2010, 6, 9)
|
||||
#define WINUAEEXTRA L""
|
||||
#define WINUAEREV L""
|
||||
|
||||
|
||||
@ -95,7 +95,7 @@
|
||||
#define USS_FORMAT_STRING_SAVE L"(*.uss)\0*.uss\0"
|
||||
#define HDF_FORMAT_STRING L"(*.hdf;*.vhd;*.rdf;*.hdz;*.rdz)\0*.hdf;*.vhd;*.rdf;*.hdz;*.rdz\0"
|
||||
#define INP_FORMAT_STRING L"(*.inp)\0*.inp\0"
|
||||
#define CD_FORMAT_STRING L"(*.cue;*.iso)\0*.cue;*.iso\0"
|
||||
#define CD_FORMAT_STRING L"(*.cue;*.iso)\0*.cue;*.iso;" ARCHIVE_STRING L"\0"
|
||||
#define CONFIG_HOST L"Host"
|
||||
#define CONFIG_HARDWARE L"Hardware"
|
||||
|
||||
@ -3122,7 +3122,7 @@ static void set_lventry_input (HWND list, int index)
|
||||
TCHAR custom[MAX_DPATH];
|
||||
TCHAR af[32], toggle[32];
|
||||
|
||||
inputdevice_get_mapped_name (input_selected_device, index, &flags, &port, name, custom, input_selected_sub_num);
|
||||
inputdevice_get_mapping (input_selected_device, index, &flags, &port, name, custom, input_selected_sub_num);
|
||||
if (flags & IDEV_MAPPED_AUTOFIRE_SET)
|
||||
WIN32GUI_LoadUIString (IDS_YES, af, sizeof af / sizeof (TCHAR));
|
||||
else if (flags & IDEV_MAPPED_AUTOFIRE_POSSIBLE)
|
||||
@ -3145,7 +3145,7 @@ static void set_lventry_input (HWND list, int index)
|
||||
ListView_SetItemText (list, index, 3, toggle);
|
||||
sub = 0;
|
||||
for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) {
|
||||
if (inputdevice_get_mapped_name (input_selected_device, index, &flags, NULL, name, custom, i) || custom[0])
|
||||
if (inputdevice_get_mapping (input_selected_device, index, &flags, NULL, name, custom, i) || custom[0])
|
||||
sub++;
|
||||
}
|
||||
_stprintf (name, L"%d", sub);
|
||||
@ -3220,7 +3220,7 @@ static int inputmap_handle (HWND list, int currentdevnum, int currentwidgetnum,
|
||||
for (int j = 0; j < inputdevice_get_widget_num (devnum); j++) {
|
||||
for (int sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) {
|
||||
int port;
|
||||
if (inputdevice_get_mapped_name (devnum, j, &flags, &port, NULL, NULL, sub) == evtnum) {
|
||||
if (inputdevice_get_mapping (devnum, j, &flags, &port, NULL, NULL, sub) == evtnum) {
|
||||
if (!port)
|
||||
continue;
|
||||
inputdevice_get_widget_type (devnum, j, name);
|
||||
@ -10874,7 +10874,7 @@ static void init_inputdlg_2 (HWND hDlg)
|
||||
SendDlgItemMessage (hDlg, IDC_INPUTAMIGA, CB_ADDSTRING, 0, (LPARAM)tmp1);
|
||||
index = 0; af = 0; port = 0;
|
||||
if (input_selected_widget >= 0) {
|
||||
inputdevice_get_mapped_name (input_selected_device, input_selected_widget, NULL, &port, name1, custom1, input_selected_sub_num);
|
||||
inputdevice_get_mapping (input_selected_device, input_selected_widget, NULL, &port, name1, custom1, input_selected_sub_num);
|
||||
cnt = 2;
|
||||
while(inputdevice_iterate (input_selected_device, input_selected_widget, name2, &aftmp)) {
|
||||
xfree (eventnames[cnt]);
|
||||
@ -10979,7 +10979,7 @@ static void doinputcustom (HWND hDlg, int newcustom)
|
||||
TCHAR custom1[MAX_DPATH];
|
||||
int flags;
|
||||
custom1[0] = 0;
|
||||
inputdevice_get_mapped_name (input_selected_device, input_selected_widget,
|
||||
inputdevice_get_mapping (input_selected_device, input_selected_widget,
|
||||
&flags, NULL, NULL, custom1, input_selected_sub_num);
|
||||
if (_tcslen (custom1) > 0 || newcustom) {
|
||||
if (askinputcustom (hDlg, custom1, sizeof custom1 / sizeof (TCHAR), IDS_SB_CUSTOMEVENT)) {
|
||||
@ -11061,7 +11061,7 @@ static void values_from_inputdlg (HWND hDlg, int inputchange)
|
||||
int flags;
|
||||
TCHAR custom[MAX_DPATH];
|
||||
custom[0] = 0;
|
||||
inputdevice_get_mapped_name (input_selected_device, input_selected_widget,
|
||||
inputdevice_get_mapping (input_selected_device, input_selected_widget,
|
||||
&flags, NULL, 0, custom, input_selected_sub_num);
|
||||
if (input_selected_event != 1)
|
||||
custom[0] = 0;
|
||||
@ -11471,7 +11471,7 @@ static void input_toggleautofire (void)
|
||||
TCHAR custom[MAX_DPATH];
|
||||
if (input_selected_device < 0 || input_selected_widget < 0)
|
||||
return;
|
||||
evt = inputdevice_get_mapped_name (input_selected_device, input_selected_widget,
|
||||
evt = inputdevice_get_mapping (input_selected_device, input_selected_widget,
|
||||
&flags, NULL, name, custom, input_selected_sub_num);
|
||||
if (evt <= 0)
|
||||
return;
|
||||
@ -11485,7 +11485,7 @@ static void input_toggletoggle (void)
|
||||
TCHAR custom[MAX_DPATH];
|
||||
if (input_selected_device < 0 || input_selected_widget < 0)
|
||||
return;
|
||||
evt = inputdevice_get_mapped_name (input_selected_device, input_selected_widget,
|
||||
evt = inputdevice_get_mapping (input_selected_device, input_selected_widget,
|
||||
&flags, NULL, name, custom, input_selected_sub_num);
|
||||
if (evt <= 0)
|
||||
return;
|
||||
|
||||
@ -163,7 +163,7 @@
|
||||
<OutputFile>d:\amiga\winuae.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<IgnoreSpecificDefaultLibraries>LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_42.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>.\Debug/winuae.pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@ -290,7 +290,7 @@
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
|
||||
<AdditionalManifestDependencies>%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
|
||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_42.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>.\Release/winuae.pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@ -435,7 +435,7 @@
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
|
||||
<AdditionalManifestDependencies>%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
|
||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_42.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>.\FullRelease/winuae.pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
||||
@ -1,4 +1,38 @@
|
||||
|
||||
Beta 8:
|
||||
|
||||
- Z3Chip is not a Z3 board anymore, now also compatible with KS 1.x (32-bit addressing
|
||||
capable CPU required)
|
||||
- rawkeyboard RIDEV_NOHOTKEYS flag was missing (Disables Windows keys etc..)
|
||||
- GamePorts remap/test GUI updated
|
||||
- GamePorts remap when in Configuration#x mode didn't update GamePorts input mappings
|
||||
- data in GamePorts overwritten Configuration#x slot 1 is stored in hidden slot 5, also
|
||||
saved to configuration when needed (not backwards compatible with old versions). Now
|
||||
you can load old configurations in Configuration#x mode, set GamePorts to <none> without
|
||||
losing original input configuration data in slot 1.
|
||||
- added key label to keyboard configuration data, not used for anything yet (compatible with
|
||||
old versions, old versions simply ignore it)
|
||||
- added supported archive extensions to CD image dialog's file type list
|
||||
- DX SDK updated (June 2010), d3dx9_xx.dll version bump -> DX runtime update required...
|
||||
- added stupid looking vid and pid values to rawinput keyboards and mice, makes it possible
|
||||
to distinguish multiple mouse or keyboard.. (instead of "HID Keyboard Device [n]" x N that
|
||||
change position if you remove or add any keyboard-like device, including bar code readers)
|
||||
|
||||
Important: if you have configurations with Configuration#1-3 set, please do following tests:
|
||||
(There is no way I can test all possible combinations)
|
||||
|
||||
Test 1: Load configuration file, set both mouse and joystick port to <none>. Check that all
|
||||
mappings are still 100% correct. NOTE: remember that Keyboard* and Mouse* are gone if you have
|
||||
rawinput compatible mouse and keyboard (most likely). Keyboard or mouse mappings disappearing
|
||||
due to this rawinput change is not a bug.
|
||||
|
||||
Test 2: Play with Game Ports mouse and joystick settings, add random custom mappings, whatever
|
||||
(You can keep checking Input panel if you want) and then set them back to <none>. Mappings
|
||||
should still be 100% exact same as when configuration was originally loaded.
|
||||
|
||||
Test failed -> email or attach original configuration and include short problem description.
|
||||
(what test phase, what you did, what happened)
|
||||
|
||||
Beta 7:
|
||||
|
||||
- do not center horizontally if there is no bitplanes enabled (result was very badly aligned
|
||||
@ -19,7 +53,6 @@ Beta 7:
|
||||
- joystick button pullups removed, this will break some games' second joystick button read routines
|
||||
but it has to be done because they wouldn't work on real Amigas with standard joystick either and
|
||||
this workaround also breaks some other games that don't expect pullups (Dick Tracy for example)
|
||||
Pullups are automatically enabled if joystick 3rd button is mapped.
|
||||
|
||||
- another big input change, Game Ports settings are now always merged with currently selected
|
||||
input configuration (possibly overwriting event that was manually configured in slot 0)
|
||||
@ -170,7 +203,7 @@ Beta 1:
|
||||
(it was made when there was no "is drive mounted in Windows" test) This parameter has
|
||||
also become THE FIX for every, even totally unrelated possible, HD/CF related problem...
|
||||
- toggle between fullwindow and fullscreen if started in fullwindow mode
|
||||
- fixed data coruption in input parsing if mapped key did not exist (different keyboard)
|
||||
- fixed data corruption in input parsing if mapped key did not exist (different keyboard)
|
||||
- transparent archive support updates and handle leak fix
|
||||
- small filter panel GUI changes
|
||||
- single/double/triple buffering option added to Display panel, also affects D3D now mode now
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user