]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3300b8
authorToni Wilen <twilen@winuae.net>
Sat, 5 Mar 2016 11:13:37 +0000 (13:13 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 5 Mar 2016 11:13:37 +0000 (13:13 +0200)
33 files changed:
autoconf.cpp
blkdev.cpp
bsdsocket.cpp
cdtvcr.cpp
cfgfile.cpp
debug.cpp
expansion.cpp
filesys.cpp
gfxboard.cpp
include/autoconf.h
include/gfxboard.h
include/memory.h
include/options.h
include/traps.h
inputdevice.cpp
main.cpp
memory.cpp
od-win32/blkdev_win32_ioctl.cpp
od-win32/bsdsock.cpp
od-win32/clipboard_win32.cpp
od-win32/mman.cpp
od-win32/picasso96_win.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/rp.cpp
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt
traps.cpp
x86.cpp
zfile.cpp

index 66f174ae4ff0971c4d7db595a1285f1ab985ea32..18b4cbe8021bf41d6147ccbeb6a484511ccc0d7c 100644 (file)
@@ -352,7 +352,11 @@ static uae_u32 REGPARAM2 getchipmemsize (TrapContext *ctx)
 
 static uae_u32 REGPARAM2 uae_puts (TrapContext *ctx)
 {
-       puts ((char*)get_real_address(trap_get_areg(ctx, 0)));
+       uae_char buf[MAX_DPATH];
+       trap_get_string(ctx, buf, trap_get_areg(ctx, 0), sizeof uae_char);
+       TCHAR *s = au(buf);
+       write_log(_T("%s"), s);
+       xfree(s);
        return 0;
 }
 
index 2521b651dc92dcbf685feff0592f0d7aa5e7e7c0..f88af487c276d3d218ff4e29c79ba579fa9999ba 100644 (file)
@@ -493,9 +493,6 @@ void sys_command_close (int unitnum)
                tape_free (st->tape);
                st->tape = NULL;
        }
-#ifdef RETROPLATFORM
-       rp_cd_device_enable (unitnum, false);
-#endif
        sys_command_close_internal (unitnum);
 }
 
@@ -742,7 +739,7 @@ int sys_command_cd_pause (int unitnum, int paused)
        int v;
        if (state[unitnum].device_func->pause == NULL) {
                int as = audiostatus (unitnum);
-               uae_u8 cmd[10] = {0x4b,0,0,0,0,0,0,0,paused?0:1,0};
+               uae_u8 cmd[10] = {0x4b,0,0,0,0,0,0,0,(uae_u8)(paused?0:1),0};
                do_scsi (unitnum, cmd, sizeof cmd);
                v = as == AUDIO_STATUS_PAUSED;
        } else {
@@ -880,7 +877,7 @@ int sys_command_cd_read (int unitnum, uae_u8 *data, int block, int size)
        if (!getsem (unitnum))
                return 0;
        if (state[unitnum].device_func->read == NULL) {
-               uae_u8 cmd1[12] = { 0x28, 0, block >> 24, block >> 16, block >> 8, block >> 0, 0, size >> 8, size >> 0, 0, 0, 0 };
+               uae_u8 cmd1[12] = { 0x28, 0, (uae_u8)(block >> 24), (uae_u8)(block >> 16), (uae_u8)(block >> 8), (uae_u8)(block >> 0), 0, (uae_u8)(size >> 8), (uae_u8)(size >> 0), 0, 0, 0 };
                v = do_scsi (unitnum, cmd1, sizeof cmd1, data, size * 2048);
 #if 0
                if (!v) {
@@ -902,7 +899,7 @@ int sys_command_cd_rawread (int unitnum, uae_u8 *data, int block, int size, int
        if (!getsem (unitnum))
                return 0;
        if (state[unitnum].device_func->rawread == NULL) {
-               uae_u8 cmd[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 };
+               uae_u8 cmd[12] = { 0xbe, 0, (uae_u8)(block >> 24), (uae_u8)(block >> 16), (uae_u8)(block >> 8), (uae_u8)(block >> 0), (uae_u8)(size >> 16), (uae_u8)(size >> 8), (uae_u8)(size >> 0), 0x10, 0, 0 };
                v = do_scsi (unitnum, cmd, sizeof cmd, data, size * sectorsize);
        } else {
                v = state[unitnum].device_func->rawread (unitnum, data, block, size, sectorsize, 0xffffffff);
@@ -918,7 +915,7 @@ int sys_command_cd_rawread (int unitnum, uae_u8 *data, int block, int size, int
        if (!getsem (unitnum))
                return 0;
        if (state[unitnum].device_func->rawread == NULL) {
-               uae_u8 cmd[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 };
+               uae_u8 cmd[12] = { 0xbe, 0, (uae_u8)(block >> 24), (uae_u8)(block >> 16), (uae_u8)(block >> 8), (uae_u8)(block >> 0), (uae_u8)(size >> 16), (uae_u8)(size >> 8), (uae_u8)(size >> 0), 0x10, 0, 0 };
                v = do_scsi (unitnum, cmd, sizeof cmd, data, size * sectorsize);
        } else {
                v = state[unitnum].device_func->rawread (unitnum, data, block, size, sectorsize, (sectortype << 16) | (scsicmd9 << 8) | subs);
@@ -936,7 +933,7 @@ int sys_command_read (int unitnum, uae_u8 *data, int block, int size)
        if (!getsem (unitnum))
                return 0;
        if (state[unitnum].device_func->read == NULL) {
-               uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, size >> 24, size >> 16, size >> 8, size >> 0, 0, 0 };
+               uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, (uae_u8)(size >> 24), (uae_u8)(size >> 16), (uae_u8)(size >> 8), (uae_u8)(size >> 0), 0, 0 };
                cmd[2] = (uae_u8)(block >> 24);
                cmd[3] = (uae_u8)(block >> 16);
                cmd[4] = (uae_u8)(block >> 8);
index 09bc2ba9d673283158266014ce11cc3597d2ac14..10345a53006c5ba3fa4a39af319cd9831d1ec60f 100644 (file)
@@ -409,11 +409,11 @@ static struct socketbase *alloc_socketbase (TrapContext *ctx)
 
                sb->dtablesize = DEFAULT_DTABLE_SIZE;
                /* @@@ check malloc() result */
-               sb->dtable = (SOCKET*)malloc (sb->dtablesize * sizeof (*sb->dtable));
-               sb->ftable = (int*)malloc (sb->dtablesize * sizeof (*sb->ftable));
+               sb->dtable = xmalloc(SOCKET, sb->dtablesize);
+               sb->ftable = xcalloc(int, sb->dtablesize);
 
                for (i = sb->dtablesize; i--;)
-                       sb->dtable[i] = -1;
+                       sb->dtable[i] = INVALID_SOCKET;
 
                sb->eintrsigs = 0x1000; /* SIGBREAKF_CTRL_C */
 
@@ -732,9 +732,9 @@ static uae_u32 bsdsocklib_SetDTableSize (SB, int newSize)
        if (newdtable == NULL || newftable == NULL || newmtable == NULL) {
                sb->resultval = -1;
                bsdsocklib_seterrno(ctx, sb, ENOMEM);
-               free (newdtable);
-               free (newftable);
-               free (newmtable);
+               xfree(newdtable);
+               xfree(newftable);
+               xfree(newmtable);
                return -1;
        }
 
@@ -745,9 +745,9 @@ static uae_u32 bsdsocklib_SetDTableSize (SB, int newSize)
                newdtable[i] = -1;
 
        sb->dtablesize = newSize;
-       free(sb->dtable);
-       free(sb->ftable);
-       free(sb->mtable);
+       xfree(sb->dtable);
+       xfree(sb->ftable);
+       xfree(sb->mtable);
        sb->dtable = (SOCKET*)newdtable;
        sb->ftable = newftable;
        sb->mtable = newmtable;
index 9cb6f7bc68a67918a3cce982ab816be48d0772af..a5d76a017d0ecc5b3f61d6e23907c3142744bbba 100644 (file)
 #include "threaddep/thread.h"
 #include "uae.h"
 #include "custom.h"
+#include "rommgr.h"
+
+#if CDTVCR_4510_EMULATION
+static void init_65c02(void);
+static void cpu_4510(void);
+#endif
 
 #define CDTVCR_MASK 0xffff
 
@@ -896,6 +902,12 @@ void CDTVCR_hsync_handler (void)
        if (!currprefs.cs_cdtvcr)
                return;
 
+#if CDTVCR_4510_EMULATION
+       for (int i = 0; i < 10; i++) {
+               cpu_4510();
+       }
+#endif
+
        if (cdtvcr_wait_sectors > 0 && currprefs.cd_speed == 0) {
                cdtvcr_wait_sectors = 0;
                cdtvcr_cmd_done();
@@ -995,6 +1007,10 @@ void cdtvcr_reset(void)
        cdtvcr_battram_reset();
        cdtvcr_clock[0] = 0xe3;
        cdtvcr_clock[1] = 0x1b;
+
+#if CDTVCR_4510_EMULATION
+       init_65c02();
+#endif
 }
 
 void cdtvcr_free(void)
@@ -1066,6 +1082,8 @@ static void monitor_startup(int mem)
 {
 }
 
+#define CYCLE_EXACT_ALARM
+
 #define INTERRUPT_DELAY 2
 
 #define INTRRUPT_MAX_DMA_PER_OPCODE (7+10000)
@@ -1228,7 +1246,7 @@ typedef struct R65C02_regs_s
        BYTE z;
 } R65C02_regs_t;
 
-#define DRIVE_RAM_SIZE 32768
+#define DRIVE_RAM_SIZE 65536
 
 typedef BYTE drive_read_func_t(struct drive_context_s *, WORD);
 typedef void drive_store_func_t(struct drive_context_s *, WORD,
@@ -1322,7 +1340,7 @@ typedef struct drivecpu_context_s
 #define STORE_ZERO(a, b)  (drv->cpud->store_func[0](drv, (WORD)(a), \
                           (BYTE)(b)))
 
-#define JUMP(addr)                                       \
+#define JUMP(addr) reg_pc = (unsigned int)(addr); 
 
 #define P_SIGN          0x80
 #define P_OVERFLOW      0x40
@@ -1461,11 +1479,18 @@ static CLOCK alarm_context_next_pending_clk(alarm_context_t *context)
        return context->next_pending_alarm_clk;
 }
 
+static struct drive_context_s m_4510_context;
+static struct drivecpu_context_s m_4510_cpu_context;
+static struct drivecpud_context_s m_4510_cpud_context;
+static CLOCK m_4510_clk;
+static struct alarm_context_s m_4510_alarm_context;
+static struct interrupt_cpu_status_s m_4510_interrupt;
+
 static void cpu_4510(void)
 {
        int cpu_type = CPU_R65C02;
-       drivecpu_context_t *cpu = NULL;
-       drive_context_t *drv = NULL;
+       drivecpu_context_t *cpu = &m_4510_cpu_context;
+       drive_context_t *drv = &m_4510_context;
 
 #define reg_a   (cpu->cpu_regs.a)
 #define reg_x   (cpu->cpu_regs.x)
@@ -1479,14 +1504,48 @@ static void cpu_4510(void)
 #include "65c02core.cpp"
 }
 
-static void init_65c02(struct drive_context_s *drv)
+BYTE read_4510(struct drive_context_s *c, WORD offset)
 {
-       drivecpu_context_t *cpu = drv->cpu;
+       if (offset >= 32768)
+               return c->cpud->drive_ram[offset];
+       return 0;
+}
+void write_4510(struct drive_context_s *c, WORD offset, BYTE v)
+{
+       if (offset >= 32768)
+               return;
+       c->cpud->drive_ram[offset] = v;
+}
+
+static void init_65c02(void)
+{
+       drive_context_s *d = &m_4510_context;
+       drivecpu_context_s *cpu = &m_4510_cpu_context;
+       drivecpud_context_s *cpud = &m_4510_cpud_context;
+
+       d->cpu = cpu;
+       d->cpud = cpud;
+       d->clk_ptr = &m_4510_clk;
 
        cpu->rmw_flag = 0;
        cpu->d_bank_limit = 0;
        cpu->d_bank_start = 0;
        cpu->pageone = NULL;
+       cpu->alarm_context = &m_4510_alarm_context;
+       cpu->int_status = &m_4510_interrupt;
+
+       cpu->int_status->global_pending_int = IK_RESET;
+
+       for(int i = 0; i < 256; i++) {
+               cpud->read_func[i] = read_4510;
+               cpud->store_func[i] = write_4510;
+       }
+
+       struct zfile *zf = read_rom_name(_T("d:\\amiga\\roms\\cdtv-cr-4510.bin"));
+       if (zf) {
+               zfile_fread(cpud->drive_ram + 32768, 1, 32768, zf);
+               zfile_fclose(zf);
+       }
 }
 
 #endif
index 60a68a1bcec19259a7be6fa89c13700f02e8f507..596ef519b87d101e3550ab2091703884f7715c3b 100644 (file)
@@ -1729,7 +1729,10 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
                if (!cr->inuse)
                        continue;
                cr->index = i;
-               _stprintf (tmp, _T("%f"), cr->rate);
+               if (cr->rate == 0)
+                       _tcscpy(tmp, _T("0"));
+               else
+                       _stprintf (tmp, _T("%f"), cr->rate);
                TCHAR *s = tmp + _tcslen (tmp);
                if (cr->label[0] > 0 && i < MAX_CHIPSET_REFRESH)
                        s += _stprintf (s, _T(",t=%s"), cr->label);
@@ -1857,8 +1860,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
        }
        cfgfile_dwrite(f, _T("cpuboardmem1_size"), _T("%d"), p->cpuboardmem1_size / 0x100000);
        cfgfile_dwrite(f, _T("cpuboardmem2_size"), _T("%d"), p->cpuboardmem2_size / 0x100000);
-       cfgfile_write(f, _T("gfxcard_size"), _T("%d"), p->rtgmem_size / 0x100000);
-       cfgfile_write_str(f, _T("gfxcard_type"), gfxboard_get_configname(p->rtgmem_type));
+       cfgfile_write(f, _T("gfxcard_size"), _T("%d"), p->rtgboards[0].rtgmem_size / 0x100000);
+       cfgfile_write_str(f, _T("gfxcard_type"), gfxboard_get_configname(p->rtgboards[0].rtgmem_type));
        cfgfile_write_bool(f, _T("gfxcard_hardware_vblank"), p->rtg_hardwareinterrupt);
        cfgfile_write_bool (f, _T("gfxcard_hardware_sprite"), p->rtg_hardwaresprite);
        cfgfile_write (f, _T("chipmem_size"), _T("%d"), p->chipmem_size == 0x20000 ? -1 : (p->chipmem_size == 0x40000 ? 0 : p->chipmem_size / 0x80000));
@@ -4453,7 +4456,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
                || cfgfile_intval (option, value, _T("megachipmem_size"), &p->z3chipmem_size, 0x100000)
                || cfgfile_intval (option, value, _T("z3mem_start"), &p->z3autoconfig_start, 1)
                || cfgfile_intval (option, value, _T("bogomem_size"), &p->bogomem_size, 0x40000)
-               || cfgfile_intval (option, value, _T("gfxcard_size"), &p->rtgmem_size, 0x100000)
+               || cfgfile_intval (option, value, _T("gfxcard_size"), &p->rtgboards[0].rtgmem_size, 0x100000)
                || cfgfile_intval(option, value, _T("rtg_modes"), &p->picasso96_modeflags, 1)
                || cfgfile_intval (option, value, _T("floppy_speed"), &p->floppy_speed, 1)
                || cfgfile_intval (option, value, _T("cd_speed"), &p->cd_speed, 1)
@@ -4511,14 +4514,15 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
                return 1;
 
        if (cfgfile_string(option, value, _T("gfxcard_type"), tmpbuf, sizeof tmpbuf / sizeof(TCHAR))) {
-               p->rtgmem_type = 0;
+               p->rtgboards[0].rtgmem_type = 0;
                i = 0;
                for (;;) {
                        const TCHAR *t = gfxboard_get_configname(i);
-                       if (!t)
+                       if (!t) {
                                break;
+                       }
                        if (!_tcsicmp(t, tmpbuf)) {
-                               p->rtgmem_type = i;
+                               p->rtgboards[0].rtgmem_type = i;
                                break;
                        }
                        i++;
@@ -5588,7 +5592,7 @@ int parse_cmdline_option (struct uae_prefs *p, TCHAR c, const TCHAR *arg)
                break;
 
        case 'U':
-               p->rtgmem_size = _tstoi (arg) * 0x100000;
+               p->rtgboards[0].rtgmem_size = _tstoi (arg) * 0x100000;
                break;
 
        case 'F':
@@ -6335,8 +6339,8 @@ void default_prefs (struct uae_prefs *p, bool reset, int type)
        p->z3autoconfig_start = 0x10000000;
        p->chipmem_size = 0x00080000;
        p->bogomem_size = 0x00080000;
-       p->rtgmem_size = 0x00000000;
-       p->rtgmem_type = GFXBOARD_UAE_Z3;
+       p->rtgboards[0].rtgmem_size = 0x00000000;
+       p->rtgboards[0].rtgmem_type = GFXBOARD_UAE_Z3;
        p->custom_memory_addrs[0] = 0;
        p->custom_memory_sizes[0] = 0;
        p->custom_memory_addrs[1] = 0;
@@ -6499,8 +6503,8 @@ static void buildin_default_prefs (struct uae_prefs *p)
        p->z3fastmem_size = 0x00000000;
        p->z3fastmem2_size = 0x00000000;
        p->z3chipmem_size = 0x00000000;
-       p->rtgmem_size = 0x00000000;
-       p->rtgmem_type = GFXBOARD_UAE_Z3;
+       p->rtgboards[0].rtgmem_size = 0x00000000;
+       p->rtgboards[0].rtgmem_type = GFXBOARD_UAE_Z3;
 
        p->cs_rtc = 0;
        p->cs_a1000ram = false;
@@ -7031,7 +7035,7 @@ static int bip_super (struct uae_prefs *p, int config, int compa, int romcheck)
        p->bogomem_size = 0;
        p->chipmem_size = 0x400000;
        p->z3fastmem_size = 8 * 1024 * 1024;
-       p->rtgmem_size = 16 * 1024 * 1024;
+       p->rtgboards[0].rtgmem_size = 16 * 1024 * 1024;
        p->cpu_model = 68040;
        p->fpu_model = 68040;
        p->chipset_mask = CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE;
index 25d798af3444edbfcdefff57b29f8045f4d0f7bf..b56d15165e51ec2ffd04c95d09a13e132ff2c031 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -2181,8 +2181,8 @@ static void illg_init (void)
                }
                addr = end - 1;
        }
-       if (currprefs.rtgmem_size)
-               memset (illghdebug + (gfxmem_bank.start >> 16), 3, currprefs.rtgmem_size >> 16);
+       if (currprefs.rtgboards[0].rtgmem_size)
+               memset (illghdebug + (gfxmem_bank.start >> 16), 3, currprefs.rtgboards[0].rtgmem_size >> 16);
 
        i = 0;
        while (custd[i].name) {
index 54e2224fd7f8aaa048cbe32183727a369196b559..dd0a8efd7c4ce0ae54aa19f8788fca456b442249 100644 (file)
@@ -1101,8 +1101,6 @@ static uae_u8 *REGPARAM2 filesys_xlate(uaecptr addr)
 
 #endif /* FILESYS */
 
-// experimental hardware uae board
-
 DECLARE_MEMORY_FUNCTIONS(uaeboard);
 addrbank uaeboard_bank = {
        uaeboard_lget, uaeboard_wget, uaeboard_bget,
@@ -1606,7 +1604,7 @@ static addrbank* expamem_init_filesys (int devnum)
        expamem_write (0x24, 0x01); /* ser.no. Byte 3 */
 
        /* er_InitDiagVec */
-       expamem_write (0x28, 0x20); /* Rom-Offset hi */
+       expamem_write (0x28, 0x20); /* ROM-Offset hi */
        expamem_write (0x2c, 0x00); /* ROM-Offset lo */
 
        expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/
@@ -1824,8 +1822,9 @@ static void allocate_expamem (void)
        currprefs.fastmem2_size = changed_prefs.fastmem2_size;
        currprefs.z3fastmem_size = changed_prefs.z3fastmem_size;
        currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size;
-       currprefs.rtgmem_size = changed_prefs.rtgmem_size;
-       currprefs.rtgmem_type = changed_prefs.rtgmem_type;
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               memcpy(&currprefs.rtgboards[i], &changed_prefs.rtgboards[i], sizeof(struct rtgboardconfig));
+       }
        currprefs.z3chipmem_size = changed_prefs.z3chipmem_size;
 
        z3chipmem_bank.start = Z3BASE_UAE;
@@ -1920,10 +1919,11 @@ static void allocate_expamem (void)
        }
 
 #ifdef PICASSO96
-       if (gfxmem_bank.allocated != currprefs.rtgmem_size) {
+       struct rtgboardconfig *rbc = &currprefs.rtgboards[0];
+       if (gfxmem_bank.allocated != rbc->rtgmem_size) {
                mapped_free (&gfxmem_bank);
-               if (currprefs.rtgmem_type < GFXBOARD_HARDWARE)
-                       mapped_malloc_dynamic (&currprefs.rtgmem_size, &changed_prefs.rtgmem_size, &gfxmem_bank, 1, currprefs.rtgmem_type ? _T("z3_gfx") : _T("z2_gfx"));
+               if (rbc->rtgmem_type < GFXBOARD_HARDWARE)
+                       mapped_malloc_dynamic (&rbc->rtgmem_size, &changed_prefs.rtgboards[0].rtgmem_size, &gfxmem_bank, 1, rbc->rtgmem_type ? _T("z3_gfx") : _T("z2_gfx"));
                memory_hardreset (1);
        }
 #endif
@@ -1962,7 +1962,7 @@ static void allocate_expamem (void)
 #ifdef PICASSO96
                if (gfxmem_bank.allocated > 0 && gfxmem_bank.start > 0) {
                        restore_ram (p96_filepos, gfxmem_bank.baseaddr);
-                       map_banks(&gfxmem_bank, gfxmem_bank.start >> 16, currprefs.rtgmem_size >> 16,
+                       map_banks(&gfxmem_bank, gfxmem_bank.start >> 16, currprefs.rtgboards[0].rtgmem_size >> 16,
                                gfxmem_bank.allocated);
                }
 #endif
@@ -2009,7 +2009,7 @@ static uaecptr check_boot_rom (int *boot_rom_type)
                return b;
        if (currprefs.input_tablet > 0)
                return b;
-       if (currprefs.rtgmem_size && currprefs.rtgmem_type < GFXBOARD_HARDWARE)
+       if (currprefs.rtgboards[0].rtgmem_size && currprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE)
                return b;
        if (currprefs.win32_automount_removable)
                return b;
@@ -2256,31 +2256,37 @@ void expamem_reset (void)
        }
 #endif
 #ifdef PICASSO96
-       if (currprefs.rtgmem_type == GFXBOARD_UAE_Z2 && gfxmem_bank.baseaddr != NULL) {
-               cards[cardno].flags = 4;
-               cards[cardno].name = _T("Z2RTG");
-               cards[cardno].initnum = expamem_init_gfxcard_z2;
-               cards[cardno++].map = expamem_map_gfxcard_z2;
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               struct rtgboardconfig *rbc = &currprefs.rtgboards[i];
+               if (rbc->rtgmem_size && rbc->rtgmem_type == GFXBOARD_UAE_Z2 && gfxmem_bank.baseaddr != NULL) {
+                       cards[cardno].flags = 4;
+                       cards[cardno].name = _T("Z2RTG");
+                       cards[cardno].initnum = expamem_init_gfxcard_z2;
+                       cards[cardno++].map = expamem_map_gfxcard_z2;
+               }
        }
 #endif
 #ifdef GFXBOARD
-       if (currprefs.rtgmem_type >= GFXBOARD_HARDWARE && gfxboard_get_configtype(currprefs.rtgmem_type) <= 2) {
-               cards[cardno].flags = 4;
-               if (currprefs.rtgmem_type == GFXBOARD_A2410) {
-                       cards[cardno].name = _T("Gfxboard A2410");
-                       cards[cardno++].initnum = tms_init;
-               } else {
-                       cards[cardno].name = _T("Gfxboard VRAM Zorro II");
-                       cards[cardno++].initnum = gfxboard_init_memory;
-                       if (gfxboard_num_boards (currprefs.rtgmem_type) == 3) {
-                               cards[cardno].flags = 0;
-                               cards[cardno].name = _T("Gfxboard VRAM Zorro II Extra");
-                               cards[cardno++].initnum = gfxboard_init_memory_p4_z2;
-                       }
-                       if (gfxboard_is_registers (currprefs.rtgmem_type)) {
-                               cards[cardno].flags = 0;
-                               cards[cardno].name = _T ("Gfxboard Registers");
-                               cards[cardno++].initnum = gfxboard_init_registers;
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               struct rtgboardconfig *rbc = &currprefs.rtgboards[i];
+               if (rbc->rtgmem_size && rbc->rtgmem_type >= GFXBOARD_HARDWARE && gfxboard_get_configtype(rbc) <= 2) {
+                       cards[cardno].flags = 4;
+                       if (rbc->rtgmem_type == GFXBOARD_A2410) {
+                               cards[cardno].name = _T("Gfxboard A2410");
+                               cards[cardno++].initnum = tms_init;
+                       } else {
+                               cards[cardno].name = _T("Gfxboard VRAM Zorro II");
+                               cards[cardno++].initnum = gfxboard_init_memory;
+                               if (gfxboard_num_boards (rbc) == 3) {
+                                       cards[cardno].flags = 0;
+                                       cards[cardno].name = _T("Gfxboard VRAM Zorro II Extra");
+                                       cards[cardno++].initnum = gfxboard_init_memory_p4_z2;
+                               }
+                               if (gfxboard_is_registers (rbc)) {
+                                       cards[cardno].flags = 0;
+                                       cards[cardno].name = _T ("Gfxboard Registers");
+                                       cards[cardno++].initnum = gfxboard_init_registers;
+                               }
                        }
                }
        }
@@ -2324,7 +2330,7 @@ void expamem_reset (void)
                if (z3chipmem_bank.baseaddr != NULL)
                        map_banks_z3(&z3chipmem_bank, z3chipmem_bank.start >> 16, currprefs.z3chipmem_size >> 16);
 #ifdef PICASSO96
-               if (currprefs.rtgmem_type == GFXBOARD_UAE_Z3 && gfxmem_bank.baseaddr != NULL) {
+               if (currprefs.rtgboards[0].rtgmem_size && currprefs.rtgboards[0].rtgmem_type == GFXBOARD_UAE_Z3 && gfxmem_bank.baseaddr != NULL) {
                        cards[cardno].flags = 4 | 1;
                        cards[cardno].name = _T("Z3RTG");
                        cards[cardno].initnum = expamem_init_gfxcard_z3;
@@ -2332,7 +2338,7 @@ void expamem_reset (void)
                }
 #endif
 #ifdef GFXBOARD
-               if (currprefs.rtgmem_type >= GFXBOARD_HARDWARE && gfxboard_get_configtype(currprefs.rtgmem_type) == 3) {
+               if (currprefs.rtgboards[0].rtgmem_size && currprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE && gfxboard_get_configtype(&currprefs.rtgboards[0]) == 3) {
                        cards[cardno].flags = 4 | 1;
                        cards[cardno].name = _T ("Gfxboard VRAM Zorro III");
                        cards[cardno++].initnum = gfxboard_init_memory;
@@ -2429,8 +2435,10 @@ void expansion_cleanup (void)
        mapped_free (&z3chipmem_bank);
 
 #ifdef PICASSO96
-       if (currprefs.rtgmem_type < GFXBOARD_HARDWARE)
-               mapped_free (&gfxmem_bank);
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               if (currprefs.rtgboards[i].rtgmem_type < GFXBOARD_HARDWARE)
+                       mapped_free (&gfxmem_bank);
+       }
 #endif
 
 #ifdef FILESYS
@@ -2527,7 +2535,7 @@ void restore_zram (int len, size_t filepos, int num)
 void restore_pram (int len, size_t filepos)
 {
        p96_filepos = filepos;
-       changed_prefs.rtgmem_size = len;
+       changed_prefs.rtgboards[0].rtgmem_size = len;
 }
 
 uae_u8 *save_expansion (int *len, uae_u8 *dstptr)
index 19e0a263e86737e717a527ab439922ac63a1ce46..f3387d90c1a84a11bb187e7e278c16a6d7f91cd2 100644 (file)
@@ -1369,33 +1369,6 @@ typedef struct _unit {
 
 static uae_u32 a_uniq, key_uniq;
 
-
-static void readdpacket(TrapContext *ctx, dpacket *packet, uaecptr pck)
-{
-       // Read enough to get also all 64-bit fields
-       packet->packet_addr = pck;
-       trap_get_bytes(ctx, packet->packet_data, pck, dp_Max);
-}
-static void writedpacket(TrapContext *ctx, dpacket *packet)
-{
-       // 32 = saves both 32-bit and 64-bit RESx fields
-       trap_put_bytes(ctx, packet->packet_data + 12, packet->packet_addr + 12, 32 - 12);
-}
-
-static void set_quadp(TrapContext *ctx, uaecptr p, uae_s64 v)
-{
-       if (!trap_valid_address(ctx, p, 8))
-               return;
-       trap_put_long(ctx, p, v >> 32);
-       trap_put_long(ctx, p + 4, (uae_u64)v);
-}
-static uae_u64 get_quadp(TrapContext *ctx, uaecptr p)
-{
-       if (!trap_valid_address(ctx, p, 8))
-               return 0;
-       return ((uae_u64)trap_get_long(ctx, p) << 32) | trap_get_long(ctx, p + 4);
-}
-
 #define PUT_PCK_RES1(p,v) do { put_long_host((p)->packet_data + dp_Res1, (v)); } while (0)
 #define PUT_PCK_RES2(p,v) do { put_long_host((p)->packet_data + dp_Res2, (v)); } while (0)
 #define GET_PCK_TYPE(p) ((uae_s32)(get_long_host((p)->packet_data + dp_Type)))
@@ -1420,6 +1393,37 @@ static uae_u64 get_quadp(TrapContext *ctx, uaecptr p)
 #define GET_PCK64_ARG4(p) ((uae_s32)(get_long_host((p)->packet_data + dp64_Arg4)))
 #define GET_PCK64_ARG5(p) ( (((uae_s64)(get_long_host((p)->packet_data + dp64_Arg5))) << 32) | (((uae_s64)(get_long_host((p)->packet_data + dp64_Arg5 + 4))) << 0) )
 
+static void readdpacket(TrapContext *ctx, dpacket *packet, uaecptr pck)
+{
+       // Read enough to get also all 64-bit fields
+       packet->packet_addr = pck;
+       trap_get_bytes(ctx, packet->packet_data, pck, dp_Max);
+}
+static void writedpacket(TrapContext *ctx, dpacket *packet)
+{
+       int type = GET_PCK_TYPE(packet);
+       if (type >= 8000 && type < 9000 && GET_PCK64_RES0(packet) == DP64_INIT) {
+               // 64-bit RESx fields
+               trap_put_bytes(ctx, packet->packet_data + 12, packet->packet_addr + 12, 32 - 12);
+       } else {
+               // dp_Res1 and dp_Res2
+               trap_put_bytes(ctx, packet->packet_data + 12, packet->packet_addr + 12, 20 - 12);
+       }
+}
+
+static void set_quadp(TrapContext *ctx, uaecptr p, uae_s64 v)
+{
+       if (!trap_valid_address(ctx, p, 8))
+               return;
+       trap_put_quad(ctx, p, v);
+}
+static uae_u64 get_quadp(TrapContext *ctx, uaecptr p)
+{
+       if (!trap_valid_address(ctx, p, 8))
+               return 0;
+       return trap_get_quad(ctx, p);
+}
+
 static int flush_cache (Unit *unit, int num);
 
 static TCHAR *char1(TrapContext *ctx, uaecptr addr)
@@ -4090,7 +4094,14 @@ static void get_fileinfo(TrapContext *ctx, Unit *unit, dpacket *packet, uaecptr
                        put_byte_host(buf + i, 0), i++;
                xfree (x2);
        }
-       trap_put_bytes(ctx, buf, info, sizeof buf);
+       // Must not write Fib_reserved at the end.
+       if (kickstart_version >= 36) {
+               // FIB + fib_OwnerUID and fib_OwnerGID
+               trap_put_bytes(ctx, buf, info, (sizeof buf) - 32);
+       } else {
+               // FIB only
+               trap_put_bytes(ctx, buf, info, (sizeof buf) - 36);
+       }
        PUT_PCK_RES1 (packet, DOS_TRUE);
 }
 
@@ -8572,7 +8583,7 @@ static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *ctx)
                                hicyl = ((currprefs.filesys_limit * 1024) / 512) / (heads * 127);
                        } else {
                                struct fs_usage fsu;
-                               if (!get_fs_usage(uip->rootdir, 0, &fsu)) {
+                               if (!get_fs_usage(uip[unit_no].rootdir, 0, &fsu)) {
                                        for (;;) {
                                                hicyl = (fsu.total / 512) / (heads * 127);
                                                if (hicyl < 65536 || heads == 64)
index 003bfaf5e71dbde7ab4fd221bd8dbca2dcefcd1e..0a5aab50f6a964900d92d778c2c3ce5ed02c4b6c 100644 (file)
@@ -99,7 +99,7 @@ struct gfxboard
        uae_u32 romtype;
 };
 
-#define ISP4() (currprefs.rtgmem_type == GFXBOARD_PICASSO4_Z2 || currprefs.rtgmem_type == GFXBOARD_PICASSO4_Z3)
+#define ISP4() (gb->rbc->rtgmem_type == GFXBOARD_PICASSO4_Z2 || gb->rbc->rtgmem_type == GFXBOARD_PICASSO4_Z3)
 
 // Picasso II: 8* 4x256 (1M) or 16* 4x256 (2M)
 // Piccolo: 8* 4x256 + 2* 16x256 (2M)
@@ -177,6 +177,8 @@ static const struct gfxboard boards[] =
 
 struct rtggfxboard
 {
+       int rtg_index;
+       struct rtgboardconfig *rbc;
        TCHAR memorybankname[40];
        TCHAR wbsmemorybankname[40];
        TCHAR lbsmemorybankname[40];
@@ -292,8 +294,11 @@ static addrbank gfxboard_bank_special = {
 
 static void init_board (struct rtggfxboard *gb)
 {
+       struct rtgboardconfig *rbc = &currprefs.rtgboards[gb->rtg_index];
+       gb->rbc = rbc;
        int vramsize = gb->board->vrammax;
 
+
        gb->vga_width = 0;
        mapped_free(&gfxmem_bank);
        gb->vram_start_offset = 0;
@@ -316,14 +321,14 @@ static void init_board (struct rtggfxboard *gb)
        gb->vramrealstart = gb->vram;
        gb->vram += gb->vram_start_offset;
        gfxmem_bank.baseaddr = gb->vram;
-       gfxmem_bank.allocated = currprefs.rtgmem_size;
-       gb->vga.vga.vram_size_mb = currprefs.rtgmem_size >> 20;
+       gfxmem_bank.allocated = rbc->rtgmem_size;
+       gb->vga.vga.vram_size_mb = rbc->rtgmem_size >> 20;
        gb->vgaioregion.opaque = &gb->vgaioregionptr;
        gb->vgavramregion.opaque = &gb->vgavramregionptr;
        gb->vga.vga.vram.opaque = &gb->vgavramregionptr;
        vga_common_init(&gb->vga.vga);
        cirrus_init_common(&gb->vga, gb->board->chiptype, 0,  NULL, NULL, gb->board->manufacturer == 0);
-       picasso_allocatewritewatch (currprefs.rtgmem_size);
+       picasso_allocatewritewatch (rbc->rtgmem_size);
 }
 
 static void vga_update_size(struct rtggfxboard *gb)
@@ -356,7 +361,7 @@ bool gfxboard_toggle (int mode)
 {
        struct rtggfxboard *gb = &rtggfxboards[0];
 
-       if (currprefs.rtgmem_type == GFXBOARD_A2410) {
+       if (currprefs.rtgboards[gb->rtg_index].rtgmem_type == GFXBOARD_A2410) {
                return tms_toggle(mode);
        }
 
@@ -488,7 +493,7 @@ void gfxboard_refresh (void)
 void gfxboard_hsync_handler(void)
 {
        struct rtggfxboard *gb = &rtggfxboards[0];
-       if (currprefs.rtgmem_type == GFXBOARD_A2410) {
+       if (gb->rbc->rtgmem_type == GFXBOARD_A2410) {
                tms_hsync_handler();
        }
 }
@@ -498,7 +503,7 @@ bool gfxboard_vsync_handler (void)
        struct rtggfxboard *gb = &rtggfxboards[0];
        bool flushed = false;
 
-       if (currprefs.rtgmem_type == GFXBOARD_A2410) {
+       if (gb->rbc->rtgmem_type == GFXBOARD_A2410) {
                return tms_vsync_handler();
        }
 
@@ -1441,7 +1446,7 @@ static int REGPARAM2 gfxboard_check (uaecptr addr, uae_u32 size)
        struct rtggfxboard *gb = getgfxboard(addr);
        addr -= gb->gfxboardmem_start & gfxmem_bank.mask;
        addr &= gfxmem_bank.mask;
-       return (addr + size) <= currprefs.rtgmem_size;
+       return (addr + size) <= gb->rbc->rtgmem_size;
 }
 static uae_u8 *REGPARAM2 gfxboard_xlate (uaecptr addr)
 {
@@ -1736,9 +1741,12 @@ static void REGPARAM2 gfxboard_bput_regs_autoconfig (uaecptr addr, uae_u32 b)
 void gfxboard_free(void)
 {
        struct rtggfxboard *gb = &rtggfxboards[0];
-       if (currprefs.rtgmem_type == GFXBOARD_A2410) {
-               tms_free();
-               return;
+       if (gb->rbc) {
+               if (gb->rbc->rtgmem_type == GFXBOARD_A2410) {
+                       tms_free();
+                       gb->rbc = NULL;
+                       return;
+               }
        }
        if (gb->vram) {
                gfxmem_bank.baseaddr = gb->vramrealstart;
@@ -1763,13 +1771,14 @@ void gfxboard_free(void)
 void gfxboard_reset (void)
 {
        struct rtggfxboard *gb = &rtggfxboards[0];
-       if (currprefs.rtgmem_type == GFXBOARD_A2410) {
+       gb->rbc = &currprefs.rtgboards[gb->rtg_index];
+       if (gb->rbc->rtgmem_type == GFXBOARD_A2410) {
                tms_reset();
                return;
        }
-       if (currprefs.rtgmem_type >= GFXBOARD_HARDWARE) {
-               gb->board = &boards[currprefs.rtgmem_type - GFXBOARD_HARDWARE];
-               gfxmem_bank.mask = currprefs.rtgmem_size - 1;
+       if (gb->rbc->rtgmem_type >= GFXBOARD_HARDWARE) {
+               gb->board = &boards[gb->rbc->rtgmem_type - GFXBOARD_HARDWARE];
+               gfxmem_bank.mask = gb->rbc->rtgmem_size - 1;
        }
        gfxboard_free();
        if (gb->board) {
@@ -2141,8 +2150,9 @@ const TCHAR *gfxboard_get_configname(int type)
        return boards[type - GFXBOARD_HARDWARE].configname;
 }
 
-int gfxboard_get_configtype(int type)
+int gfxboard_get_configtype(struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type == GFXBOARD_UAE_Z2)
                return 2;
        if (type == GFXBOARD_UAE_Z3)
@@ -2152,8 +2162,9 @@ int gfxboard_get_configtype(int type)
        return gb->board->configtype;
 }
 
-bool gfxboard_need_byteswap (int type)
+bool gfxboard_need_byteswap (struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type < GFXBOARD_HARDWARE)
                return false;
        struct rtggfxboard *gb = &rtggfxboards[0];
@@ -2161,15 +2172,17 @@ bool gfxboard_need_byteswap (int type)
        return gb->board->swap;
 }
 
-int gfxboard_get_autoconfig_size(int type)
+int gfxboard_get_autoconfig_size(struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type == GFXBOARD_PICASSO4_Z3)
                return 32 * 1024 * 1024;
        return -1;
 }
 
-int gfxboard_get_vram_min (int type)
+int gfxboard_get_vram_min (struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type < GFXBOARD_HARDWARE)
                return -1;
        struct rtggfxboard *gb = &rtggfxboards[0];
@@ -2177,8 +2190,9 @@ int gfxboard_get_vram_min (int type)
        return gb->board->vrammin;
 }
 
-int gfxboard_get_vram_max (int type)
+int gfxboard_get_vram_max (struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type < GFXBOARD_HARDWARE)
                return -1;
        struct rtggfxboard *gb = &rtggfxboards[0];
@@ -2186,8 +2200,9 @@ int gfxboard_get_vram_max (int type)
        return gb->board->vrammax;
 }
 
-bool gfxboard_is_registers (int type)
+bool gfxboard_is_registers (struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type < 2)
                return false;
        struct rtggfxboard *gb = &rtggfxboards[0];
@@ -2195,8 +2210,9 @@ bool gfxboard_is_registers (int type)
        return gb->board->model_registers != 0;
 }
 
-int gfxboard_num_boards (int type)
+int gfxboard_num_boards (struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type < 2)
                return 1;
        struct rtggfxboard *gb = &rtggfxboards[0];
@@ -2208,8 +2224,9 @@ int gfxboard_num_boards (int type)
        return 2;
 }
 
-uae_u32 gfxboard_get_romtype(int type)
+uae_u32 gfxboard_get_romtype(struct rtgboardconfig *rbc)
 {
+       int type = rbc->rtgmem_type;
        if (type < 2)
                return 0;
        struct rtggfxboard *gb = &rtggfxboards[0];
@@ -2368,7 +2385,7 @@ addrbank *gfxboard_init_memory (int devnum)
        gfxboard_bank_memory.bget = gfxboard_bget_mem_autoconfig;
        gfxboard_bank_memory.bput = gfxboard_bput_mem_autoconfig;
 
-       if (currprefs.rtgmem_type == GFXBOARD_VGA) {
+       if (gb->rbc->rtgmem_type == GFXBOARD_VGA) {
                init_board(gb);
                gb->configured_mem = 1;
                gb->configured_regs = 1;
index 3fc10fc8539544643ac5b09b5b1283ba47c4fd67..9e76afebc422fbf2a2a0c381202200b741792451 100644 (file)
@@ -21,7 +21,7 @@
 
 #define RTAREA_TRAPS 0x3000
 #define RTAREA_RTG 0x3600
-#define RTAREA_TRAMPOLINE 0x3900
+#define RTAREA_TRAMPOLINE 0x390056
 #define RTAREA_DATAREGION 0xF000
 
 #define RTAREA_FSBOARD 0xFFEC
index a6312d4422592c6230320334ba2a3d7178c6db0c..a22ac2fbb47a0640c4ecc6c06df4a0d963e8f143 100644 (file)
@@ -8,19 +8,19 @@ extern void gfxboard_free (void);
 extern void gfxboard_reset (void);
 extern bool gfxboard_vsync_handler (void);
 extern void gfxboard_hsync_handler(void);
-extern int gfxboard_get_configtype (int);
-extern bool gfxboard_is_registers (int);
-extern int gfxboard_get_vram_min (int);
-extern int gfxboard_get_vram_max (int);
-extern bool gfxboard_need_byteswap (int type);
-extern int gfxboard_get_autoconfig_size(int type);
+extern int gfxboard_get_configtype (struct rtgboardconfig*);
+extern bool gfxboard_is_registers (struct rtgboardconfig*);
+extern int gfxboard_get_vram_min (struct rtgboardconfig*);
+extern int gfxboard_get_vram_max (struct rtgboardconfig*);
+extern bool gfxboard_need_byteswap (struct rtgboardconfig*);
+extern int gfxboard_get_autoconfig_size(struct rtgboardconfig*);
 extern double gfxboard_get_vsync (void);
 extern void gfxboard_refresh (void);
 extern bool gfxboard_toggle (int mode);
-extern int gfxboard_num_boards (int type);
-extern uae_u32 gfxboard_get_romtype(int type);
+extern int gfxboard_num_boards (struct rtgboardconfig*);
+extern uae_u32 gfxboard_get_romtype(struct rtgboardconfig*);
 extern const TCHAR *gfxboard_get_name(int);
-extern const TCHAR *gfxboard_get_manufacturername(int); 
+extern const TCHAR *gfxboard_get_manufacturername(int);
 extern const TCHAR *gfxboard_get_configname(int);
 
 extern addrbank *tms_init(int devnum);
index 910431ead210bc9427674cbee673143fc350e9e2..ed3bc56d76f82be357012f073da7bd8f5524debc 100644 (file)
@@ -535,6 +535,11 @@ STATIC_INLINE int valid_address (uaecptr addr, uae_u32 size)
        return get_mem_bank (addr).check(addr, size);
 }
 
+STATIC_INLINE void put_quad_host(void *addr, uae_u64 v)
+{
+       do_put_mem_long((uae_u32*)addr, v >> 32);
+       do_put_mem_long(((uae_u32*)addr) + 1, (uae_u32)v);
+}
 STATIC_INLINE void put_long_host(void *addr, uae_u32 v)
 {
        do_put_mem_long((uae_u32*)addr, v);
@@ -547,6 +552,12 @@ STATIC_INLINE void put_byte_host(void *addr, uae_u8 v)
 {
        *((uae_u8*)addr) = v;
 }
+STATIC_INLINE uae_u64 get_quad_host(void *addr)
+{
+       uae_u64 v = ((uae_u64)do_get_mem_long((uae_u32*)addr)) << 32;
+       v |= do_get_mem_long(((uae_u32*)addr) + 1);
+       return v;
+}
 STATIC_INLINE uae_u32 get_long_host(void *addr)
 {
        return do_get_mem_long((uae_u32*)addr);
index 96e0c8271c4225d10bb59d98e74eb3fe531b82d3..450b7af5681f924dbda80072a7ffc120a902e0c2 100644 (file)
@@ -338,6 +338,12 @@ struct boardromconfig
        int device_num;
        struct romconfig roms[MAX_BOARD_ROMS];
 };
+#define MAX_RTG_BOARDS 4
+struct rtgboardconfig
+{
+       int rtgmem_type;
+       uae_u32 rtgmem_size;
+};
 
 #define Z3MAPPING_AUTO 0
 #define Z3MAPPING_UAE 1
@@ -597,7 +603,6 @@ struct uae_prefs {
        uae_u32 mbresmem_low_size;
        uae_u32 mbresmem_high_size;
        uae_u32 mem25bit_size;
-       uae_u32 rtgmem_size;
        int cpuboard_type;
        int cpuboard_subtype;
        int cpuboard_settings;
@@ -606,8 +611,8 @@ struct uae_prefs {
        int ppc_implementation;
        bool rtg_hardwareinterrupt;
        bool rtg_hardwaresprite;
-       int rtgmem_type;
        bool rtg_more_compatible;
+       struct rtgboardconfig rtgboards[MAX_RTG_BOARDS];
        uae_u32 custom_memory_addrs[MAX_CUSTOM_MEMORY_ADDRS];
        uae_u32 custom_memory_sizes[MAX_CUSTOM_MEMORY_ADDRS];
        uae_u32 custom_memory_mask[MAX_CUSTOM_MEMORY_ADDRS];
@@ -700,6 +705,11 @@ struct uae_prefs {
 #endif
        int statecapturerate, statecapturebuffersize;
        int aviout_width, aviout_height, aviout_xoffset, aviout_yoffset;
+       int screenshot_width, screenshot_height, screenshot_xoffset, screenshot_yoffset;
+       int screenshot_min_width, screenshot_min_height;
+       int screenshot_max_width, screenshot_max_height;
+       int screenshot_output_width, screenshot_output_height;
+       int screenshot_xmult, screenshot_ymult;
 
        /* input */
 
index 1476f05b2d5916cd2a717c6f3064b2e3d10694f7..a34c9043e62462248aca606831f9b02452d6e3ef 100644 (file)
@@ -113,10 +113,12 @@ uae_u32 trap_get_areg(TrapContext *ctx, int reg);
 void trap_set_dreg(TrapContext *ctx, int reg, uae_u32 v);
 void trap_set_areg(TrapContext *ctx, int reg, uae_u32 v);
 
+void trap_put_quad(TrapContext *ctx, uaecptr addr, uae_u64 v);
 void trap_put_long(TrapContext *ctx, uaecptr addr, uae_u32 v);
 void trap_put_word(TrapContext *ctx, uaecptr addr, uae_u16 v);
 void trap_put_byte(TrapContext *ctx, uaecptr addr, uae_u8 v);
 
+uae_u64 trap_get_quad(TrapContext *ctx, uaecptr addr);
 uae_u32 trap_get_long(TrapContext *ctx, uaecptr addr);
 uae_u16 trap_get_word(TrapContext *ctx, uaecptr addr);
 uae_u8 trap_get_byte(TrapContext *ctx, uaecptr addr);
index 57010f4be47821368fee0bea757fdae133505608..0dca680c62af2039ddd4dc5ae7fdb02565431142 100644 (file)
@@ -8407,19 +8407,6 @@ void inputdevice_validate_jports (struct uae_prefs *p, int changedport, bool *fi
        }
 }
 
-#if 0
-void store_inputdevice_config (struct uae_prefs *p)
-{
-       for (int i = 0; i < MAX_JPORTS; i++) {
-               memcpy (&stored_ports[i], &p->jports[i], sizeof (struct jport));
-       }
-}
-void restore_inputdevice_config (struct uae_prefs *p, int portnum)
-{
-       memcpy (&p->jports[portnum], &stored_ports[portnum], sizeof (struct jport));
-}
-#endif
-
 void inputdevice_joyport_config_store(struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type)
 {
        struct jport *jp = &p->jports[portnum];
@@ -8430,7 +8417,8 @@ void inputdevice_joyport_config_store(struct uae_prefs *p, const TCHAR *value, i
        } else {
                _tcscpy(jp->idc.shortid, value);
        }
-       jp->mode = mode;
+       if (mode >= 0)
+               jp->mode = mode;
 }
 
 int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value1, const TCHAR *value2, int portnum, int mode, int type, bool candefault)
index 723b71f5c56c558e588b76d269b064494e26f5ee..a0ccb6c8ffee2df240abbc5a9ce7c86bcda8ab99 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -392,19 +392,22 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
                }
        }
 
-       if (p->rtgmem_size > max_z3fastmem && p->rtgmem_type == GFXBOARD_UAE_Z3) {
-               error_log (_T("Graphics card memory size %d (0x%x) larger than maximum reserved %d (0x%x)."), p->rtgmem_size, p->rtgmem_size, max_z3fastmem, max_z3fastmem);
-               p->rtgmem_size = max_z3fastmem;
-               err = 1;
-       }
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               struct rtgboardconfig *rbc = &p->rtgboards[i];
+               if (rbc->rtgmem_size > max_z3fastmem && rbc->rtgmem_type == GFXBOARD_UAE_Z3) {
+                       error_log (_T("Graphics card memory size %d (0x%x) larger than maximum reserved %d (0x%x)."), rbc->rtgmem_size, rbc->rtgmem_size, max_z3fastmem, max_z3fastmem);
+                       rbc->rtgmem_size = max_z3fastmem;
+                       err = 1;
+               }
 
-       if ((p->rtgmem_size & (p->rtgmem_size - 1)) != 0 || (p->rtgmem_size != 0 && (p->rtgmem_size < 0x100000))) {
-               error_log (_T("Unsupported graphics card memory size %d (0x%x)."), p->rtgmem_size, p->rtgmem_size);
-               if (p->rtgmem_size > max_z3fastmem)
-                       p->rtgmem_size = max_z3fastmem;
-               else
-                       p->rtgmem_size = 0;
-               err = 1;
+               if ((rbc->rtgmem_size & (rbc->rtgmem_size - 1)) != 0 || (rbc->rtgmem_size != 0 && (rbc->rtgmem_size < 0x100000))) {
+                       error_log (_T("Unsupported graphics card memory size %d (0x%x)."), rbc->rtgmem_size, rbc->rtgmem_size);
+                       if (rbc->rtgmem_size > max_z3fastmem)
+                               rbc->rtgmem_size = max_z3fastmem;
+                       else
+                               rbc->rtgmem_size = 0;
+                       err = 1;
+               }
        }
        
        if (p->z3fastmem_size > max_z3fastmem) {
@@ -467,11 +470,6 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
                p->chipmem_size = 0x200000;
                err = 1;
        }
-       if (p->chipmem_size > 0x200000 && p->rtgmem_size && gfxboard_get_configtype(p->rtgmem_type) == 2) {
-               error_log(_T("You can't use Zorro II RTG and more than 2MB chip at the same time."));
-               p->chipmem_size = 0x200000;
-               err = 1;
-       }
        if (p->mem25bit_size > 128 * 1024 * 1024 || (p->mem25bit_size & 0xfffff)) {
                p->mem25bit_size = 0;
                error_log(_T("Unsupported 25bit RAM size"));
@@ -485,30 +483,38 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
                error_log (_T("Unsupported CPU Board RAM size."));
        }
 
-       if (p->rtgmem_type >= GFXBOARD_HARDWARE) {
-               if (gfxboard_get_vram_min(p->rtgmem_type) > 0 && p->rtgmem_size < gfxboard_get_vram_min (p->rtgmem_type)) {
-                       error_log(_T("Graphics card memory size %d (0x%x) smaller than minimum hardware supported %d (0x%x)."),
-                               p->rtgmem_size, p->rtgmem_size, gfxboard_get_vram_min(p->rtgmem_type), gfxboard_get_vram_min(p->rtgmem_type));
-                       p->rtgmem_size = gfxboard_get_vram_min (p->rtgmem_type);
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               struct rtgboardconfig *rbc = &p->rtgboards[i];
+               if (p->chipmem_size > 0x200000 && rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 2) {
+                       error_log(_T("You can't use Zorro II RTG and more than 2MB chip at the same time."));
+                       p->chipmem_size = 0x200000;
+                       err = 1;
                }
-               if (p->address_space_24 && gfxboard_get_configtype(p->rtgmem_type) == 3) {
-                       p->rtgmem_type = GFXBOARD_UAE_Z2;
-                       p->rtgmem_size = 0;
-                       error_log (_T("Z3 RTG and 24-bit address space are not compatible."));
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE) {
+                       if (gfxboard_get_vram_min(rbc) > 0 && rbc->rtgmem_size < gfxboard_get_vram_min (rbc)) {
+                               error_log(_T("Graphics card memory size %d (0x%x) smaller than minimum hardware supported %d (0x%x)."),
+                                       rbc->rtgmem_size, rbc->rtgmem_size, gfxboard_get_vram_min(rbc), gfxboard_get_vram_min(rbc));
+                               rbc->rtgmem_size = gfxboard_get_vram_min (rbc);
+                       }
+                       if (p->address_space_24 && gfxboard_get_configtype(rbc) == 3) {
+                               rbc->rtgmem_type = GFXBOARD_UAE_Z2;
+                               rbc->rtgmem_size = 0;
+                               error_log (_T("Z3 RTG and 24-bit address space are not compatible."));
+                       }
+                       if (gfxboard_get_vram_max(rbc) > 0 && rbc->rtgmem_size > gfxboard_get_vram_max(rbc)) {
+                               error_log(_T("Graphics card memory size %d (0x%x) larger than maximum hardware supported %d (0x%x)."),
+                                       rbc->rtgmem_size, rbc->rtgmem_size, gfxboard_get_vram_max(rbc), gfxboard_get_vram_max(rbc));
+                               rbc->rtgmem_size = gfxboard_get_vram_max(rbc);
+                       }
                }
-               if (gfxboard_get_vram_max(p->rtgmem_type) > 0 && p->rtgmem_size > gfxboard_get_vram_max(p->rtgmem_type)) {
-                       error_log(_T("Graphics card memory size %d (0x%x) larger than maximum hardware supported %d (0x%x)."),
-                               p->rtgmem_size, p->rtgmem_size, gfxboard_get_vram_max(p->rtgmem_type), gfxboard_get_vram_max(p->rtgmem_type));
-                       p->rtgmem_size = gfxboard_get_vram_max(p->rtgmem_type);
+               if (p->address_space_24 && rbc->rtgmem_size && rbc->rtgmem_type == GFXBOARD_UAE_Z3) {
+                       error_log (_T("Z3 RTG and 24bit address space are not compatible."));
+                       rbc->rtgmem_type = GFXBOARD_UAE_Z2;
+               }
+               if (rbc->rtgmem_size && rbc->rtgmem_type == GFXBOARD_UAE_Z2 && (p->chipmem_size > 2 * 1024 * 1024 || getz2size (p) > 8 * 1024 * 1024 || getz2size (p) < 0)) {
+                       rbc->rtgmem_size = 0;
+                       error_log (_T("Too large Z2 RTG memory size."));
                }
-       }
-       if (p->address_space_24 && p->rtgmem_size && p->rtgmem_type == GFXBOARD_UAE_Z3) {
-               error_log (_T("Z3 RTG and 24bit address space are not compatible."));
-               p->rtgmem_type = GFXBOARD_UAE_Z2;
-       }
-       if (p->rtgmem_type == GFXBOARD_UAE_Z2 && (p->chipmem_size > 2 * 1024 * 1024 || getz2size (p) > 8 * 1024 * 1024 || getz2size (p) < 0)) {
-               p->rtgmem_size = 0;
-               error_log (_T("Too large Z2 RTG memory size."));
        }
 
        if (p->cs_z3autoconfig && p->address_space_24) {
@@ -561,10 +567,12 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
                p->z3chipmem_size = 0;
                err = 1;
        }
-       if ((p->rtgmem_size > 0 && p->rtgmem_type == GFXBOARD_UAE_Z3) && p->address_space_24) {
-               error_log (_T("UAEGFX RTG can't be used if address space is 24-bit."));
-               p->rtgmem_size = 0;
-               err = 1;
+       for (int i = 0; i < MAX_RTG_BOARDS; i++) {
+               if ((p->rtgboards[i].rtgmem_size > 0 && p->rtgboards[i].rtgmem_type == GFXBOARD_UAE_Z3) && p->address_space_24) {
+                       error_log (_T("UAEGFX RTG can't be used if address space is 24-bit."));
+                       p->rtgboards[i].rtgmem_size = 0;
+                       err = 1;
+               }
        }
 
 #if !defined (BSDSOCKET)
index e6c68263fda2da8d4e4879c2ce14768aa78d50cf..2fc1c1d360066c18b352e699b14c35cc052a1ae3 100644 (file)
@@ -2128,13 +2128,13 @@ uae_s32 getz2size (struct uae_prefs *p)
 {
        ULONG start;
        start = p->fastmem_size;
-       if (p->rtgmem_size && gfxboard_get_configtype(p->rtgmem_type) == 2) {
-               while (start & (p->rtgmem_size - 1) && start < 8 * 1024 * 1024)
+       if (p->rtgboards[0].rtgmem_size && gfxboard_get_configtype(&p->rtgboards[0]) == 2) {
+               while (start & (p->rtgboards[0].rtgmem_size - 1) && start < 8 * 1024 * 1024)
                        start += 1024 * 1024;
-               if (start + p->rtgmem_size > 8 * 1024 * 1024)
+               if (start + p->rtgboards[0].rtgmem_size > 8 * 1024 * 1024)
                        return -1;
        }
-       start += p->rtgmem_size;
+       start += p->rtgboards[0].rtgmem_size;
        return start;
 }
 
@@ -2142,10 +2142,10 @@ uae_u32 getz2endaddr (void)
 {
        ULONG start;
        start = currprefs.fastmem_size;
-       if (currprefs.rtgmem_size && gfxboard_get_configtype(currprefs.rtgmem_type) == 2) {
+       if (currprefs.rtgboards[0].rtgmem_size && gfxboard_get_configtype(&currprefs.rtgboards[0]) == 2) {
                if (!start)
                        start = 0x00200000;
-               while (start & (currprefs.rtgmem_size - 1) && start < 4 * 1024 * 1024)
+               while (start & (currprefs.rtgboards[0].rtgmem_size - 1) && start < 4 * 1024 * 1024)
                        start += 1024 * 1024;
        }
        return start + 2 * 1024 * 1024;
index 277a4fd8fd2304d4511a13ab89b5db59b1826a65..ed8a3814446aa2c2a2dfe0ac85934bc0a096cb44 100644 (file)
@@ -895,8 +895,14 @@ static int ioctl_command_qcode (int unitnum, uae_u8 *buf, int sector)
                tolongbcd (p + 3, msf);
        }
 
-//     write_log (_T("%6d %02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x\n"),
-//             pos, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11]);
+#if 0
+       uae_u8 *s = buf + 4;
+       write_log(_T("CTRLADR:%02X TRK=%02X IDX=%02X MSF=%02X:%02X:%02X %02X:%02X:%02X\n"),
+               s[0], s[1], s[2],
+               s[3], s[4], s[5],
+               s[7], s[8], s[9]);
+#endif
+
        return 1;
 
 }
index 1920b01729fc0c4d5201162f41d499671a262938..3fa3e29556c7a92a655834c018a8319f08fe8734 100644 (file)
@@ -611,7 +611,9 @@ int host_socket(TrapContext *ctx, SB, int af, int type, int protocol)
        unsigned long nonblocking = 1;
        int faketype;
 
-       BSDTRACE((_T("socket(%s,%s,%d) -> "),af == AF_INET ? _T("AF_INET") : _T("AF_other"),type == SOCK_STREAM ? _T("SOCK_STREAM") : type == SOCK_DGRAM ? _T("SOCK_DGRAM ") : _T("SOCK_RAW"),protocol));
+       BSDTRACE((_T("socket(%s,%s,%d) -> "),
+               af == AF_INET ? _T("AF_INET") : _T("AF_other"),
+               type == SOCK_STREAM ? _T("SOCK_STREAM") : type == SOCK_DGRAM ? _T("SOCK_DGRAM ") : _T("SOCK_RAW"),protocol));
 
        faketype = type;
        if (protocol == IPPROTO_UDP && type == SOCK_RAW && !rawsockets)
@@ -1089,16 +1091,29 @@ void host_sendto (TrapContext *ctx, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, ua
                BSDTRACE((_T("send(%d,0x%x,%d,%d):%d -> "),sd,msg,len,flags,wscnt));
 
        sd++;
-       s = getsock(ctx, sb,sd);
+       s = getsock(ctx, sb, sd);
 
        if (s != INVALID_SOCKET) {
                if (!addr_valid (_T("host_sendto1"), msg, 4))
                        return;
                realpt = (char*)get_real_address (msg);
 
+               if (ISBSDTRACE) {
+                       write_log(_T("FT %08x "), sb->ftable[sd - 1]);
+                       for (int i = 0; i < 28; i++) {
+                               if (i > 0)
+                                       write_log(_T("."));
+                               write_log(_T("%02X"), (uae_u8)realpt[i]);
+                       }
+                       write_log(_T(" -> "));
+               }
+
                if (to) {
                        if (tolen > sizeof buf) {
                                write_log (_T("BSDSOCK: WARNING - Target address in sendto() too large (%d):%d!\n"), tolen,wscnt);
+                               sb->resultval = -1;
+                               bsdsocklib_seterrno(ctx, sb, 22); // EINVAL
+                               goto error;
                        } else {
                                if (!addr_valid (_T("host_sendto2"), to, tolen))
                                        return;
@@ -1141,6 +1156,9 @@ void host_sendto (TrapContext *ctx, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, ua
                                sb->ftable[sd-1]|= SF_RAW_RUDP;
                        } else {
                                write_log(_T("Unknown RAW protocol %d\n"), realpt[9]);
+                               sb->resultval = -1;
+                               bsdsocklib_seterrno(ctx, sb, 22); // EINVAL
+                               goto error;
                        }
                }
 
@@ -1223,6 +1241,7 @@ void host_sendto (TrapContext *ctx, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, ua
        } else
                sb->resultval = -1;
 
+error:
        if (sb->resultval == -1)
                BSDTRACE((_T("sendto failed (%d):%d\n"),sb->sb_errno,wscnt));
        else
index e8fd38f877536118841c184d276da8528f2a29d3..3a1f05bcbecaac47ab75b49ece492e4ff93ae8a3 100644 (file)
@@ -692,7 +692,7 @@ static void from_iff(TrapContext *ctx, uaecptr data, uae_u32 len)
        buf = xmalloc(uae_u8, (len + 3) & ~3);
        trap_get_bytes(ctx, buf, data, (len + 3) & ~3);
 
-#if 1
+#if 0
        FILE *f = fopen("clipboard.dat", "wb");
        if (f) {
                fwrite(buf, 1, len, f);
@@ -700,7 +700,6 @@ static void from_iff(TrapContext *ctx, uaecptr data, uae_u32 len)
        }
 #endif
 
-
        if (clipboard_debug)
                debugwrite(ctx, _T("clipboard_a2p"), data, len);
        if (!memcmp ("FORM", buf, 4)) {
index 0102d4fec3ea4ad80d4ed9cab1745947155f386e..3c5a8e2a2b672a13ce13521c392f22146ab431ce 100644 (file)
@@ -57,6 +57,9 @@ static void virtualfreewithlock (LPVOID addr, SIZE_T size, DWORD freetype)
 static uae_u32 lowmem (void)
 {
        uae_u32 change = 0;
+       struct rtgboardconfig *rbc = &changed_prefs.rtgboards[0];
+       struct rtgboardconfig *crbc = &currprefs.rtgboards[0];
+
        if (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size >= 8 * 1024 * 1024) {
                if (currprefs.z3fastmem2_size) {
                        change = currprefs.z3fastmem2_size;
@@ -75,10 +78,10 @@ static uae_u32 lowmem (void)
                        currprefs.z3fastmem_size /= 2;
                        changed_prefs.z3fastmem_size = currprefs.z3fastmem_size;
                }
-       } else if (currprefs.rtgmem_type == GFXBOARD_UAE_Z3 && currprefs.rtgmem_size >= 1 * 1024 * 1024) {
-               change = currprefs.rtgmem_size - currprefs.rtgmem_size / 2;
-               currprefs.rtgmem_size /= 2;
-               changed_prefs.rtgmem_size = currprefs.rtgmem_size;
+       } else if (crbc->rtgmem_type == GFXBOARD_UAE_Z3 && crbc->rtgmem_size >= 1 * 1024 * 1024) {
+               change = crbc->rtgmem_size - crbc->rtgmem_size / 2;
+               crbc->rtgmem_size /= 2;
+               rbc->rtgmem_size = crbc->rtgmem_size;
        }
        if (currprefs.z3fastmem2_size < 128 * 1024 * 1024)
                currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size = 0;
@@ -301,15 +304,15 @@ static void resetmem (bool decommit)
        }
 }
 
-static ULONG getz2rtgaddr (int rtgsize)
+static ULONG getz2rtgaddr(struct rtgboardconfig *rbc)
 {
        ULONG start;
        start = changed_prefs.fastmem_size;
        if (changed_prefs.fastmem2_size >= 524288)
                start += changed_prefs.fastmem2_size;
-       start += rtgsize - 1;
-       start &= ~(rtgsize - 1);
-       while (start & (changed_prefs.rtgmem_size - 1) && start < 4 * 1024 * 1024)
+       start += rbc->rtgmem_size - 1;
+       start &= ~(rbc->rtgmem_size - 1);
+       while (start & (rbc->rtgmem_size - 1) && start < 4 * 1024 * 1024)
                start += 1024 * 1024;
        return start + 2 * 1024 * 1024;
 }
@@ -335,6 +338,8 @@ static int doinit_shm (void)
        uae_u32 startbarrier, z3offset, align;
        int rounds = 0;
        uae_u32 z3rtgmem_size;
+       struct rtgboardconfig *rbc = &changed_prefs.rtgboards[0];
+       struct rtgboardconfig *crbc = &currprefs.rtgboards[0];
 
        canbang = 1;
        natmem_offset = natmem_reserved;
@@ -349,7 +354,7 @@ static int doinit_shm (void)
                othersize = 0;
                size = 0x1000000;
                startbarrier = changed_prefs.mbresmem_high_size >= 128 * 1024 * 1024 ? (changed_prefs.mbresmem_high_size - 128 * 1024 * 1024) + 16 * 1024 * 1024 : 0;
-               z3rtgmem_size = gfxboard_get_configtype(changed_prefs.rtgmem_type) == 3 ? changed_prefs.rtgmem_size : 0;
+               z3rtgmem_size = gfxboard_get_configtype(rbc) == 3 ? rbc->rtgmem_size : 0;
                if (changed_prefs.cpu_model >= 68020)
                        size = 0x10000000;
                z3size = ((changed_prefs.z3fastmem_size + align) & ~align) + ((changed_prefs.z3fastmem2_size + align) & ~align) + ((changed_prefs.z3chipmem_size + align) & ~align);
@@ -411,15 +416,15 @@ static int doinit_shm (void)
        p96mem_size = z3rtgmem_size;
        p96base_offset = 0;
        uae_u32 z3rtgallocsize = 0;
-       if (changed_prefs.rtgmem_size && gfxboard_get_configtype(changed_prefs.rtgmem_type) == 3) {
-               z3rtgallocsize = gfxboard_get_autoconfig_size(changed_prefs.rtgmem_type) < 0 ? changed_prefs.rtgmem_size : gfxboard_get_autoconfig_size(changed_prefs.rtgmem_type);
+       if (rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 3) {
+               z3rtgallocsize = gfxboard_get_autoconfig_size(rbc) < 0 ? rbc->rtgmem_size : gfxboard_get_autoconfig_size(rbc);
                if (changed_prefs.z3autoconfig_start == Z3BASE_UAE)
                        p96base_offset = natmemsize + startbarrier + z3offset;
                else
                        p96base_offset = expansion_startaddress(natmemsize + startbarrier + z3offset, z3rtgallocsize);
-       } else if (changed_prefs.rtgmem_size && gfxboard_get_configtype(changed_prefs.rtgmem_type) == 2) {
-               p96base_offset = getz2rtgaddr (changed_prefs.rtgmem_size);
-       } else if (changed_prefs.rtgmem_size && gfxboard_get_configtype(changed_prefs.rtgmem_type) == 1) {
+       } else if (rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 2) {
+               p96base_offset = getz2rtgaddr (rbc);
+       } else if (rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 1) {
                p96base_offset = 0xa80000;
        }
        if (p96base_offset) {
@@ -427,8 +432,8 @@ static int doinit_shm (void)
                        p96mem_offset = natmem_offset + p96base_offset;
                } else {
                        if (changed_prefs.cachesize) {
-                               currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
-                               currprefs.rtgmem_type = changed_prefs.rtgmem_type = 0;
+                               crbc->rtgmem_size = rbc->rtgmem_size = 0;
+                               crbc->rtgmem_type = rbc->rtgmem_type = 0;
                                error_log(_T("RTG board is not anymore supported when JIT is enabled and RTG VRAM is located outside of NATMEM (Real Z3 mode under 32-bit Windows)."));
                        } else {
                                // calculate Z3 alignment (argh, I thought only Z2 needed this..)
@@ -443,7 +448,7 @@ static int doinit_shm (void)
                                addr = expansion_startaddress(addr, changed_prefs.z3fastmem2_size);
                                addr += changed_prefs.z3fastmem2_size;
                                addr = expansion_startaddress(addr, z3rtgallocsize);
-                               if (gfxboard_get_configtype(changed_prefs.rtgmem_type) == 3) {
+                               if (gfxboard_get_configtype(rbc) == 3) {
                                        p96base_offset = addr;
                                        write_log("NATMEM: p96base_offset = 0x%x\n", p96base_offset);
                                        // adjust p96mem_offset to beginning of natmem
@@ -463,10 +468,10 @@ static int doinit_shm (void)
                write_log(_T("NATMEM: Our special area: %p-%p (0x%08x %dM)\n"),
                                  natmem_offset, (uae_u8*)natmem_offset + natmemsize,
                                  natmemsize, natmemsize / (1024 * 1024));
-               if (changed_prefs.rtgmem_size)
+               if (rbc->rtgmem_size)
                        write_log (_T("NATMEM: P96 special area: %p-%p (0x%08x %dM)\n"),
-                       p96mem_offset, (uae_u8*)p96mem_offset + changed_prefs.rtgmem_size,
-                       changed_prefs.rtgmem_size, changed_prefs.rtgmem_size >> 20);
+                       p96mem_offset, (uae_u8*)p96mem_offset + rbc->rtgmem_size,
+                       rbc->rtgmem_size, rbc->rtgmem_size >> 20);
                canbang = jit_direct_compatible_memory ? 1 : 0;
                if (p96mem_size)
                        natmem_offset_end = p96mem_offset + p96mem_size;
@@ -488,15 +493,15 @@ bool init_shm (void)
                oz3fastmem_size == changed_prefs.z3fastmem_size &&
                oz3fastmem2_size == changed_prefs.z3fastmem2_size &&
                oz3chipmem_size == changed_prefs.z3chipmem_size &&
-               ortgmem_size == changed_prefs.rtgmem_size &&
-               ortgmem_type == changed_prefs.rtgmem_type)
+               ortgmem_size == changed_prefs.rtgboards[0].rtgmem_size &&
+               ortgmem_type == changed_prefs.rtgboards[0].rtgmem_type)
                return false;
 
        oz3fastmem_size = changed_prefs.z3fastmem_size;
        oz3fastmem2_size = changed_prefs.z3fastmem2_size;
        oz3chipmem_size = changed_prefs.z3chipmem_size;;
-       ortgmem_size = changed_prefs.rtgmem_size;
-       ortgmem_type = changed_prefs.rtgmem_type;
+       ortgmem_size = changed_prefs.rtgboards[0].rtgmem_size;
+       ortgmem_type = changed_prefs.rtgboards[0].rtgmem_type;
 
        doinit_shm ();
 
@@ -604,6 +609,7 @@ void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg)
 #ifdef NATMEM_OFFSET
        unsigned int size = shmids[shmid].size;
        unsigned int readonlysize = size;
+       struct rtgboardconfig *rbc = &currprefs.rtgboards[0];
 
        if (shmids[shmid].attached)
                return shmids[shmid].attached;
@@ -669,7 +675,7 @@ void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg)
                                shmaddr=natmem_offset + 0xec0000;
                        } else {
                                shmaddr=natmem_offset + 0x200000;
-                               if (!(currprefs.rtgmem_size && gfxboard_get_configtype(currprefs.rtgmem_type) == 3))
+                               if (!(rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 3))
                                        size += BARRIER;
                        }
                } else if(!_tcscmp (shmids[shmid].name, _T("fast2"))) {
@@ -680,21 +686,21 @@ void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg)
                                shmaddr=natmem_offset + 0x200000;
                                if (currprefs.fastmem_size >= 524288)
                                        shmaddr=natmem_offset + 0x200000 + currprefs.fastmem_size;
-                               if (!(currprefs.rtgmem_size && gfxboard_get_configtype(currprefs.rtgmem_type) == 3))
+                               if (!(rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 3))
                                        size += BARRIER;
                        }
                } else if(!_tcscmp (shmids[shmid].name, _T("fast2"))) {
                        shmaddr=natmem_offset + 0x200000;
                        got = true;
-                       if (!(currprefs.rtgmem_size && gfxboard_get_configtype(currprefs.rtgmem_type) == 3))
+                       if (!(rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 3))
                                size += BARRIER;
                } else if(!_tcscmp (shmids[shmid].name, _T("z2_gfx"))) {
-                       ULONG start = getz2rtgaddr (size);
+                       ULONG start = getz2rtgaddr(rbc);
                        got = true;
                        p96special = true;
                        shmaddr = natmem_offset + start;
                        gfxmem_bank.start = start;
-                       if (start + currprefs.rtgmem_size < 10 * 1024 * 1024)
+                       if (start + rbc->rtgmem_size < 10 * 1024 * 1024)
                                size += BARRIER;
                } else if(!_tcscmp (shmids[shmid].name, _T("ramsey_low"))) {
                        shmaddr=natmem_offset + a3000lmem_bank.start;
index e77a5d86c4a0215c7bbf3b3635730a575e463054..dd0f9f154b44e1ab9baa93610557e4e0882ae745 100644 (file)
@@ -660,7 +660,7 @@ static void setupcursor (void)
        D3DLOCKED_RECT locked;
        HRESULT hr;
 
-       if (currprefs.rtgmem_type >= GFXBOARD_HARDWARE)
+       if (currprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE)
                return;
        gfx_lock ();
        setupcursor_needed = 1;
@@ -752,7 +752,7 @@ void picasso_trigger_vblank(void)
 static bool rtg_render (void)
 {
        bool flushed = false;
-       bool uaegfx = currprefs.rtgmem_type < GFXBOARD_HARDWARE;
+       bool uaegfx = currprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
 
        if (doskip () && p96skipmode == 0) {
                ;
@@ -962,7 +962,7 @@ void picasso_refresh (void)
        setupcursor();
        rtg_clear();
 
-       if (currprefs.rtgmem_type >= GFXBOARD_HARDWARE) {
+       if (currprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE) {
                gfxboard_refresh ();
                return;
        }
@@ -1005,7 +1005,7 @@ static void picasso_handle_vsync2(void)
        int vsync = isvsync_rtg();
        int mult;
        bool rendered = false;
-       bool uaegfx = currprefs.rtgmem_type < GFXBOARD_HARDWARE;
+       bool uaegfx = currprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
 
        int state = picasso_state_change;
        if (state & PICASSO_STATE_SETDAC) {
@@ -1092,9 +1092,9 @@ static int p96hsync;
 
 void picasso_handle_vsync(void)
 {
-       bool uaegfx = currprefs.rtgmem_type < GFXBOARD_HARDWARE;
+       bool uaegfx = currprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
 
-       if (currprefs.rtgmem_size == 0)
+       if (currprefs.rtgboards[0].rtgmem_size == 0)
                return;
 
        if (!picasso_on && uaegfx) {
@@ -1114,9 +1114,9 @@ void picasso_handle_vsync(void)
 
 void picasso_handle_hsync(void)
 {
-       bool uaegfx = currprefs.rtgmem_type < GFXBOARD_HARDWARE;
+       bool uaegfx = currprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
 
-       if (currprefs.rtgmem_size == 0)
+       if (currprefs.rtgboards[0].rtgmem_size == 0)
                return;
 
        int vsync = isvsync_rtg();
@@ -2358,7 +2358,7 @@ static void picasso96_alloc2 (TrapContext *ctx)
 
 void picasso96_alloc (TrapContext *ctx)
 {
-       if (uaegfx_old || currprefs.rtgmem_type >= GFXBOARD_HARDWARE)
+       if (uaegfx_old || currprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE)
                return;
        uaegfx_resname = ds (_T("uaegfx.card"));
        picasso96_alloc2 (ctx);
@@ -3251,6 +3251,9 @@ static uae_u32 REGPARAM2 picasso_BlitPattern (TrapContext *ctx)
                        result = 1;
                }
 
+               if (pattern.Size >= 16)
+                       result = 0;
+
                if(result) {
                        bool indirect = trap_is_indirect();
                        uae_u32 fgpen, bgpen;
@@ -5034,7 +5037,7 @@ uae_u8 *restore_p96 (uae_u8 *src)
        set_gc_called = !!(flags & 2);
        set_panning_called = !!(flags & 4);
        interrupt_enabled = !!(flags & 32);
-       changed_prefs.rtgmem_size = restore_u32 ();
+       changed_prefs.rtgboards[0].rtgmem_size = restore_u32 ();
        picasso96_state.Address = restore_u32 ();
        picasso96_state.RGBFormat = (RGBFTYPE)restore_u32 ();
        picasso96_state.Width = restore_u16 ();
@@ -5070,7 +5073,7 @@ uae_u8 *save_p96 (int *len, uae_u8 *dstptr)
        uae_u8 *dstbak, *dst;
        int i;
 
-       if (currprefs.rtgmem_size == 0)
+       if (currprefs.rtgboards[0].rtgmem_size == 0)
                return NULL;
        if (dstptr)
                dstbak = dst = dstptr;
@@ -5079,7 +5082,7 @@ uae_u8 *save_p96 (int *len, uae_u8 *dstptr)
        save_u32 (2);
        save_u32 ((picasso_on ? 1 : 0) | (set_gc_called ? 2 : 0) | (set_panning_called ? 4 : 0) |
                (hwsprite ? 8 : 0) | (cursorvisible ? 16 : 0) | (interrupt_enabled ? 32 : 0) | 64);
-       save_u32 (currprefs.rtgmem_size);
+       save_u32 (currprefs.rtgboards[0].rtgmem_size);
        save_u32 (picasso96_state.Address);
        save_u32 (picasso96_state.RGBFormat);
        save_u16 (picasso96_state.Width);
index 84f98ff52a3422f5a2eec889791f799a91ba2c9d..3ff72313402e5a8609063f7ddfd9232b91d39526 100644 (file)
 #define IDC_STATEREC_AUTOPLAY           1652
 #define IDC_SOUNDFREQTXT                1653
 #define IDC_PANEL_FRAME                 1653
+#define IDC_SCREENSHOT_ORIGINALSIZE2    1653
+#define IDC_SCREENSHOT_CLIP             1653
 #define IDC_SOUNDFILTERTXT              1654
 #define IDC_PANEL_FRAME_OUTER           1654
 #define IDC_SOUNDSTEREO                 1655
index 8f67a7674dbb85e6f6a673b5e9db81d3d28cdfb9..3c8e2fe70514a6880cfe809f910f2783de58a561 100644 (file)
@@ -805,11 +805,11 @@ BEGIN
     CONTROL         "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,210,85,171,10
     CONTROL         "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,100,144,14
     GROUPBOX        "Ripper",IDC_STATIC,1,126,393,53
-    PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,53,140,87,14
-    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,245,140,87,14,WS_DISABLED
+    PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,28,140,87,14
+    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,162,140,87,14,WS_DISABLED
     CONTROL         "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,161,162,10
-    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,245,159,87,14
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,163,144,10
+    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,280,140,87,14
     GROUPBOX        "Re-recorder",IDC_STATIC,1,182,393,70
     CONTROL         "Play recording",IDC_STATEREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,53,194,87,14
     CONTROL         "Re-recording enabled",IDC_STATEREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,214,194,118,14
@@ -819,6 +819,7 @@ BEGIN
     COMBOBOX        IDC_STATEREC_RATE,141,233,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
     RTEXT           "Recording buffers:",IDC_STATIC,195,235,91,10,SS_CENTERIMAGE | WS_TABSTOP
     COMBOBOX        IDC_STATEREC_BUFFERSIZE,291,233,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Autoclip screenshot",IDC_SCREENSHOT_CLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,163,144,10
 END
 
 IDD_INPUT DIALOGEX 0, 0, 396, 318
index 176d4da522b3bc2ce3fb59f129c27e4c30cb760d..e69bbc3687453d8dece5f0e404a8d4a32ee3013b 100644 (file)
@@ -367,9 +367,10 @@ int port_insert_custom (int inputmap_port, int devicetype, DWORD flags, const TC
 
 static int port_insert (int inputmap_port, int devicetype, DWORD flags, const TCHAR *name)
 {
+       int ret = 0;
        int devicetype2;
 
-       write_log (L"port_insert %d '%s'\n", inputmap_port, name);
+       write_log (L"port%d_insert type=%d flags=%d '%s'\n", inputmap_port, devicetype, flags, name);
 
        if (inputmap_port < 0 || inputmap_port >= maxjports)
                return FALSE;
@@ -399,10 +400,12 @@ static int port_insert (int inputmap_port, int devicetype, DWORD flags, const TC
                _stprintf (tmp2, _T("KeyboardLayout%d"), i);
                if (!_tcscmp (tmp2, name)) {
                        _stprintf (tmp2, _T("kbd%d"), i + 1);
-                       return inputdevice_joyport_config (&changed_prefs, tmp2, NULL, inputmap_port, devicetype2, 0, true);
+                       ret = inputdevice_joyport_config (&changed_prefs, tmp2, NULL, inputmap_port, devicetype2, 0, true);
+                       return ret;
                }
        }
-       return inputdevice_joyport_config (&changed_prefs, name, NULL, inputmap_port, devicetype2, 1, true);
+       ret = inputdevice_joyport_config (&changed_prefs, name, name, inputmap_port, devicetype2, 1, true);
+       return ret;
 }
 
 static int cd_insert (int num, const TCHAR *name)
index 43a53442931054fb6a53daca8f443a0a15135a07..4d2a25414ae59ed8fc08e17d905acae2af611e60 100644 (file)
@@ -1531,7 +1531,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
                return 0;
 
        case WM_DROPFILES:
-               dragdrop (hWnd, (HDROP)wParam, &changed_prefs, -1);
+               dragdrop (hWnd, (HDROP)wParam, &changed_prefs, -2);
                return 0;
 
        case WM_TIMER:
@@ -3020,8 +3020,8 @@ void fullpath (TCHAR *path, int size)
 done:;
        } else {
                TCHAR tmp[MAX_DPATH];
-               _tcscpy (tmp, path);
-               GetFullPathName (tmp, size, path, NULL);
+               _tcscpy(tmp, path);
+               DWORD err = GetFullPathName (tmp, size, path, NULL);
        }
 }
 void getpathpart (TCHAR *outpath, int size, const TCHAR *inpath)
@@ -3466,11 +3466,11 @@ void target_fixup_options (struct uae_prefs *p)
                error_log (_T("DirectDraw is not RTG hardware sprite compatible."));
                p->rtg_hardwaresprite = false;
        }
-       if (p->rtgmem_type >= GFXBOARD_HARDWARE) {
+       if (p->rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE) {
                p->rtg_hardwareinterrupt = false;
                p->rtg_hardwaresprite = false;
                p->win32_rtgmatchdepth = false;
-               if (gfxboard_need_byteswap (p->rtgmem_type))
+               if (gfxboard_need_byteswap (&p->rtgboards[0]))
                        p->color_mode = 5;
                if (p->ppc_model && !p->gfx_api) {
                        error_log (_T("Graphics board and PPC: Direct3D enabled."));
@@ -3556,6 +3556,7 @@ void target_default_options (struct uae_prefs *p, int type)
 
 static const TCHAR *scsimode[] = { _T("SCSIEMU"), _T("SPTI"), _T("SPTI+SCSISCAN"), NULL };
 static const TCHAR *statusbarmode[] = { _T("none"), _T("normal"), _T("extended"), NULL };
+static const TCHAR *configmult[] = { _T("1x"), _T("2x"), _T("3x"), _T("4x"), _T("5x"), _T("6x"), _T("7x"), _T("8x"), NULL };
 
 static struct midiportinfo *getmidiport (struct midiportinfo **mi, int devid)
 {
@@ -3673,6 +3674,18 @@ void target_save_options (struct zfile *f, struct uae_prefs *p)
        cfgfile_target_dwrite(f, _T("recording_height"), _T("%d"), p->aviout_height);
        cfgfile_target_dwrite(f, _T("recording_x"), _T("%d"), p->aviout_xoffset);
        cfgfile_target_dwrite(f, _T("recording_y"), _T("%d"), p->aviout_yoffset);
+       cfgfile_target_dwrite(f, _T("screenshot_width"), _T("%d"), p->screenshot_width);
+       cfgfile_target_dwrite(f, _T("screenshot_height"), _T("%d"), p->screenshot_height);
+       cfgfile_target_dwrite(f, _T("screenshot_x"), _T("%d"), p->screenshot_xoffset);
+       cfgfile_target_dwrite(f, _T("screenshot_y"), _T("%d"), p->screenshot_yoffset);
+       cfgfile_target_dwrite(f, _T("screenshot_min_width"), _T("%d"), p->screenshot_min_width);
+       cfgfile_target_dwrite(f, _T("screenshot_min_height"), _T("%d"), p->screenshot_min_height);
+       cfgfile_target_dwrite(f, _T("screenshot_max_width"), _T("%d"), p->screenshot_max_width);
+       cfgfile_target_dwrite(f, _T("screenshot_max_height"), _T("%d"), p->screenshot_max_height);
+       cfgfile_target_dwrite(f, _T("screenshot_output_width_limit"), _T("%d"), p->screenshot_output_width);
+       cfgfile_target_dwrite(f, _T("screenshot_output_height_limit"), _T("%d"), p->screenshot_output_height);
+       cfgfile_target_dwrite_str(f, _T("screenshot_mult_width"), configmult[p->screenshot_xmult]);
+       cfgfile_target_dwrite_str(f, _T("screenshot_mult_height"), configmult[p->screenshot_ymult]);
 }
 
 void target_restart (void)
@@ -3765,9 +3778,26 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR *
        if (cfgfile_intval(option, value, _T("recording_width"), &p->aviout_width, 1)
                || cfgfile_intval(option, value, _T("recording_height"), &p->aviout_height, 1)
                || cfgfile_intval(option, value, _T("recording_x"), &p->aviout_xoffset, 1)
-               || cfgfile_intval(option, value, _T("recording_y"), &p->aviout_yoffset, 1))
+               || cfgfile_intval(option, value, _T("recording_y"), &p->aviout_yoffset, 1)
+
+               || cfgfile_intval(option, value, _T("screenshot_width"), &p->screenshot_width, 1)
+               || cfgfile_intval(option, value, _T("screenshot_height"), &p->screenshot_height, 1)
+               || cfgfile_intval(option, value, _T("screenshot_x"), &p->screenshot_xoffset, 1)
+               || cfgfile_intval(option, value, _T("screenshot_y"), &p->screenshot_yoffset, 1)
+               || cfgfile_intval(option, value, _T("screenshot_min_width"), &p->screenshot_min_width, 1)
+               || cfgfile_intval(option, value, _T("screenshot_min_height"), &p->screenshot_min_height, 1)
+               || cfgfile_intval(option, value, _T("screenshot_max_width"), &p->screenshot_max_width, 1)
+               || cfgfile_intval(option, value, _T("screenshot_max_height"), &p->screenshot_max_height, 1)
+               || cfgfile_intval(option, value, _T("screenshot_output_width_limit"), &p->screenshot_output_width, 1)
+               || cfgfile_intval(option, value, _T("screenshot_output_height_limit"), &p->screenshot_output_height, 1))
+
                return 1;
 
+       if (cfgfile_strval(option, value, _T("screenshot_mult_width"), &p->screenshot_xmult, configmult, 0))
+               return 1;
+       if (cfgfile_strval(option, value, _T("screenshot_mult_height"), &p->screenshot_ymult, configmult, 0))
+               return 1;
+               
        if (cfgfile_string(option, value, _T("expansion_gui_page"), tmpbuf, sizeof tmpbuf / sizeof(TCHAR))) {
                TCHAR *p = _tcschr(tmpbuf, ',');
                if (p != NULL)
@@ -4098,7 +4128,7 @@ void fetch_path (const TCHAR *name, TCHAR *out, int size)
                        _tcscpy (out, start_path_data);
        }
        fixtrailing (out);
-       fullpath (out, size);
+       fullpath (out, size2);
 }
 
 int get_rom_path (TCHAR *out, pathtype mode)
@@ -4759,7 +4789,8 @@ static void WIN32_HandleRegistryStuff (void)
                quickstart = 1;
        reopen_console ();
        fetch_path (_T("ConfigurationPath"), path, sizeof (path) / sizeof (TCHAR));
-       path[_tcslen (path) - 1] = 0;
+       if (path[0])
+               path[_tcslen (path) - 1] = 0;
        if (GetFileAttributes (path) == 0xffffffff) {
                TCHAR path2[MAX_DPATH];
                _tcscpy (path2, path);
@@ -6705,9 +6736,9 @@ int get_guid_target (uae_u8 *out)
        if (CoCreateGuid (&guid) != S_OK)
                return 0;
        out[0] = guid.Data1 >> 24;
-       out[1] = guid.Data1 >> 16;
-       out[2] = guid.Data1 >>  8;
-       out[3] = guid.Data1 >>  0;
+       out[1] = (uae_u8)(guid.Data1 >> 16);
+       out[2] = (uae_u8)(guid.Data1 >>  8);
+       out[3] = (uae_u8)(guid.Data1 >>  0);
        out[4] = guid.Data2 >>  8;
        out[5] = guid.Data2 >>  0;
        out[6] = guid.Data3 >>  8;
index d7f9f2d7fcb7a2d5cc0d410f31567040de412d38..c24bbc7491ac69da4a944be123823a1a5941d389 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("7")
+#define WINUAEBETA _T("8")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2016, 2, 21)
+#define WINUAEDATE MAKEBD(2016, 3, 5)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index e04941582e5023b9e451e3aaee496f962c68626c..95c331cd6104e1d41b477d25374fd3033839552a 100644 (file)
@@ -4552,7 +4552,7 @@ bool toggle_rtg (int mode)
                if (picasso_on)
                        return false;
        }
-       if (currprefs.rtgmem_type >= GFXBOARD_HARDWARE) {
+       if (currprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE) {
                return gfxboard_toggle (mode);
        } else {
                // can always switch from RTG to custom
@@ -4618,10 +4618,6 @@ HDC gethdc (void)
        frame_missed = frame_counted = frame_errors = 0;
        frame_usage = frame_usage_avg = frame_usage_total = 0;
 
-#ifdef OPENGL
-       if (OGL_isenabled ())
-               return OGL_getDC (0);
-#endif
 #ifdef D3D
        if (D3D_isenabled ())
                return D3D_getDC (0);
@@ -4633,12 +4629,6 @@ HDC gethdc (void)
 
 void releasehdc (HDC hdc)
 {
-#ifdef OPENGL
-       if (OGL_isenabled ()) {
-               OGL_getDC (hdc);
-               return;
-       }
-#endif
 #ifdef D3D
        if (D3D_isenabled ()) {
                D3D_getDC (hdc);
index 73d8796075d9b5a5274f72370f654cce89266fb6..d4251c51a42a5d0f4446ae235bfba8539c8d4685 100644 (file)
 #define USS_FORMAT_STRING_SAVE _T("(*.uss)\0*.uss\0")
 #define HDF_FORMAT_STRING _T("(*.hdf;*.vhd;*.rdf;*.hdz;*.rdz;*.chd)\0*.hdf;*.vhd;*.rdf;*.hdz;*.rdz;*.chd\0")
 #define INP_FORMAT_STRING _T("(*.inp)\0*.inp\0")
-#define  CD_FORMAT_STRING _T("(*.cue;*.ccd;*.mds;*.iso;*.chd)\0*.cue;*.ccd;*.mds;*.iso;*.chd;") ARCHIVE_STRING _T("\0")
+#define  CD_FORMAT_STRING _T("(*.cue;*.ccd;*.mds;*.iso;*.chd;*.nrg)\0*.cue;*.ccd;*.mds;*.iso;*.chd;*.nrg;") ARCHIVE_STRING _T("\0")
 #define CONFIG_HOST _T("Host")
 #define CONFIG_HARDWARE _T("Hardware")
 
@@ -6336,7 +6336,7 @@ static INT_PTR CALLBACK AboutDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
 
 static void enable_for_displaydlg (HWND hDlg)
 {
-       int rtg = ((!workprefs.address_space_24 || gfxboard_get_configtype(workprefs.rtgmem_type) == 2) && workprefs.rtgmem_size) || workprefs.rtgmem_type >= GFXBOARD_HARDWARE;
+       int rtg = ((!workprefs.address_space_24 || gfxboard_get_configtype(&workprefs.rtgboards[0]) == 2) && workprefs.rtgboards[0].rtgmem_size) || workprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE;
 #ifndef PICASSO96
        rtg = FALSE;
 #endif
@@ -7804,7 +7804,7 @@ static void setmax32bitram (HWND hDlg)
        uae_u32 size, rtgz3size, z3size_uae = 0, z3size_real = 0;
        uae_u32 sizealign = 16 * 1024 * 1024 - 1;
 
-       rtgz3size = gfxboard_get_configtype(workprefs.rtgmem_type) == 3 ? workprefs.rtgmem_size : 0;
+       rtgz3size = gfxboard_get_configtype(&workprefs.rtgboards[0]) == 3 ? workprefs.rtgboards[0].rtgmem_size : 0;
        size = ((workprefs.z3fastmem_size + sizealign) & ~sizealign) + ((workprefs.z3fastmem2_size + sizealign) & ~sizealign) +
                ((rtgz3size + sizealign) & ~sizealign);
        if (cfgfile_board_enabled(&currprefs, ROMTYPE_A4091, 0))
@@ -8794,7 +8794,7 @@ static void updatecpuboardsubtypes(HWND hDlg)
 static void set_expansion_rtg_rom(void)
 {
        int idx;
-       uae_u32 romtype = gfxboard_get_romtype(workprefs.rtgmem_type);
+       uae_u32 romtype = gfxboard_get_romtype(&workprefs.rtgboards[0]);
        if (romtype) {
                struct boardromconfig *bc = get_device_rom_new(&workprefs, romtype, 0, &idx);
                if (bc && bc->roms[idx].romfile[0] == 0) {
@@ -9124,10 +9124,10 @@ static void enable_for_expansiondlg(HWND hDlg)
 
        en = !!full_property_sheet;
 
-       int rtg = workprefs.rtgmem_size && full_property_sheet && workprefs.rtgmem_type < GFXBOARD_HARDWARE;
-       int rtg2 = workprefs.rtgmem_size || workprefs.rtgmem_type >= GFXBOARD_HARDWARE;
-       int rtg3 = workprefs.rtgmem_size && workprefs.rtgmem_type < GFXBOARD_HARDWARE;
-       int rtg4 = workprefs.rtgmem_type < GFXBOARD_HARDWARE;
+       int rtg = workprefs.rtgboards[0].rtgmem_size && full_property_sheet && workprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
+       int rtg2 = workprefs.rtgboards[0].rtgmem_size || workprefs.rtgboards[0].rtgmem_type >= GFXBOARD_HARDWARE;
+       int rtg3 = workprefs.rtgboards[0].rtgmem_size && workprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
+       int rtg4 = workprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE;
 
        ew(hDlg, IDC_P96RAM, rtg2);
        ew(hDlg, IDC_P96MEM, rtg2);
@@ -9158,43 +9158,44 @@ static void values_to_expansiondlg(HWND hDlg)
 
        int min_mem = MIN_P96_MEM;
        int max_mem = MAX_P96_MEM_Z3;
-       if (gfxboard_get_configtype(workprefs.rtgmem_type) == 2) {
-               int v = workprefs.rtgmem_size;
+       struct rtgboardconfig *rbc = &workprefs.rtgboards[0];
+       if (gfxboard_get_configtype(rbc) == 2) {
+               int v = rbc->rtgmem_size;
                max_mem = 0;
-               workprefs.rtgmem_size = 1024 * 1024;
+               rbc->rtgmem_size = 1024 * 1024;
                while (getz2size(&workprefs) > 0) {
-                       workprefs.rtgmem_size *= 2;
+                       rbc->rtgmem_size *= 2;
                        max_mem++;
                }
-               if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE && v > gfxboard_get_vram_max(workprefs.rtgmem_type))
-                       v = gfxboard_get_vram_max(workprefs.rtgmem_type);
-               if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE && v < gfxboard_get_vram_min(workprefs.rtgmem_type))
-                       v = gfxboard_get_vram_min(workprefs.rtgmem_type);
-               workprefs.rtgmem_size = v;
-               while (getz2size(&workprefs) < 0 && workprefs.rtgmem_size > 0)
-                       workprefs.rtgmem_size -= 1024 * 1024;
-       } else if (gfxboard_get_configtype(workprefs.rtgmem_type) == 3) {
-               int v = workprefs.rtgmem_size;
-               if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE && v > gfxboard_get_vram_max(workprefs.rtgmem_type))
-                       v = gfxboard_get_vram_max(workprefs.rtgmem_type);
-               if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE && v < gfxboard_get_vram_min(workprefs.rtgmem_type))
-                       v = gfxboard_get_vram_min(workprefs.rtgmem_type);
-               workprefs.rtgmem_size = v;
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE && v > gfxboard_get_vram_max(rbc))
+                       v = gfxboard_get_vram_max(rbc);
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE && v < gfxboard_get_vram_min(rbc))
+                       v = gfxboard_get_vram_min(rbc);
+               rbc->rtgmem_size = v;
+               while (getz2size(&workprefs) < 0 && rbc->rtgmem_size > 0)
+                       rbc->rtgmem_size -= 1024 * 1024;
+       } else if (gfxboard_get_configtype(rbc) == 3) {
+               int v = rbc->rtgmem_size;
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE && v > gfxboard_get_vram_max(rbc))
+                       v = gfxboard_get_vram_max(rbc);
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE && v < gfxboard_get_vram_min(rbc))
+                       v = gfxboard_get_vram_min(rbc);
+               rbc->rtgmem_size = v;
        } else {
-               int v = workprefs.rtgmem_size;
-               if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE && v > gfxboard_get_vram_max(workprefs.rtgmem_type))
-                       v = gfxboard_get_vram_max(workprefs.rtgmem_type);
-               if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE && v < gfxboard_get_vram_min(workprefs.rtgmem_type))
-                       v = gfxboard_get_vram_min(workprefs.rtgmem_type);
-               workprefs.rtgmem_size = v;
-       }
-       if (workprefs.rtgmem_type >= GFXBOARD_HARDWARE) {
-               switch (gfxboard_get_vram_min(workprefs.rtgmem_type)) {
+               int v = rbc->rtgmem_size;
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE && v > gfxboard_get_vram_max(rbc))
+                       v = gfxboard_get_vram_max(rbc);
+               if (rbc->rtgmem_type >= GFXBOARD_HARDWARE && v < gfxboard_get_vram_min(rbc))
+                       v = gfxboard_get_vram_min(rbc);
+               rbc->rtgmem_size = v;
+       }
+       if (rbc->rtgmem_type >= GFXBOARD_HARDWARE) {
+               switch (gfxboard_get_vram_min(rbc)) {
                        case 0x00100000: min_mem = 1; break;
                        case 0x00200000: min_mem = 2; break;
                        case 0x00400000: min_mem = 3; break;
                }
-               switch (gfxboard_get_vram_max(workprefs.rtgmem_type)) {
+               switch (gfxboard_get_vram_max(rbc)) {
                        case 0x00100000: max_mem = 1; break;
                        case 0x00200000: max_mem = 2; break;
                        case 0x00400000: max_mem = 3; break;
@@ -9202,7 +9203,7 @@ static void values_to_expansiondlg(HWND hDlg)
        }
        SendDlgItemMessage(hDlg, IDC_P96MEM, TBM_SETRANGE, TRUE, MAKELONG(min_mem, max_mem));
        int mem_size = 0;
-       switch (workprefs.rtgmem_size) {
+       switch (rbc->rtgmem_size) {
                case 0x00000000: mem_size = 0; break;
                case 0x00100000: mem_size = 1; break;
                case 0x00200000: mem_size = 2; break;
@@ -9219,7 +9220,7 @@ static void values_to_expansiondlg(HWND hDlg)
        SendDlgItemMessage(hDlg, IDC_P96MEM, TBM_SETPOS, TRUE, mem_size);
        SetDlgItemText(hDlg, IDC_P96RAM, memsize_names[msi_gfx[mem_size]]);
 
-       SendDlgItemMessage(hDlg, IDC_RTG_Z2Z3, CB_SETCURSEL, workprefs.rtgmem_size == 0 ? 0 : workprefs.rtgmem_type + 1, 0);
+       SendDlgItemMessage(hDlg, IDC_RTG_Z2Z3, CB_SETCURSEL, rbc->rtgmem_size == 0 ? 0 : rbc->rtgmem_type + 1, 0);
        SendDlgItemMessage(hDlg, IDC_RTG_8BIT, CB_SETCURSEL, (workprefs.picasso96_modeflags & RGBFF_CLUT) ? 1 : 0, 0);
        SendDlgItemMessage(hDlg, IDC_RTG_16BIT, CB_SETCURSEL,
                                           (manybits(workprefs.picasso96_modeflags, RGBFF_R5G6B5PC | RGBFF_R5G6B5PC | RGBFF_R5G6B5 | RGBFF_R5G5B5 | RGBFF_B5G6R5PC | RGBFF_B5G5R5PC)) ? 1 :
@@ -9330,7 +9331,7 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                SendDlgItemMessage (hDlg, IDC_RTG_32BIT, CB_ADDSTRING, 0, (LPARAM)_T("A8B8G8R8"));
                SendDlgItemMessage (hDlg, IDC_RTG_32BIT, CB_ADDSTRING, 0, (LPARAM)_T("R8G8B8A8"));
                SendDlgItemMessage (hDlg, IDC_RTG_32BIT, CB_ADDSTRING, 0, (LPARAM)_T("B8G8R8A8 (*)"));
-               SendDlgItemMessage (hDlg, IDC_P96MEM, TBM_SETRANGE, TRUE, MAKELONG (MIN_P96_MEM, gfxboard_get_configtype(workprefs.rtgmem_type) == 3 ? MAX_P96_MEM_Z3 : MAX_P96_MEM_Z2));
+               SendDlgItemMessage (hDlg, IDC_P96MEM, TBM_SETRANGE, TRUE, MAKELONG (MIN_P96_MEM, gfxboard_get_configtype(&workprefs.rtgboards[0]) == 3 ? MAX_P96_MEM_Z3 : MAX_P96_MEM_Z2));
                SendDlgItemMessage (hDlg, IDC_RTG_SCALE_ASPECTRATIO, CB_RESETCONTENT, 0, 0);
                WIN32GUI_LoadUIString (IDS_DISABLED, tmp, sizeof tmp / sizeof (TCHAR));
                SendDlgItemMessage (hDlg, IDC_RTG_SCALE_ASPECTRATIO, CB_ADDSTRING, 0, (LPARAM)tmp);
@@ -9358,7 +9359,7 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                break;
 
        case WM_HSCROLL:
-               workprefs.rtgmem_size = memsizes[msi_gfx[SendMessage (GetDlgItem (hDlg, IDC_P96MEM), TBM_GETPOS, 0, 0)]];
+               workprefs.rtgboards[0].rtgmem_size = memsizes[msi_gfx[SendMessage (GetDlgItem (hDlg, IDC_P96MEM), TBM_GETPOS, 0, 0)]];
                values_to_expansiondlg(hDlg);
                enable_for_expansiondlg(hDlg);
                break;
@@ -9420,12 +9421,12 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                                        v = SendDlgItemMessage (hDlg, IDC_RTG_Z2Z3, CB_GETCURSEL, 0, 0L);
                                        if (v != CB_ERR) {
                                                if (v == 0) {
-                                                       workprefs.rtgmem_type = 1;
-                                                       workprefs.rtgmem_size = 0;
+                                                       workprefs.rtgboards[0].rtgmem_type = 1;
+                                                       workprefs.rtgboards[0].rtgmem_size = 0;
                                                } else {
-                                                       workprefs.rtgmem_type = v - 1;
-                                                       if (workprefs.rtgmem_size == 0)
-                                                               workprefs.rtgmem_size = 4096 * 1024;
+                                                       workprefs.rtgboards[0].rtgmem_type = v - 1;
+                                                       if (workprefs.rtgboards[0].rtgmem_size == 0)
+                                                               workprefs.rtgboards[0].rtgmem_size = 4096 * 1024;
                                                }
                                                set_expansion_rtg_rom();
                                                enable_for_expansiondlg (hDlg);
@@ -12055,7 +12056,7 @@ static INT_PTR CALLBACK HardfileSettingsProc (HWND hDlg, UINT msg, WPARAM wParam
 
        switch (msg) {
        case WM_DROPFILES:
-               dragdrop (hDlg, (HDROP)wParam, &changed_prefs, -1);
+               dragdrop (hDlg, (HDROP)wParam, &changed_prefs, -2);
                return FALSE;
 
        case WM_INITDIALOG:
@@ -13096,13 +13097,16 @@ static void addfloppytype (HWND hDlg, int n)
                }
                CheckDlgButton (hDlg, f_enable, state ? BST_CHECKED : BST_UNCHECKED);
                TCHAR tmp[10];
+               tmp[0] = 0;
                if (n < 2 || nn - 1 < DRV_PC_ONLY_40) {
-                       _stprintf(tmp, _T("DF%d:"), n);
+                       if (!showcd || n != 1)
+                               _stprintf(tmp, _T("DF%d:"), n);
                } else {
                        int t = nn - 1 == DRV_PC_ONLY_40 ? 40 : 80;
                        _stprintf(tmp, _T("%c: (%d)"), n == 2 ? 'A' : 'B', t);
                }
-               SetWindowText(GetDlgItem(hDlg, f_enable), tmp);
+               if (tmp[0])
+                       SetWindowText(GetDlgItem(hDlg, f_enable), tmp);
        }
        chk = !showcd && disk_getwriteprotect (&workprefs, text) && state == TRUE ? BST_CHECKED : 0;
        if (f_wp >= 0)
@@ -17175,7 +17179,8 @@ static void values_to_avioutputdlg (HWND hDlg)
        CheckDlgButton (hDlg, IDC_AVIOUTPUT_NOSOUNDSYNC, avioutput_nosoundsync ? TRUE : FALSE);
        CheckDlgButton (hDlg, IDC_AVIOUTPUT_ORIGINALSIZE, avioutput_originalsize ? TRUE : FALSE);
        CheckDlgButton (hDlg, IDC_AVIOUTPUT_ACTIVATED, avioutput_requested ? BST_CHECKED : BST_UNCHECKED);
-       CheckDlgButton (hDlg, IDC_SCREENSHOT_ORIGINALSIZE, screenshot_originalsize ? TRUE : FALSE);
+       CheckDlgButton(hDlg, IDC_SCREENSHOT_ORIGINALSIZE, screenshot_originalsize ? TRUE : FALSE);
+       CheckDlgButton(hDlg, IDC_SCREENSHOT_CLIP, screenshot_clipmode ? TRUE : FALSE);
        CheckDlgButton (hDlg, IDC_SAMPLERIPPER_ACTIVATED, sampleripper_enabled ? BST_CHECKED : BST_UNCHECKED);
        CheckDlgButton (hDlg, IDC_STATEREC_RECORD, input_record ? BST_CHECKED : BST_UNCHECKED);
        CheckDlgButton (hDlg, IDC_STATEREC_PLAY, input_play ? BST_CHECKED : BST_UNCHECKED);
@@ -17201,6 +17206,12 @@ static void enable_for_avioutputdlg (HWND hDlg)
 
        ew (hDlg, IDC_AVIOUTPUT_FILE, TRUE);
 
+       if (!screenshot_originalsize) {
+               CheckDlgButton(hDlg, IDC_SCREENSHOT_CLIP, BST_UNCHECKED);
+               screenshot_clipmode = 0;
+       }
+       ew (hDlg, IDC_SCREENSHOT_CLIP, screenshot_originalsize != 0);
+
        if(workprefs.produce_sound < 2) {
                ew (hDlg, IDC_AVIOUTPUT_AUDIO, FALSE);
                ew (hDlg, IDC_AVIOUTPUT_AUDIO_STATIC, FALSE);
@@ -17260,7 +17271,8 @@ static INT_PTR CALLBACK AVIOutputDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                pages[AVIOUTPUT_ID] = hDlg;
                currentpage = AVIOUTPUT_ID;
                AVIOutput_GetSettings ();
-               regqueryint (NULL, _T("Screenshot_Original"), &screenshot_originalsize);
+               regqueryint(NULL, _T("Screenshot_Original"), &screenshot_originalsize);
+               regqueryint(NULL, _T("Screenshot_ClipMode"), &screenshot_clipmode);
                enable_for_avioutputdlg (hDlg);
                if (!avioutput_filename_gui[0]) {
                        fetch_path (_T("VideoPath"), avioutput_filename_gui, sizeof (avioutput_filename_gui) / sizeof (TCHAR));
@@ -17333,8 +17345,12 @@ static INT_PTR CALLBACK AVIOutputDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                        AVIOutput_SetSettings ();
                        break;
                case IDC_SCREENSHOT_ORIGINALSIZE:
-                       screenshot_originalsize = ischecked (hDlg, IDC_SCREENSHOT_ORIGINALSIZE) ? 1 : 0;
-                       regsetint (NULL, _T("Screenshot_Original"), screenshot_originalsize);
+                       screenshot_originalsize = ischecked(hDlg, IDC_SCREENSHOT_ORIGINALSIZE) ? 1 : 0;
+                       regsetint(NULL, _T("Screenshot_Original"), screenshot_originalsize);
+                       break;
+               case IDC_SCREENSHOT_CLIP:
+                       screenshot_clipmode = ischecked(hDlg, IDC_SCREENSHOT_CLIP) ? 1 : 0;
+                       regsetint(NULL, _T("Screenshot_ClipMode"), screenshot_clipmode);
                        break;
                case IDC_STATEREC_SAVE:
                        if (input_record > INPREC_RECORD_NORMAL) {
index 0f5451b3b7b244074d0b80c40d0469f1e2894a0b..c381ba611bac758297159059f02df75bf3283db6 100644 (file)
@@ -1,4 +1,28 @@
 
+Beta 8:
+
+- Game Ports joystick type was always empty (undefined).
+- Quickstart panel CDTV/CD32 CD path name label was "DF1:", not "CD". (Broke when bridgeboard drive support was added)
+- Dragndrop to emulation window didn't work correctly until GUI was opened at least once.
+- Added screenshot autoclip mode, uses autoscale display size/position detection.
+  Also added following config file only entries: (all config entries need win32. prefix)
+  screenshot_min_width and screenshot_min_height: minimum autoclip size in lores pixels.
+  screenshot_max_width and screenshot_max_height: maximum autoclip size in lores pixels.
+  screenshot_width and screenshot_height: forced screenshot size (non-autoclip mode only)
+  screenshot_x and screenshot_y: position/offset of screenshot (non-autoclip mode only)
+  screenshot_mult_width and screenshot_mult_height: 1x, 2x, 3x, .. 8x screenshot size multiplier.
+  screenshot_output_width_limit and screenshot_output_height_limit: minimum screenshot size, if original size is smaller,
+  multiplier is increased until width/height is same or larger.
+- More internal changes to support more than one enabled RTG board at the same time. (Still lots more to do..)
+- 68020/030 RTE didn't generate exception when it encountered 68040+ or 68010 only stack frame types.
+- Return error code instead of crashing if bsdsocket emulation sendto() tries to use unsupported raw protocol.
+- Switching from relative path mode back to normal mode could have caused repeated crashing.
+- Do not write reserved block at the end of FileInfoBlock back to Amiga side, Pre-2.x dos commands don't allocate
+  complete FIB structure. (Was side-effect of OS4.x compatible trap system)
+- Basic NERO nrg CD image support added. Data and audio tracks seems to work.
+- CDFS mounting selects Joliet volume label if found. (Joliet volume label is not restricted to capital ASCII letters)
+- uaenet.device S2_READORPHAN should not filter unknown multicast addresses.
+
 Beta 7:
 
 - Fullscreen + paused + enter GUI: GUI was invisible.
index b22db90e888910e3542bd1ee093054ae199d4a1f..08c9745ff113cc35a0c86c0e5a22b26f77789191 100644 (file)
--- a/traps.cpp
+++ b/traps.cpp
@@ -971,7 +971,13 @@ void trap_set_areg(TrapContext *ctx, int reg, uae_u32 v)
                m68k_areg(regs, reg) = v;
        }
 }
-
+void trap_put_quad(TrapContext *ctx, uaecptr addr, uae_u64 v)
+{
+       uae_u8 out[8];
+       put_long_host(out + 0, v >> 32);
+       put_long_host(out + 4, (uae_u32)(v >> 0));
+       trap_put_bytes(ctx, out, addr, 8);
+}
 void trap_put_long(TrapContext *ctx, uaecptr addr, uae_u32 v)
 {
        if (trap_is_indirect_null(ctx)) {
@@ -997,6 +1003,12 @@ void trap_put_byte(TrapContext *ctx, uaecptr addr, uae_u8 v)
        }
 }
 
+uae_u64 trap_get_quad(TrapContext *ctx, uaecptr addr)
+{
+       uae_u8 in[8];
+       trap_get_bytes(ctx, in, addr, 8);
+       return ((uae_u64)get_long_host(in + 0) << 32) | get_long_host(in + 4);
+}
 uae_u32 trap_get_long(TrapContext *ctx, uaecptr addr)
 {
        if (trap_is_indirect_null(ctx)) {
diff --git a/x86.cpp b/x86.cpp
index 399eae652bf91d559abfb2b4835aa8269375a66c..1acd447f8044bf39021cb6723db7e0dcedf3ec4a 100644 (file)
--- a/x86.cpp
+++ b/x86.cpp
@@ -171,7 +171,7 @@ static int x86_found;
 #define IO_KEYBOARD_REGISTER_A2000 0x1fff
 #define IO_A2386_CONFIG 0x1f9f
 
-#define ISVGA() (currprefs.rtgmem_type == GFXBOARD_VGA)
+#define ISVGA() (currprefs.rtgboards[0].rtgmem_type == GFXBOARD_VGA)
 
 static struct x86_bridge *bridges[X86_BRIDGE_MAX];
 
index c97f05c1907d782ffba8b0708e472092a6678215..234a77365c021b1c6a9e8affa1fd43a689a03eef 100644 (file)
--- a/zfile.cpp
+++ b/zfile.cpp
@@ -296,7 +296,8 @@ int zfile_gettype (struct zfile *z)
                        return ZFILE_NVR;
                if (strcasecmp (ext, _T("uae")) == 0)
                        return ZFILE_CONFIGURATION;
-               if (strcasecmp (ext, _T("cue")) == 0 || strcasecmp (ext, _T("iso")) == 0 || strcasecmp (ext, _T("ccd")) == 0 || strcasecmp (ext, _T("mds")) == 0 || strcasecmp (ext, _T("chd")) == 0)
+               if (strcasecmp(ext, _T("cue")) == 0 || strcasecmp(ext, _T("iso")) == 0 || strcasecmp(ext, _T("ccd")) == 0 ||
+                       strcasecmp(ext, _T("mds")) == 0 || strcasecmp(ext, _T("chd")) == 0 || strcasecmp(ext, _T("nrg")) == 0)
                        return ZFILE_CDIMAGE;
        }
        memset (buf, 0, sizeof (buf));