]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1510b6.zip
authorToni Wilen <twilen@winuae.net>
Thu, 17 Jul 2008 09:36:37 +0000 (12:36 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:41:59 +0000 (21:41 +0200)
20 files changed:
cfgfile.c
custom.c
hardfile.c
include/options.h
od-win32/ahidsound_new.c
od-win32/dinput.c
od-win32/dxwrap.c
od-win32/mman.c
od-win32/picasso96_xp_win.c [deleted file]
od-win32/resources/resource
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.c
od-win32/win32.h
od-win32/win32_scale2x.c
od-win32/win32gfx.c
od-win32/win32gui.c
od-win32/winuae_msvc/winuae_msvc.vcproj
od-win32/winuaechangelog.txt
scsiemul.c

index 4c879b278e4f64ee1c535fac80e54575dbda5faa..2e1e76506471180ed9b24ab2c31ac4be644b4392 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -168,8 +168,8 @@ static const char *obsolete[] = {
     "sound_pri_cutoff", "sound_pri_time", "sound_min_buff", "sound_bits",
     "gfx_test_speed", "gfxlib_replacement", "enforcer", "catweasel_io",
     "kickstart_key_file", "fast_copper", "sound_adjust",
-    "serial_hardware_dtrdsr", "gfx_filter_upscale", 
-    0
+    "serial_hardware_dtrdsr", "gfx_filter_upscale",
+    NULL
 };
 
 #define UNEXPANDED "$(FILE_PATH)"
@@ -574,8 +574,10 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
     cfgfile_dwrite (f, "gfx_filter_gamma=%d\n", p->gfx_filter_gamma);
     cfgfile_dwrite (f, "gfx_filter_blur=%d\n", p->gfx_filter_blur);
     cfgfile_dwrite (f, "gfx_filter_noise=%d\n", p->gfx_filter_noise);
-    cfgfile_dwrite (f, "gfx_filter_keep_aspect=%s\n", p->gfx_filter_aspect ? "true" : "false");
-
+    cfgfile_dwrite (f, "gfx_filter_keep_aspect=%s\n", p->gfx_filter_keep_aspect ? "true" : "false");
+    cfgfile_dwrite (f, "gfx_filter_aspect_ratio=%d:%d\n",
+       p->gfx_filter_aspect >= 0 ? (p->gfx_filter_aspect >> 8) : -1,
+       p->gfx_filter_aspect >= 0 ? (p->gfx_filter_aspect & 0xff) : -1);
     cfgfile_dwrite (f, "gfx_luminance=%d\n", p->gfx_luminance);
     cfgfile_dwrite (f, "gfx_contrast=%d\n", p->gfx_contrast);
     cfgfile_dwrite (f, "gfx_gamma=%d\n", p->gfx_gamma);
@@ -895,7 +897,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value)
        || cfgfile_intval (option, value, "gfx_filter_gamma", &p->gfx_filter_gamma, 1)
        || cfgfile_intval (option, value, "gfx_filter_blur", &p->gfx_filter_blur, 1)
        || cfgfile_intval (option, value, "gfx_filter_noise", &p->gfx_filter_noise, 1)
-       || cfgfile_yesno (option, value, "gfx_filter_keep_aspect", &p->gfx_filter_aspect)
+       || cfgfile_yesno  (option, value, "gfx_filter_keep_aspect", &p->gfx_filter_keep_aspect)
        || cfgfile_intval (option, value, "gfx_luminance", &p->gfx_luminance, 1)
        || cfgfile_intval (option, value, "gfx_contrast", &p->gfx_contrast, 1)
        || cfgfile_intval (option, value, "gfx_gamma", &p->gfx_gamma, 1)
@@ -1010,6 +1012,24 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value)
        }
        return 1;
     }
+    if (cfgfile_string (option, value, "gfx_filter_aspect_ratio", tmpbuf, sizeof tmpbuf)) {
+       int v1, v2;
+       char *s;
+       
+       p->gfx_filter_aspect = -1;
+       v1 = atol (tmpbuf);
+       s = strchr (tmpbuf, ':');
+       if (s) {
+           v2 = atol (s + 1);
+           if (v1 < 0 || v2 < 0)
+               p->gfx_filter_aspect = -1;
+           else if (v1 == 0 || v2 == 0)
+               p->gfx_filter_aspect = 0;
+           else
+               p->gfx_filter_aspect = (v1 << 8) | v2;
+       }
+       return 1;
+    }
 #endif
 
     if (strcmp (option, "gfx_width") == 0 || strcmp (option, "gfx_height") == 0) {
index a283a09959e2f5e1f66994bd36c2c43b7d218538..25b62489790b1825a2e842bb49144eb2dabe4839 100755 (executable)
--- a/custom.c
+++ b/custom.c
@@ -2480,13 +2480,17 @@ static void calcdiw (void)
     plfstrt = ddfstrt;
     plfstop = ddfstop;
     /* probably not the correct place.. */
-    /* ECS/AGA and ddfstop > maxhpos = always-on display */
     if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
-       if (ddfstop > maxhpos)
+       /* ECS/AGA and ddfstop > maxhpos == always-on display */
+       if (plfstop > maxhpos)
            plfstrt = 0;
-       if (plfstrt < HARD_DDF_START)
-           plfstrt = HARD_DDF_START;
+    } else {
+       /* OCS and ddfstop >= ddfstrt == ddsftop = max */
+       if (plfstrt >= plfstop)
+           plfstop = 0xff;
     }
+    if (plfstrt < HARD_DDF_START)
+        plfstrt = HARD_DDF_START;
 }
 
 /* display mode changed (lores, doubling etc..), recalculate everything */
index 5161e4c1307e462b8e09dd3c1dfc86e7e04fa538..6193b4e9eefea4f3b34b736c600d582e803731cc 100755 (executable)
@@ -907,13 +907,17 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
            goto no_disk;
        offset = get_long (request + 44);
        len = get_long (request + 36); /* io_Length */
-       if ((offset & bmask) || (len & bmask)) {
+       if ((offset & bmask) || dataptr == 0) {
            unaligned (cmd, offset, len, hfd->blocksize);
            goto bad_command;
        }
+       if (len & bmask) {
+           unaligned (cmd, offset, len, hfd->blocksize);
+           goto bad_len;
+       }
        if (len + offset > hfd->size) {
            outofbounds (cmd, offset, len, hfd->size);
-           goto bad_command;
+           goto bad_len;
        }
        actual = (uae_u32)cmd_read (hfd, dataptr, offset, len);
        break;
@@ -924,14 +928,18 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
            goto no_disk;
        offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32);
        len = get_long (request + 36); /* io_Length */
-       if ((offset64 & bmask) || (len & bmask)) {
+       if ((offset64 & bmask) || dataptr == 0) {
            unaligned (cmd, offset64, len, hfd->blocksize);
            goto bad_command;
        }
+       if (len & bmask) {
+           unaligned (cmd, offset64, len, hfd->blocksize);
+           goto bad_len;
+       }
        if (len + offset64 > hfd->size) {
            outofbounds (cmd, offset64, len, hfd->size);
-           goto bad_command;
-       }
+           goto bad_len;
+        }
        actual = (uae_u32)cmd_read (hfd, dataptr, offset64, len);
        break;
 
@@ -944,13 +952,17 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
        } else {
            offset = get_long (request + 44);
            len = get_long (request + 36); /* io_Length */
-           if ((offset & bmask) || (len & bmask)) {
+           if ((offset & bmask) || dataptr == 0) {
                unaligned (cmd, offset, len, hfd->blocksize);
                goto bad_command;
            }
+           if (len & bmask) {
+               unaligned (cmd, offset, len, hfd->blocksize);
+               goto bad_len;
+           }
            if (len + offset > hfd->size) {
                outofbounds (cmd, offset, len, hfd->size);
-               goto bad_command;
+               goto bad_len;
            }
            actual = (uae_u32)cmd_write (hfd, dataptr, offset, len);
        }
@@ -967,21 +979,27 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
        } else {
            offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32);
            len = get_long (request + 36); /* io_Length */
-           if ((offset64 & bmask) || (len & bmask)) {
+           if ((offset64 & bmask) || dataptr == 0) {
                unaligned (cmd, offset64, len, hfd->blocksize);
                goto bad_command;
            }
+           if (len & bmask) {
+               unaligned (cmd, offset64, len, hfd->blocksize);
+               goto bad_len;
+           }
            if (len + offset64 > hfd->size) {
                outofbounds (cmd, offset64, len, hfd->size);
-               goto bad_command;
+               goto bad_len;
            }
            put_long (request + 32, (uae_u32)cmd_write (hfd, dataptr, offset64, len));
        }
        break;
 
        bad_command:
-       error = IOERR_BADADDRESS; /* IOERR_BADADDRESS */
+       error = IOERR_BADADDRESS;
        break;
+       bad_len:
+       error = IOERR_BADLENGTH;
        no_disk:
        error = 29; /* no disk */
        break;
index 4cbd08b11e12bd01323934ea2f9697ed13be8b88..3a1abf95a4156fca7342c32f0eb0f92c740c206d 100755 (executable)
@@ -181,7 +181,7 @@ struct uae_prefs {
     int gfx_filter_filtermode;
     int gfx_filter_noise, gfx_filter_blur;
     int gfx_filter_saturation, gfx_filter_luminance, gfx_filter_contrast, gfx_filter_gamma;
-    int gfx_filter_aspect;
+    int gfx_filter_keep_aspect, gfx_filter_aspect;
 
     int immediate_blits;
     unsigned int chipset_mask;
index 3f156791b3a0e1d36a53958c960d1b6568ac285a..b918ec178394f3ab6b3f8af4363b7ebe6ec78175 100755 (executable)
@@ -76,7 +76,8 @@ static int ahi_debug = 1;
 #define pub_RecordBufferSize (pub_RecordSampleType + 4)
 #define pub_RecordBufferSizeBytes (pub_RecordBufferSize + 4)
 #define pub_RecordBuffer (pub_RecordBufferSizeBytes + 4)
-#define pub_End (pub_RecordBuffer + 4 + 4 + 4 + 4)
+#define pub_ChannelInfo (pub_RecordBuffer + 4 + 4 + 4 + 4)
+#define pub_End (pub_ChannelInfo + 4)
 
 #define FUNCMODE_PLAY 1
 #define FUNCMODE_RECORD 2
@@ -107,6 +108,12 @@ static int ahi_debug = 1;
 #define ahiac_PreTimerFunc ahiac_AntiClickSamples + 4 
 #define ahiac_PostTimerFunc ahiac_PreTimerFunc + 4 
 
+#define ahie_Effect 0
+#define ahieci_Func 4
+#define ahieci_Channels 8
+#define ahieci_Pad 10
+#define ahieci_Offset 12
+
 #if 0
 struct AHISampleInfo
 {
@@ -196,6 +203,18 @@ struct AHIAudioCtrlDrv
 #define AHIACB_MULTTAB         (6)
 #define        AHIACB_MULTICHANNEL     (7)
 
+#define AHISB_IMM              0
+#define AHISB_NODELAY          1
+#define AHISF_IMM              (1 << AHISB_IMM)
+#define AHISF_NODELAY          (1 << SHISB_NODELAY)
+
+#define AHIET_CANCEL           (1 << 31)
+#define AHIET_MASTERVOLUME     1
+#define AHIET_OUTPUTBUFFER     2
+#define AHIET_DSPMASK          3
+#define AHIET_DSPECHO          4
+#define AHIET_CHANNELINFO      5
+
 #define AHI_TagBase            (0x80000000)
 #define AHI_TagBaseR           (AHI_TagBase|0x8000)
 
@@ -373,30 +392,28 @@ struct dssample {
     uae_u32 type;
     uae_u32 sampletype;
     uae_u32 offset;
-    int channel;
 };
 
 struct dschannel {
     int num;
-    int frequency;
-    int volume;
-    int panning;
+    int frequency, nextfrequency;
+    int volume, nextvolume;
+    int panning, nextpanning;
     int backwards;
-    struct dssample *ds;
+    struct dssample *ds, *nextds;
+    int srcplayoffset, nextsrcplayoffset;
+    int srcplaylen, nextsrcplaylen;
     LPDIRECTSOUNDBUFFER8 dsb;
 
     uae_u8 *buffer;
+    int mixlength;
     int buffercursor;
     int hsync;
     int channelsignal;
+    int srcoffset;
 
-    int playing, dsplaying;
+    int dsplaying;
     int dscursor;
-
-    int srcoffset;
-    int prevsrcoffset;
-    int srcplayoffset;
-    int srcplaylen;
 };
 
 struct DSAHI {
@@ -484,6 +501,7 @@ static int sendsignal (struct DSAHI *dsahip)
 {
     uae_u32 audioctrl = dsahip->audioctrl;
     uae_u32 puaebase = get_long (audioctrl + ahiac_DriverData);
+    uae_u32 channelinfo;
     uae_u32 task, signalmask;
     uae_s16 taskmode = get_word (puaebase + pub_TaskMode);
     uae_s16 funcmode = get_word (puaebase + pub_FuncMode);
@@ -499,6 +517,17 @@ static int sendsignal (struct DSAHI *dsahip)
        funcmode &= FUNCMODE_RECORDALLOC;
        put_word (puaebase + pub_FuncMode, funcmode);
     }
+
+    channelinfo = get_long (puaebase + pub_ChannelInfo);
+    if (channelinfo) {
+       int i, ch;
+       ch = get_word (channelinfo + ahieci_Channels);
+       if (ch > UAE_MAXCHANNELS)
+           ch = UAE_MAXCHANNELS;
+       for (i = 0; i < ch; i++)
+           put_long (channelinfo + ahieci_Offset + i * 4, dsahip->channel[i].srcoffset);
+    }
+
     uae_Signal (task, signalmask);
     return 1;
 }
@@ -528,10 +557,11 @@ static void evtfunc (uae_u32 v)
        uae_u32 puaebase = get_long (audioctrl + ahiac_DriverData);
        
        put_word (puaebase + pub_FuncMode, get_word (puaebase + pub_FuncMode) | FUNCMODE_PLAY);
-       if (sendsignal (dsahip))
+       if (sendsignal (dsahip)) {
            event2_newevent2 (dsahip->evttime, v, evtfunc);
-       else
+       } else {
            dsahip->evttime = 0;
+       }
     }
 }
 
@@ -561,8 +591,6 @@ static void setevent (struct DSAHI *dsahip)
 
 const static GUID KSDATAFORMAT_SUBTYPE_PCM = {0x00000001,0x0000,0x0010,
     {0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71}};
-#define KSAUDIO_SPEAKER_QUAD_SURROUND   (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
-                                        SPEAKER_SIDE_LEFT  | SPEAKER_SIDE_RIGHT)
 
 static void ds_freechannel (struct DSAHI *ahidsp, struct dschannel *dc)
 {
@@ -691,7 +719,7 @@ static int ds_init (struct DSAHI *dsahip)
     dsahip->bitspersampleout = dsahip->bits24 ? 24 : 16;
     dsahip->bytespersampleout = dsahip->bitspersampleout / 8;
     dsahip->channellength = 65536 * dsahip->chout * dsahip->bytespersampleout;
-    dsahip->mixlength = 48000 * dsahip->chout * dsahip->bytespersampleout / 20;
+    dsahip->mixlength = 4000 * dsahip->chout * dsahip->bytespersampleout;
     if (ahi_debug)
        write_log("AHI: CH=%d BLEN=%d MLEN=%d\n", dsahip->chout, dsahip->channellength, dsahip->mixlength);
 
@@ -736,39 +764,39 @@ static int ds_reinit (struct DSAHI *dsahip)
 }
 
 
-static void ds_setvolume (struct DSAHI *dsahip, struct dschannel *dc, int volume, int panning)
+static void ds_setvolume (struct DSAHI *dsahip, struct dschannel *dc)
 {
     HRESULT hr;
     LONG vol, pan;
 
     if (dc->dsb) {
-       if (abs (dc->volume) != abs (volume)) {
-           vol = (LONG)((DSBVOLUME_MIN / 2) + (-DSBVOLUME_MIN / 2) * log (1 + (2.718281828 - 1) * (abs (volume) / 65536.0)));
+       if (abs (dc->volume) != abs (dc->nextvolume)) {
+           vol = (LONG)((DSBVOLUME_MIN / 2) + (-DSBVOLUME_MIN / 2) * log (1 + (2.718281828 - 1) * (abs (dc->nextvolume) / 65536.0)));
            hr = IDirectSoundBuffer_SetVolume (dc->dsb, vol);
            if (FAILED (hr))
                write_log ("AHI: SetVolume(%d,%d) failed: %s\n", dc->num, vol, DXError (hr));
        }
-       if (abs (dc->panning) != abs (panning)) {
-           pan = (abs (panning) - 0x8000) * DSBPAN_RIGHT / 32768;
+       if (abs (dc->panning) != abs (dc->nextpanning)) {
+           pan = (abs (dc->nextpanning) - 0x8000) * DSBPAN_RIGHT / 32768;
            hr = IDirectSoundBuffer_SetPan (dc->dsb, pan);
            if (FAILED (hr))
                write_log ("AHI: SetPan(%d,%d) failed: %s\n", dc->num, pan, DXError (hr));
        }
     }
-    dc->volume = volume;
-    dc->panning = panning;
+    dc->volume = dc->nextvolume;
+    dc->panning = dc->nextpanning;
 }
 
-static void ds_setfreq (struct DSAHI *dsahip, struct dschannel *dc, int frequency)
+static void ds_setfreq (struct DSAHI *dsahip, struct dschannel *dc)
 {
     HRESULT hr;
 
-    if (dc->frequency != frequency && frequency > 0 && dc->dsb) {
-       hr = IDirectSoundBuffer8_SetFrequency (dc->dsb, frequency);
+    if (dc->frequency != dc->nextfrequency && dc->nextfrequency > 0 && dc->dsb) {
+       hr = IDirectSoundBuffer8_SetFrequency (dc->dsb, dc->nextfrequency);
        if (FAILED (hr))
-           write_log ("AHI: SetFrequency(%d,%d) failed: %s\n", dc->num, frequency, DXError (hr));
+           write_log ("AHI: SetFrequency(%d,%d) failed: %s\n", dc->num, dc->nextfrequency, DXError (hr));
     }
-    dc->frequency = frequency;
+    dc->frequency = dc->nextfrequency;
 }
 
 static int ds_allocchannel (struct DSAHI *dsahip, struct dschannel *dc)
@@ -778,7 +806,7 @@ static int ds_allocchannel (struct DSAHI *dsahip, struct dschannel *dc)
     WAVEFORMATEXTENSIBLE wavfmt;
     LPDIRECTSOUNDBUFFER pdsb;
     LPDIRECTSOUNDBUFFER8 pdsb8;
-    int round, vol, freq, pan;
+    int round;
 
     if (dc->dsb)
        return 1;
@@ -841,16 +869,16 @@ static int ds_allocchannel (struct DSAHI *dsahip, struct dschannel *dc)
     IDirectSound_Release (pdsb);
     dc->dsb = pdsb8;
 
-    freq = dc->frequency;
-    vol = dc->volume;
-    pan = dc->panning;
     dc->frequency = -1;
     dc->volume = -1;
     dc->panning = -1;
-    ds_setvolume (dsahip, dc, vol, pan);
-    ds_setfreq (dsahip, dc, freq);
-    dc->buffer = xcalloc (dsahip->mixlength, 1);
+    ds_setvolume (dsahip, dc);
+    ds_setfreq (dsahip, dc);
+    dc->mixlength = dsahip->mixlength;
+    dc->buffer = xcalloc (dc->mixlength, 1);
     dc->buffercursor = 0;
+    if (ahi_debug)
+       write_log ("AHI: allocated directsound buffer for channel %d\n", dc->num);
     return 1;
 error:
     ds_freechannel (dsahip, dc);
@@ -859,7 +887,7 @@ error:
 
 #define MAKEXCH makexch (dsahip, dc, dst, i, och2, l, r)
 
-STATIC_INLINE void makexch (struct DSAHI *dsahip, struct dschannel *dc, uae_u8 *dst, int idx, int och2, uae_s16 l, uae_s16 r)
+STATIC_INLINE void makexch (struct DSAHI *dsahip, struct dschannel *dc, uae_u8 *dst, int idx, int och2, uae_s32 l, uae_s32 r)
 {
     if (dsahip->bits24) {
     } else {
@@ -1131,13 +1159,17 @@ static int ds_copysample (struct DSAHI *dsahip, struct dschannel *dc)
     else
         diff = dsahip->channellength - writec + dc->dscursor;
 
-    if (diff > dsahip->mixlength)
+    if (diff > dsahip->channellength / 2) {
+       dc->dscursor = writec + dc->mixlength;
+       write_log ("AHI: Resync\n");
+    }
+    if (diff > dc->mixlength)
        return 0;
 
-    hr = IDirectSoundBuffer8_Lock (dc->dsb, dc->dscursor, dsahip->mixlength, &buf1, &size1, &buf2, &size2, 0);
+    hr = IDirectSoundBuffer8_Lock (dc->dsb, dc->dscursor, dc->mixlength, &buf1, &size1, &buf2, &size2, 0);
     if (hr == DSERR_BUFFERLOST) {
        IDirectSoundBuffer8_Restore (dc->dsb);
-       hr = IDirectSoundBuffer8_Lock (dc->dsb, dc->dscursor, dsahip->mixlength, &buf1, &size1, &buf2, &size2, 0);
+       hr = IDirectSoundBuffer8_Lock (dc->dsb, dc->dscursor, dc->mixlength, &buf1, &size1, &buf2, &size2, 0);
     }
     if (SUCCEEDED (hr)) {
        memcpy (buf1, dc->buffer, size1);
@@ -1151,13 +1183,45 @@ static int ds_copysample (struct DSAHI *dsahip, struct dschannel *dc)
            diff / (dsahip->chout * dsahip->bytespersampleout),
            playc, writec, dc->dscursor);
 
-    dc->dscursor += dsahip->mixlength;
+    dc->dscursor += dc->mixlength;
     if (dc->dscursor >= dsahip->channellength)
        dc->dscursor -= dsahip->channellength;
 
     return 1;
 }
 
+static int calcdelay (struct dschannel *dc, int len)
+{
+    int rate = vblank_hz * maxvpos;
+    int freq = dc->frequency;
+    int hsyncs = rate * len / freq;
+    hsyncs = hsyncs * 2 / 3;
+    if (hsyncs > 0)
+       hsyncs--;
+    return hsyncs;
+}
+
+static void checkvolfreq (struct DSAHI *dsahip, struct dschannel *dc)
+{
+    if (dc->frequency != dc->nextfrequency)
+       ds_setfreq (dsahip, dc);
+    if (dc->volume != dc->nextvolume || dc->panning != dc->nextpanning)
+       ds_setvolume (dsahip, dc);
+}
+
+static void getmixbufferlen (struct DSAHI *dsahip, struct dschannel *dc)
+{
+    int olen = dc->mixlength;
+    dc->mixlength = (dc->nextfrequency / 24) * dsahip->bytespersampleout * dsahip->chout;
+    if (dc->mixlength > dsahip->mixlength)
+       dc->mixlength = dsahip->mixlength;
+    if (dc->mixlength < 100)
+       dc->mixlength = 100;
+    if (ahi_debug && olen != dc->mixlength)
+       write_log ("AHI: channel %d: buffer %d frames\n",
+           dc->num, dc->mixlength / (dsahip->bytespersampleout * dsahip->chout));
+}
+
 static void copysample (struct DSAHI *dsahip, struct dschannel *dc)
 {
     int dstlen, dstlenbytes;
@@ -1165,68 +1229,112 @@ static void copysample (struct DSAHI *dsahip, struct dschannel *dc)
     int srclen, srclendstbytes;
     int chbytesout;
     uae_u8 *dstbuf;
-    int ok;
+    uae_u32 addr, addre, addrs;
+    int chbytesin;
+    int waitlen;
 
-    assert (dc->buffercursor < dsahip->mixlength);
-
-    ds = dc->ds;
+    assert (dc->buffercursor < dc->mixlength);
 
     chbytesout = dsahip->chout * dsahip->bytespersampleout;
     dstbuf = dc->buffer + dc->buffercursor;
-    dstlenbytes = dsahip->mixlength - dc->buffercursor;
+    dstlenbytes = dc->mixlength - dc->buffercursor;
     dstlen = dstlenbytes / chbytesout;
     
-    ok = 0;
-    if (ds && dc->playing > 0) {
-       uae_u32 addr, addre, addrs;
-       int chbytesin = ds->ch * ds->bytespersample;
-
-       if (ds->addr == 0 && ds->len == 0xffffffff) {
-           addrs = addr = ds->offset;
-       } else {
-           addr = ds->addr;
-           addr += dc->srcplayoffset * chbytesin;
-           addrs = addr;
+    ds = dc->ds;
+    if (ds == NULL) {
+       ds = dc->ds = dc->nextds;
+       dc->srcplaylen = dc->nextsrcplaylen;
+       dc->srcplayoffset = dc->nextsrcplayoffset;
+       dc->nextds = NULL;
+       dc->nextsrcplaylen = 0;
+       dc->nextsrcplayoffset = 0;
+       dc->srcoffset = 0;
+       if (ds != NULL) { // sample started
+           int len;
+           setchannelevent (dsahip, dc);
+           len = dc->srcplaylen;
+           if (len > dstlen)
+               len = dstlen;
+           dc->hsync = calcdelay (dc, len);
+           return;
        }
-       addre = addr + dc->srcplaylen * chbytesin;
-       addr += dc->srcoffset * chbytesin;
+    }
+    if (ds == NULL)
+       goto cempty;
 
-       srclen = dc->srcplaylen - dc->srcoffset;
-       assert (srclen > 0);
-       srclendstbytes = srclen * chbytesout;
+    chbytesin = ds->ch * ds->bytespersample;
+    if (ds->addr == 0 && ds->len == 0xffffffff) {
+        addrs = addr = ds->offset;
+    } else {
+        addr = ds->addr;
+        addr += dc->srcplayoffset * chbytesin;
+        addrs = addr;
+    }
+    addre = addr + dc->srcplaylen * chbytesin;
+    addr += dc->srcoffset * chbytesin;
 
-       if (srclendstbytes > dstlenbytes) {
-           srclendstbytes = dstlenbytes;
-           srclen = srclendstbytes / chbytesout;
-       }
-       if (dstlenbytes > srclendstbytes) {
-           dstlenbytes = srclendstbytes;
-           dstlen = dstlenbytes / chbytesout;
-       }
+    srclen = dc->srcplaylen - dc->srcoffset;
+    assert (srclen > 0);
+    srclendstbytes = srclen * chbytesout;
 
-       assert (dstlen > 0);
+    if (srclendstbytes > dstlenbytes) {
+        srclendstbytes = dstlenbytes;
+        srclen = srclendstbytes / chbytesout;
+    }
+    if (dstlenbytes > srclendstbytes) {
+        dstlenbytes = srclendstbytes;
+        dstlen = dstlenbytes / chbytesout;
+    }
 
-       if (valid_address (addrs, addre - addrs)) {
-           uae_u8 *naddr = get_real_address (addr);
-           uae_u8 *naddre = get_real_address (addre);
-           uae_u8 *naddrs = get_real_address (addrs);
-           copysampledata (dsahip, dc, ds, &naddr, naddre, naddrs, dstbuf, dstlen);
-           dc->srcoffset = (naddr - naddrs) / chbytesin;
-           if (dc->srcoffset == dc->srcplayoffset) {
+    waitlen = dstlen;
+
+    assert (dstlen > 0);
+
+    if (valid_address (addrs, addre - addrs)) {
+        uae_u8 *naddr = get_real_address (addr);
+        uae_u8 *naddre = get_real_address (addre);
+        uae_u8 *naddrs = get_real_address (addrs);
+        copysampledata (dsahip, dc, ds, &naddr, naddre, naddrs, dstbuf, dstlen);
+        dc->srcoffset = (naddr - naddrs) / chbytesin;
+        if (dc->srcoffset == 0) {
+           // looping or next sample
+           if (dc->nextsrcplaylen < 0) { // stop sample
+               int off = dstlenbytes;
+               dc->nextsrcplaylen = 0;
+               dc->nextds = NULL;
                setchannelevent (dsahip, dc);
+               dstlenbytes = dc->mixlength - off - dc->buffercursor;
+               dstlen = dstlenbytes / chbytesout;
+               memset (dstbuf + off, 0, dstlenbytes);
+               goto empty;
+           }
+           if (dc->nextds) {
+               dc->ds = NULL;
+               dc->buffercursor += dstlenbytes;
+               dc->hsync = 0;
+               return;
            }
-           ok = 1;
-       }
-    }
-    if (!ok) {
-       memset (dstbuf, 0, dstlenbytes);
-       if (dc->playing < 0)
            setchannelevent (dsahip, dc);
-       dc->playing = 0;
+
+       }
+
+    } else {
+       goto cempty;
     }
-    dc->hsync += 10;
+
+    dc->hsync = calcdelay (dc, waitlen);
     dc->buffercursor += dstlenbytes;
+    checkvolfreq (dsahip, dc);
     //write_log ("%d ", dstlen / (dsahip->chout * dsahip->bytespersampleout));
+    return;
+
+cempty:
+    memset (dstbuf, 0, dstlenbytes);
+empty:
+    dc->ds = NULL;
+    dc->hsync = calcdelay (dc, waitlen);
+    dc->buffercursor += dstlenbytes;
+    checkvolfreq (dsahip, dc);
 }
 
 void ahi_hsync (void)
@@ -1236,13 +1344,15 @@ void ahi_hsync (void)
     uae_u32 pbase = get_long (dsahip->audioctrl + ahiac_DriverData);
     int i, flags;
 
-    if (ahi_paused || dsahip->enabledisable)
+    if (ahi_paused)
        return;
-    cnt--;
+    if (cnt >= 0)
+       cnt--;
     if (cnt < 0) {
-       if (dsahip->dsrecording)
+       if (dsahip->dsrecording && dsahip->enabledisable == 0) {
            dorecord (dsahip);
-       cnt = 100;
+           cnt = 100;
+       }
     }
     if (!dsahip->playing)
        return;
@@ -1261,14 +1371,17 @@ void ahi_hsync (void)
            dc->channelsignal = 0;
            flags &= ~(1 << dc->num);
        }
-       if (dc->buffercursor < dsahip->mixlength)
+       if (dsahip->enabledisable)
+           continue;
+       if (dc->buffercursor < dc->mixlength)
            copysample (dsahip, dc);
-       assert (dc->buffercursor <= dsahip->mixlength);
-       if (dc->buffercursor == dsahip->mixlength) {
+       assert (dc->buffercursor <= dc->mixlength);
+       if (dc->buffercursor == dc->mixlength) {
            if (ds_copysample (dsahip, dc)) {
+               getmixbufferlen (dsahip, dc);
                dc->buffercursor = 0;
            } else {
-               dc->hsync = 10;
+               dc->hsync = 100;
            }
        }
     }
@@ -1337,7 +1450,7 @@ static void ds_play (struct DSAHI *dsahip, struct dschannel *dc)
     hr = IDirectSoundBuffer8_GetCurrentPosition (dc->dsb, &playc, &writec);
     if (FAILED (hr))
        write_log ("AHI: ds_play() IDirectSoundBuffer8_GetCurrentPosition() failed, %s\n", DXError (hr));
-    dc->dscursor = writec + dsahip->mixlength;
+    dc->dscursor = writec + dc->mixlength;
     if (dc->dscursor >= dsahip->channellength)
        dc->dscursor -= dsahip->channellength;
     if (ahi_debug)
@@ -1427,29 +1540,6 @@ static uae_u32 AHIsub_AllocAudio (TrapContext *ctx)
     while ((tag = gettag (&tags, &data))) {
        if (ahi_debug)
            write_log ("- TAG %08x=%d: %08x=%u\n", tag, tag & 0x7fff, data, data);
-#if 0
-       switch (tag)
-       {
-           case AHIA_Sounds:
-               dsahip->sounds = data;
-           break;
-           case AHIA_Channels:
-               dsahip->channels = data;
-           break;
-           case AHIA_SoundFunc:
-               dsahip->soundfunc = data;
-           break;
-           case AHIA_PlayerFunc:
-               dsahip->playerfunc = data;
-           break;
-           case AHIA_MinPlayerFreq:
-               dsahip->minplayerfreq = data;
-           break;
-           case AHIA_MaxPlayerFreq:
-               dsahip->maxplayerfreq = data;
-           break;
-       }
-#endif
     }
     if (dsahip->sounds < 0 || dsahip->sounds > 1000) {
        ds_free (dsahip);
@@ -1464,7 +1554,6 @@ static uae_u32 AHIsub_AllocAudio (TrapContext *ctx)
     }
     for (i = 0; i < dsahip->sounds; i++) {
        struct dssample *ds = &dsahip->sample[i];
-       ds->channel = -1;
        ds->num = -1;
     }
     ahi_active = 1;
@@ -1649,19 +1738,16 @@ static uae_u32 AHIsub_Start (TrapContext *ctx)
     if (ahi_debug)
        write_log ("AHI: Play(%08x,%08x)\n",
            flags, audioctrl);
-    if (flags & AHISF_PLAY)
+    if ((flags & AHISF_PLAY) && !dsahip->playing) {
        dsahip->playing = 1;
-    if (flags & AHISF_RECORD)
-       dsahip->recording = 1;
-    if (dsahip->playing) {
        setevent (dsahip);
        for (i = 0; i < dsahip->channels; i++) {
            struct dschannel *dc = &dsahip->channel[i];
-           dc->playing = 1;
            ds_play (dsahip, dc);
        }
     }
-    if (dsahip->recording) {
+    if ((flags & AHISF_RECORD) && !dsahip->recording) {
+       dsahip->recording = 1;
        ds_init_record (dsahip);
        ds_record (dsahip, 1);
     }
@@ -1678,18 +1764,15 @@ static uae_u32 AHIsub_Stop (TrapContext *ctx)
     if (ahi_debug)
        write_log ("AHI: Stop(%08x,%08x)\n",
            flags, audioctrl);
-    if (flags & AHISF_PLAY)
+    if ((flags & AHISF_PLAY) && dsahip->playing) {
        dsahip->playing = 0;
-    if (flags & AHISF_RECORD)
-       dsahip->recording = 0;
-    if (!dsahip->playing) {
        for (i = 0; i < dsahip->channels; i++) {
            struct dschannel *dc = &dsahip->channel[i];
-           dc->playing = 0;
            ds_stop (dsahip, dc);
        }
     }
-    if (!dsahip->recording) {
+    if ((flags & AHISF_RECORD) && dsahip->recording) {
+       dsahip->recording = 0;
        ds_record (dsahip, 0);
        ds_free_record (dsahip);
     }
@@ -1720,8 +1803,13 @@ static uae_u32 AHIsub_SetVol (TrapContext *ctx)
     if (ahi_debug)
        write_log ("AHI: SetVol(%d,%d,%d,%08x,%08x)\n",
            channel, volume, pan, audioctrl, flags);
-    if (dc)
-       ds_setvolume (dsahip, dc, volume, pan);
+    if (dc) {
+       dc->nextvolume = volume;
+       dc->nextpanning = pan;
+       if (flags & AHISF_IMM) {
+           ds_setvolume (dsahip, dc);
+       }
+    }
     return 0;
 }
 
@@ -1738,8 +1826,11 @@ static uae_u32 AHIsub_SetFreq (TrapContext *ctx)
        write_log ("AHI: SetFreq(%d,%d,%08x,%08x)\n",
            channel, frequency, audioctrl, flags);
     if (dc) {
-       ds_setfreq (dsahip, dc, frequency);
-       ds_play (dsahip, dc);
+       dc->nextfrequency = frequency;
+       if (flags & AHISF_IMM) {
+           ds_setfreq (dsahip, dc);
+           ds_play (dsahip, dc);
+       }
     }
     return 0;
 }
@@ -1762,26 +1853,33 @@ static uae_u32 AHIsub_SetSound (TrapContext *ctx)
     if (dc == NULL)
        return 0;
     if (sound == 0xffff) {
-        if (dc->playing)
-           dc->playing = -1;
-    } else if (ds) {
-       int wasplaying;
-       ds_allocchannel (dsahip, dc);
-       dc->backwards = length < 0;
-       length = abs (length);
-       if (length == 0)
-           length = ds->len;
-       ds->channel = channel;
-       dc->ds = ds;
-       dc->srcplaylen = length;
-       dc->srcplayoffset = offset;
-       dc->srcoffset = 0;
-       ds_setvolume (dsahip, dc, dc->volume, dc->panning);
-       ds_setfreq (dsahip, dc, dc->frequency);
-       wasplaying = dc->dsplaying;
-       dc->playing = 1;
-        ds_play (dsahip, dc);
+       if (flags & AHISF_IMM) {
+           dc->ds = NULL;
+           dc->nextds = NULL;
+       }
+       dc->nextsrcplaylen = -1;
+       return 0;
+    }
+    ds_allocchannel (dsahip, dc);
+    dc->backwards = length < 0;
+    length = abs (length);
+    if (length == 0)
+        length = ds->len;
+    if (length > ds->len)
+       length = ds->len;
+    dc->nextds = ds;
+    dc->nextsrcplaylen = length;
+    dc->nextsrcplayoffset = offset;
+    if (flags & AHISF_IMM)
+       dc->ds = NULL;
+    if (dc->ds == NULL) {
+       dc->buffercursor = 0;
+       dc->hsync = 0;
+       getmixbufferlen (dsahip, dc);
     }
+    ds_setfreq (dsahip, dc);
+    ds_setvolume (dsahip, dc);
+    ds_play (dsahip, dc);
     return 0;
 }
 
@@ -1789,11 +1887,27 @@ static uae_u32 AHIsub_SetEffect (TrapContext *ctx)
 {
     uae_u32 effect = m68k_areg (&ctx->regs, 0);
     uae_u32 audioctrl = m68k_areg (&ctx->regs, 2);
+    uae_u32 effectype = get_long (effect);
+    uae_u32 puaebase = get_long (audioctrl + ahiac_DriverData);
     struct DSAHI *dsahip = GETAHI;
 
     if (ahi_debug)
-       write_log ("AHI: SetEffect(%08x,%08x)\n", effect, audioctrl);
-    return 0;
+       write_log ("AHI: SetEffect(%08x (%08x),%08x)\n", effect, effectype, audioctrl);
+    switch (effectype)
+    {
+       case AHIET_CHANNELINFO:
+       put_long (puaebase + pub_ChannelInfo, effect);
+       break;
+       case AHIET_CHANNELINFO | AHIET_CANCEL:
+       put_long (puaebase + pub_ChannelInfo, 0);
+       break;
+       case AHIET_MASTERVOLUME:
+       case AHIET_MASTERVOLUME | AHIET_CANCEL:
+       break;
+       default:
+       return AHIE_UNKNOWN;
+    }
+    return AHIE_OK;
 }
 
 static uae_u32 AHIsub_LoadSound (TrapContext *ctx)
@@ -1862,9 +1976,6 @@ static uae_u32 AHIsub_LoadSound (TrapContext *ctx)
        default:
        return 0;
     }
-    if (ahi_debug)
-       write_log ("AHI: AllocBuffer ch=%d,bps=%d\n", ch, bps);
-
     ds->bitspersample = bps;
     ds->ch = ch;
     ds->bytespersample = bps / 8;
@@ -1873,7 +1984,6 @@ static uae_u32 AHIsub_LoadSound (TrapContext *ctx)
 
 static uae_u32 AHIsub_UnloadSound (TrapContext *ctx)
 {
-    int i;
     uae_u16 sound = m68k_dreg (&ctx->regs, 0);
     uae_u32 audioctrl = m68k_areg (&ctx->regs, 2);
     struct DSAHI *dsahip = GETAHI;
@@ -1882,15 +1992,6 @@ static uae_u32 AHIsub_UnloadSound (TrapContext *ctx)
     if (ahi_debug)
        write_log ("AHI: UnloadSound(%d,%08x)\n",
            sound, audioctrl);
-    if (0 && ds) {
-       for (i = 0; i < dsahip->channels; i++) {
-           struct dschannel *dc = &dsahip->channel[i];
-           if (dc->ds == ds) {
-               dc->playing = 0;
-               dc->ds = NULL;
-           }
-       }
-    }
     return AHIE_OK;
 }
 
index 37f8237fd8823a40e99059154e823e7d686940d9..730a5b2f23d413003c85ef5beee19242d2740b3b 100755 (executable)
@@ -10,6 +10,7 @@
 
 #define DI_DEBUG
 //#define DI_DEBUG2
+//#define DI_DEBUG_RAWINPUT
 #define IGNOREEVERYTHING 0
 
 #include "sysconfig.h"
@@ -271,13 +272,15 @@ static int keyhack (int scancode, int pressed, int num)
 #endif
 
      //check ALT-F4
-    if (pressed && !di_keycodes[num][DIK_F4] && scancode == DIK_F4 && di_keycodes[num][DIK_LALT] && !currprefs.win32_ctrl_F11_is_quit) {
+    if (pressed && !di_keycodes[num][DIK_F4] && scancode == DIK_F4) {
+       if (di_keycodes[num][DIK_LALT] && !currprefs.win32_ctrl_F11_is_quit) {
 #ifdef RETROPLATFORM
-       if (rp_close ())
-           return -1;
+           if (rp_close ())
+               return -1;
 #endif
-       uae_quit ();
-       return -1;
+           uae_quit ();
+           return -1;
+       }
     }
 #ifdef SINGLEFILE
     if (pressed && scancode == DIK_ESCAPE) {
@@ -498,6 +501,45 @@ static void rawinputfriendlynames (void)
     }
 }
 
+static char *rawkeyboardlabels[] =
+{
+    "ESCAPE",
+    "1","2","3","4","5","6","7","8","9","0",
+    "MINUS","EQUALS","BACK","TAB",
+    "Q","W","E","R","T","Y","U","I","O","P",
+    "LBRACKET","RBRACKET","RETURN","LCONTROL",
+    "A","S","D","F","G","H","J","K","L",
+    "SEMICOLON","APOSTROPHE","GRAVE","LSHIFT","BACKSLASH",
+    "Z","X","C","V","B","N","M",
+    "COMMA","PERIOD","SLASH","RSHIFT","MULTIPLY","LMENU","SPACE","CAPITAL",
+    "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10",
+    "NULOCK","SCROLL","NUMPAD7","NUMPAD8","NUMPAD9","SUBTRACT",
+    "NUMPAD4","NUMPAD5","NUMPAD6","ADD","NUMPAD1","NUMPAD2","NUMPAD3","NUMPAD0",
+    "DECIMAL",NULL,NULL,"OEM_102","F11","F12",
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    NULL,NULL,
+    "NUMPADEQUALS",NULL,NULL,
+    "PREVTRACK",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    "NEXTTRACK",NULL,NULL,"NUMPADENTER","RCONTROL",NULL,NULL,
+    "MUTE","CALCULATOR","PLAYPAUSE",NULL,"MEDIASTOP",
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    "VOLUMEDOWN",NULL,"VOLUMEUP",NULL,"WEBHOME","NUMPADCOMMA",NULL,
+    "DIVIDE",NULL,"SYSRQ","RMENU",
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    "PAUSE",NULL,"HOME","UP","PRIOR",NULL,"LEFT",NULL,"RIGHT",NULL,"END",
+    "DOWN","NEXT","INSERT","DELETE",
+    NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+    "LWIN","RWIN","APPS","POWER","SLEEP",
+    NULL,NULL,NULL,
+    "WAKE",NULL,"WEBSEARCH","WEBFAVORITES","WEBREFRESH","WEBSTOP",
+    "WEBFORWARD","WEBBACK","MYCOMPUTER","MAIL","MEDIASELECT",
+    ""
+};
+
 static int initialize_rawinput (void)
 {
     RAWINPUTDEVICELIST *ridl = 0;
@@ -623,6 +665,7 @@ static int initialize_rawinput (void)
                continue;
            if (pGetRawInputDeviceInfo (h, RIDI_DEVICEINFO, buf, &vtmp) == -1)
                continue;
+
            if (type == RIM_TYPEMOUSE) {
                PRID_DEVICE_INFO_MOUSE rdim = &rdi->mouse;
                write_log ("id=%d buttons=%d hw=%d rate=%d\n",
@@ -653,11 +696,30 @@ static int initialize_rawinput (void)
                }
                did->priority = -1;
            } else {
+               int j;
                PRID_DEVICE_INFO_KEYBOARD rdik = &rdi->keyboard;
                write_log ("type=%d sub=%d mode=%d fkeys=%d indicators=%d tkeys=%d",
                    rdik->dwType, rdik->dwSubType, rdik->dwKeyboardMode,
                    rdik->dwNumberOfFunctionKeys, rdik->dwNumberOfIndicators, rdik->dwNumberOfKeysTotal);
-
+               j = 0;
+               for (i = 0; i < 254; i++) {
+                   char tmp[100];
+                   tmp[0] = 0;
+                   if (rawkeyboardlabels[j] != NULL) {
+                       if (rawkeyboardlabels[j][0]) {
+                           strcpy (tmp, rawkeyboardlabels[j]);
+                           j++;
+                       }
+                   } else {
+                       j++;
+                   }
+                   if (!tmp[0])
+                       sprintf (tmp, "Key %02X", i + 1);
+                   did->buttonname[i] = my_strdup (tmp);
+                   did->buttonmappings[i] = i + 1;
+                   did->buttonsort[i] = i + 1;
+                   did->buttons++;
+               }
            }
        }
     }
@@ -726,6 +788,7 @@ static void initialize_windowsmouse (void)
     }
 }
 
+static uae_u8 rawkeystate[256];
 static void handle_rawinput_2 (RAWINPUT *raw)
 {
     int i, num;
@@ -739,7 +802,7 @@ static void handle_rawinput_2 (RAWINPUT *raw)
            if (!did->disabled && did->rawinput == raw->header.hDevice)
                break;
        }
-#ifdef DI_DEBUG2
+#ifdef DI_DEBUG_RAWINPUT
        write_log ("HANDLE=%08x %04x %04x %04x %08x %3d %3d %08x M=%d\n",
            raw->header.hDevice,
            rm->usFlags,
@@ -793,7 +856,7 @@ static void handle_rawinput_2 (RAWINPUT *raw)
        uae_u8 scancode = (rk->MakeCode & 0x7f) | ((rk->Flags & RI_KEY_E0) ? 0x80 : 0x00);
        int pressed = (rk->Flags & RI_KEY_BREAK) ? 0 : 1;
 
-#ifdef DI_DEBUG2
+#ifdef DI_DEBUG_RAWINPUT
        write_log ("HANDLE=%x CODE=%x Flags=%x VK=%x MSG=%x EXTRA=%x\n",
            raw->header.hDevice,
            raw->data.keyboard.MakeCode,
@@ -802,30 +865,36 @@ static void handle_rawinput_2 (RAWINPUT *raw)
            raw->data.keyboard.Message,
            raw->data.keyboard.ExtraInformation);
 #endif
-       if (scancode == DIK_F12 && pressed) {
-           inputdevice_add_inputcode (AKS_ENTERGUI, 1);
+       if (rk->MakeCode == KEYBOARD_OVERRUN_MAKE_CODE)
            return;
-       }
-
        if (scancode == 0xaa)
            return;
+
+#if 0
        for (num = 0; num < num_keyboard; num++) {
            did = &di_keyboard[num];
-           if (!did->disabled && did->acquired && did->rawinput == raw->header.hDevice) {
-               if (di_keycodes[num][scancode] == pressed)
-                   return;
-               di_keycodes[num][scancode] = pressed;
+           if (!did->disabled && (did->acquired || rawkeyboard > 0) && did->rawinput == raw->header.hDevice)
                break;
+       }
+       if (num == num_keyboard) {
+           if (scancode == DIK_F12 && pressed) {
+               inputdevice_add_inputcode (AKS_ENTERGUI, 1);
+               return;
            }
+           return;
        }
-       if (num == num_keyboard)
+#endif
+       num = 0;
+       if (rawkeystate[scancode] == pressed)
            return;
+       rawkeystate[scancode] = pressed;
        if (istest) {
            inputdevice_do_keyboard (scancode, pressed);
        } else {
            scancode = keyhack (scancode, pressed, num);
            if (scancode < 0)
                return;
+           di_keycodes[num][scancode] = pressed;
            if (stopoutput == 0)
                my_kbd_handler (num, scancode, pressed);
        }
@@ -1186,8 +1255,10 @@ static int di_do_init (void)
        write_log ("DirectInput enumeration..\n");
        IDirectInput8_EnumDevices (g_lpdi, DI8DEVCLASS_ALL, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
     } else {
-       write_log ("DirectInput enumeration.. Keyboards..\n");
-       IDirectInput8_EnumDevices (g_lpdi, DI8DEVCLASS_KEYBOARD, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
+       if (rawkeyboard <= 0) {
+           write_log ("DirectInput enumeration.. Keyboards..\n");
+           IDirectInput8_EnumDevices (g_lpdi, DI8DEVCLASS_KEYBOARD, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
+       }
        write_log ("DirectInput enumeration.. Pointing devices..\n");
        IDirectInput8_EnumDevices (g_lpdi, DI8DEVCLASS_POINTER, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
        write_log ("DirectInput enumeration.. Game controllers..\n");
index ad2bde33fe75ea80c2515a41e419a726cc97b463..6fc0a2e574091b99b990c2768602b116918d67b2 100755 (executable)
@@ -439,6 +439,8 @@ HRESULT DirectDraw_SetDisplayMode (int width, int height, int bits, int freq)
     ddrval = IDirectDraw7_SetDisplayMode (dxdata.maindd, width, height, bits, freq, 0);
     if (FAILED (ddrval)) {
        write_log ("IDirectDraw7_SetDisplayMode: %s\n", DXError (ddrval));
+       IDirectDraw7_RestoreDisplayMode (dxdata.maindd);
+       dxdata.fsmodeset = 0;
     } else {
        dxdata.fsmodeset = -1;
        dxdata.width = width;
@@ -642,7 +644,7 @@ int DirectDraw_IsLocked (void)
 {
     return dxdata.lockcnt;
 }
-DWORD DirectDraw_GetPixelFormatBitMask(DirectDraw_Mask_e mask)
+DWORD DirectDraw_GetPixelFormatBitMask (DirectDraw_Mask_e mask)
 {
     DWORD result = 0;
     switch(mask)
index 5bda50f37ab0512eda9bef5d9106a3585e784efd..5935539d9faf8113221cfe0ebb5d769beff678d4 100755 (executable)
@@ -221,10 +221,10 @@ void preinit_shm (void)
         memstatsex.dwLength = sizeof (MEMORYSTATUSEX);
         if (pGlobalMemoryStatusEx(&memstatsex)) {
            totalphys64 = memstatsex.ullTotalPhys;
-           total64 = memstatsex.ullAvailPageFile + memstatsex.ullAvailPhys;
+           total64 = memstatsex.ullAvailPageFile + memstatsex.ullTotalPhys;
        }
     }
-    size64 = total64 - (total64 >> 3);
+    size64 = total64;
     if (maxmem < 0)
        size64 = 0x7f000000;
     else if (maxmem > 0)
diff --git a/od-win32/picasso96_xp_win.c b/od-win32/picasso96_xp_win.c
deleted file mode 100755 (executable)
index ca1017e..0000000
+++ /dev/null
@@ -1,3695 +0,0 @@
-/*
-* UAE - The U*nix Amiga Emulator
-*
-* Picasso96 Support Module
-*
-* Copyright 1997-2001 Brian King <Brian_King@CodePoet.com>
-* Copyright 2000-2001 Bernd Roesch <>
-*
-* Theory of operation:
-* On the Amiga side, a Picasso card consists mainly of a memory area that
-* contains the frame buffer.  On the UAE side, we allocate a block of memory
-* that will hold the frame buffer.  This block is in normal memory, it is
-* never directly on the graphics card. All graphics operations, which are
-* mainly reads and writes into this block and a few basic operations like
-* filling a rectangle, operate on this block of memory.
-* Since the memory is not on the graphics card, some work must be done to
-* synchronize the display with the data in the Picasso frame buffer.  There
-* are various ways to do this. One possibility is to allocate a second
-* buffer of the same size, and perform all write operations twice.  Since
-* we never read from the second buffer, it can actually be placed in video
-* memory.  The X11 driver could be made to use the Picasso frame buffer as
-* the data buffer of an XImage, which could then be XPutImage()d from time
-* to time.  Another possibility is to translate all Picasso accesses into
-* Xlib (or GDI, or whatever your graphics system is) calls.  This possibility
-* is a bit tricky, since there is a risk of generating very many single pixel
-* accesses which may be rather slow.
-*
-* TODO:
-* - we want to add a manual switch to override SetSwitch for hardware banging
-*   programs started from a Picasso workbench.
-*/
-
-#include "sysconfig.h"
-#include "sysdeps.h"
-
-#include "options.h"
-#include "threaddep/thread.h"
-#include "memory.h"
-#include "custom.h"
-#include "events.h"
-#include "newcpu.h"
-#include "xwin.h"
-#include "savestate.h"
-#include "autoconf.h"
-#include "traps.h"
-
-#if defined(PICASSO96)
-
-#include "dxwrap.h"
-#include "picasso96_win.h"
-#include "win32gfx.h"
-
-int p96hack_vpos, p96hack_vpos2, p96refresh_active;
-int have_done_picasso; /* For the JIT compiler */
-static int vsyncgfxwrite = 0;
-static int p96syncrate, vsyncgfxcount;
-static int p96hsync_counter;
-
-#ifdef DEBUG // Change this to _DEBUG for debugging
-#define P96TRACING_ENABLED 1
-#define P96TRACING_LEVEL 1
-#endif
-#define LOCK_UNLOCK_MADNESS //need for 7 times faster linedraw
-#define PIXEL_LOCK    //and scrollable screens
-#define MAXFLUSHPIXEL 3200 //pixel draw in a lock
-static void flushpixels(void);
-static int pixelcount, palette_changed;
-struct pixel32{
-    uaecptr addr;
-    uae_u32 value;
-    int size;
-};
-static struct pixel32 pixelbase[MAXFLUSHPIXEL + 2];
-#ifdef P96TRACING_ENABLED
-#define P96TRACE(x) do { write_log x; } while(0)
-#else
-#define P96TRACE(x)
-#endif
-#define P96TRACEX(x) do { write_log x; } while(0)
-
-#define GetBytesPerPixel(x) GetBytesPerPixel2(x,__FILE__,__LINE__)
-
-#if defined(JIT)
-#define P96_SM_R special_mem |= PIC_READ;
-#define P96_SM_W special_mem |= PIC_WRITE;
-#else
-#define P96_SM_R
-#define P96_SM_W
-#endif
-
-static uae_u32 REGPARAM2 gfxmem_lget (uaecptr) REGPARAM;
-static uae_u32 REGPARAM2 gfxmem_wget (uaecptr) REGPARAM;
-static uae_u32 REGPARAM2 gfxmem_bget (uaecptr) REGPARAM;
-static void REGPARAM2 gfxmem_lput (uaecptr, uae_u32) REGPARAM;
-static void REGPARAM2 gfxmem_wput (uaecptr, uae_u32) REGPARAM;
-static void REGPARAM2 gfxmem_bput (uaecptr, uae_u32) REGPARAM;
-static int REGPARAM2 gfxmem_check (uaecptr addr, uae_u32 size) REGPARAM;
-static uae_u8 *REGPARAM2 gfxmem_xlate (uaecptr addr) REGPARAM;
-
-static uae_u8 all_ones_bitmap, all_zeros_bitmap; /* yuk */
-
-struct picasso96_state_struct picasso96_state;
-struct picasso_vidbuf_description picasso_vidinfo;
-
-/* These are the maximum resolutions... They are filled in by GetSupportedResolutions() */
-/* have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects
-/* data here. */
-static struct ScreenResolution planar = { 320, 240 };
-static struct ScreenResolution chunky = { 640, 480 };
-static struct ScreenResolution hicolour = { 640, 480 };
-static struct ScreenResolution truecolour = { 640, 480 };
-static struct ScreenResolution alphacolour = { 640, 480 };
-
-#include "win32gui.h"
-#include "resource.h"
-#define UAE_RTG_LIBRARY_VERSION 40
-#define UAE_RTG_LIBRARY_REVISION 3993
-static void checkrtglibrary(void)
-{
-    uae_u32 v;
-    static int checked = FALSE;
-
-    if (checked)
-       return;
-    v = get_long (4); // execbase
-    v += 378; // liblist
-    while ((v = get_long (v))) {
-       uae_u32 v2 = get_long (v + 10); // name
-       uae_u8 *p;
-       addrbank *b = &get_mem_bank(v2);
-       if (!b || !b->check (v2, 12))
-           continue;
-       p = b->xlateaddr(v2);
-       if (!memcmp(p, "rtg.library\0", 12)) {
-           uae_u16 ver = get_word (v + 20);
-           uae_u16 rev = get_word (v + 22);
-           if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) {
-               char msg[2000];
-               WIN32GUI_LoadUIString(IDS_OLDRTGLIBRARY, msg, sizeof(msg));
-               gui_message(msg, ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION);
-           } else {
-               write_log ("P96: rtg.library %d.%d detected\n", ver, rev);
-           }
-           checked = TRUE;
-       }
-    }
-}
-
-static uae_u32 p2ctab[256][2];
-static int set_gc_called = 0;
-//fastscreen
-static uaecptr oldscr = 0;
-#ifdef _DEBUG
-static void PICASSO96_Unlock2(char *filename, int linenum)
-#else
-static void PICASSO96_Unlock(void)
-#endif
-{
-#ifdef LOCK_UNLOCK_MADNESS
-#if defined(P96TRACING_ENABLED) && P96TRACING_LEVEL > 1
-    // This format of output lets you double-click and jump to file/line
-    write_log ("%s(%d) : calling P96 UNLOCK with picasso_on=%d\n", filename, linenum, picasso_on);
-#endif
-    if(picasso_on) {
-#ifdef PIXEL_LOCK
-       flushpixels();
-#endif
-       gfx_unlock_picasso ();
-       picasso96_state.HostAddress = NULL;
-    }
-#endif
-}
-
-#ifdef _DEBUG
-static void PICASSO96_Lock2(char *filename, int linenum)
-#else
-static void PICASSO96_Lock(void)
-#endif
-{
-#ifdef LOCK_UNLOCK_MADNESS
-#if defined(P96TRACING_ENABLED) && P96TRACING_LEVEL > 1
-    // This format of output lets you double-click and jump to file/line
-    write_log ( "%s(%d) : calling P96 LOCK with picasso_on=%d\n", filename, linenum, picasso_on );
-#endif
-    if(picasso_on) {
-       picasso96_state.HostAddress = gfx_lock_picasso ();
-    }
-#endif
-}
-
-#ifdef P96TRACING_ENABLED
-/*
-* Debugging dumps
-*/
-static void DumpModeInfoStructure (uaecptr amigamodeinfoptr)
-{
-    write_log ("ModeInfo Structure Dump:\n");
-    write_log ("  Node.ln_Succ  = 0x%x\n", get_long (amigamodeinfoptr));
-    write_log ("  Node.ln_Pred  = 0x%x\n", get_long (amigamodeinfoptr + 4));
-    write_log ("  Node.ln_Type  = 0x%x\n", get_byte (amigamodeinfoptr + 8));
-    write_log ("  Node.ln_Pri   = %d\n", get_byte (amigamodeinfoptr + 9));
-    /*write_log ("  Node.ln_Name  = %s\n", uaememptr->Node.ln_Name); */
-    write_log ("  OpenCount     = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_OpenCount));
-    write_log ("  Active        = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Active));
-    write_log ("  Width         = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_Width));
-    write_log ("  Height        = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_Height));
-    write_log ("  Depth         = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Depth));
-    write_log ("  Flags         = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Flags));
-    write_log ("  HorTotal      = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorTotal));
-    write_log ("  HorBlankSize  = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorBlankSize));
-    write_log ("  HorSyncStart  = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncStart));
-    write_log ("  HorSyncSize   = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSize));
-    write_log ("  HorSyncSkew   = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSkew));
-    write_log ("  HorEnableSkew = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorEnableSkew));
-    write_log ("  VerTotal      = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerTotal));
-    write_log ("  VerBlankSize  = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerBlankSize));
-    write_log ("  VerSyncStart  = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncStart));
-    write_log ("  VerSyncSize   = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncSize));
-    write_log ("  Clock         = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_first_union));
-    write_log ("  ClockDivide   = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_second_union));
-    write_log ("  PixelClock    = %d\n", get_long (amigamodeinfoptr + PSSO_ModeInfo_PixelClock));
-}
-
-static void DumpLibResolutionStructure (uaecptr amigalibresptr)
-{
-    int i;
-    uaecptr amigamodeinfoptr;
-    struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank(amigalibresptr).xlateaddr(amigalibresptr);
-
-    write_log ("LibResolution Structure Dump:\n");
-
-    if (get_long (amigalibresptr + PSSO_LibResolution_DisplayID) == 0xFFFFFFFF) {
-       write_log ("  Finished With LibResolutions...\n");
-    } else {
-       write_log ("  Name      = %s\n", uaememptr->P96ID);
-       write_log ("  DisplayID = 0x%x\n", get_long (amigalibresptr + PSSO_LibResolution_DisplayID));
-       write_log ("  Width     = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Width));
-       write_log ("  Height    = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Height));
-       write_log ("  Flags     = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Flags));
-       for (i = 0; i < MAXMODES; i++) {
-           amigamodeinfoptr = get_long (amigalibresptr + PSSO_LibResolution_Modes + i*4);
-           write_log ("  ModeInfo[%d] = 0x%x\n", i, amigamodeinfoptr);
-           if (amigamodeinfoptr)
-               DumpModeInfoStructure (amigamodeinfoptr);
-       }
-       write_log ("  BoardInfo = 0x%x\n", get_long (amigalibresptr + PSSO_LibResolution_BoardInfo));
-    }
-}
-
-static char binary_byte[9] = { 0,0,0,0,0,0,0,0,0 };
-
-static char *BuildBinaryString (uae_u8 value)
-{
-    int i;
-    for (i = 0; i < 8; i++) {
-       binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.';
-    }
-    return binary_byte;
-}
-
-static void DumpPattern (struct Pattern *patt)
-{
-    uae_u8 *mem;
-    int row, col;
-    for (row = 0; row < (1 << patt->Size); row++) {
-       mem = patt->Memory + row * 2;
-       for (col = 0; col < 2; col++) {
-           write_log ("%s ", BuildBinaryString (*mem++));
-       }
-       write_log ("\n");
-    }
-}
-
-static void DumpTemplate (struct Template *tmp, unsigned long w, unsigned long h)
-{
-    uae_u8 *mem = tmp->Memory;
-    unsigned int row, col, width;
-    width = (w + 7) >> 3;
-    write_log ("xoffset = %d, bpr = %d\n", tmp->XOffset, tmp->BytesPerRow);
-    for (row = 0; row < h; row++) {
-       mem = tmp->Memory + row * tmp->BytesPerRow;
-       for (col = 0; col < width; col++) {
-           write_log ("%s ", BuildBinaryString (*mem++));
-       }
-       write_log ("\n");
-    }
-}
-
-static void DumpLine( struct Line *line )
-{
-    if(line) {
-       write_log ("Line->X = %d\n", line->X);
-       write_log ("Line->Y = %d\n", line->Y);
-       write_log ("Line->Length = %d\n", line->Length);
-       write_log ("Line->dX = %d\n", line->dX);
-       write_log ("Line->dY = %d\n", line->dY);
-       write_log ("Line->sDelta = %d\n", line->sDelta);
-       write_log ("Line->lDelta = %d\n", line->lDelta);
-       write_log ("Line->twoSDminusLD = %d\n", line->twoSDminusLD);
-       write_log ("Line->LinePtrn = %d\n", line->LinePtrn);
-       write_log ("Line->PatternShift = %d\n", line->PatternShift);
-       write_log ("Line->FgPen = 0x%x\n", line->FgPen);
-       write_log ("Line->BgPen = 0x%x\n", line->BgPen);
-       write_log ("Line->Horizontal = %d\n", line->Horizontal);
-       write_log ("Line->DrawMode = %d\n", line->DrawMode);
-       write_log ("Line->Xorigin = %d\n", line->Xorigin);
-       write_log ("Line->Yorigin = %d\n", line->Yorigin);
-    }
-}
-#endif
-
-static void ShowSupportedResolutions (void)
-{
-    int i = 0;
-
-    write_log ("-----------------\n");
-    while (DisplayModes[i].depth >= 0) {
-       write_log ("%s\n", DisplayModes[i].name);
-       i++;
-    }
-    write_log ("-----------------\n");
-}
-
-static uae_u8 GetBytesPerPixel2(uae_u32 RGBfmt, char *file, int line)
-{
-    static BOOL bFailure = FALSE;
-
-    switch (RGBfmt) {
-    case RGBFB_CLUT:
-       return 1;
-
-    case RGBFB_A8R8G8B8:
-    case RGBFB_A8B8G8R8:
-    case RGBFB_R8G8B8A8:
-    case RGBFB_B8G8R8A8:
-       return 4;
-
-    case RGBFB_B8G8R8:
-    case RGBFB_R8G8B8:
-       return 3;
-
-    case RGBFB_R5G5B5:
-    case RGBFB_R5G6B5:
-    case RGBFB_R5G6B5PC:
-    case RGBFB_R5G5B5PC:
-    case RGBFB_B5G6R5PC:
-    case RGBFB_B5G5R5PC:
-       return 2;
-    default:
-       write_log ("ERROR - GetBytesPerPixel() from %s@%d was unsuccessful with 0x%x?!\n", file, line, RGBfmt);
-       if(!bFailure) {
-           bFailure = TRUE;
-           return GetBytesPerPixel(picasso_vidinfo.rgbformat);
-       } else {
-           abort();
-       }
-    }
-    return 0;
-}
-
-/*
-* Amiga <-> native structure conversion functions
-*/
-
-static int CopyRenderInfoStructureA2U (uaecptr amigamemptr, struct RenderInfo *ri)
-{
-    uaecptr memp = get_long (amigamemptr + PSSO_RenderInfo_Memory);
-
-    if (valid_address (memp, PSSO_RenderInfo_sizeof)) {
-       ri->Memory = get_real_address (memp);
-       ri->BytesPerRow = get_word (amigamemptr + PSSO_RenderInfo_BytesPerRow);
-       ri->RGBFormat = get_long (amigamemptr + PSSO_RenderInfo_RGBFormat);
-       return 1;
-    }
-    write_log ("ERROR - Invalid RenderInfo memory area...\n");
-    return 0;
-}
-
-static int CopyPatternStructureA2U (uaecptr amigamemptr, struct Pattern *pattern)
-{
-    uaecptr memp = get_long (amigamemptr + PSSO_Pattern_Memory);
-    if (valid_address (memp, PSSO_Pattern_sizeof)) {
-       pattern->Memory = get_real_address (memp);
-       pattern->XOffset = get_word (amigamemptr + PSSO_Pattern_XOffset);
-       pattern->YOffset = get_word (amigamemptr + PSSO_Pattern_YOffset);
-       pattern->FgPen = get_long (amigamemptr + PSSO_Pattern_FgPen);
-       pattern->BgPen = get_long (amigamemptr + PSSO_Pattern_BgPen);
-       pattern->Size = get_byte (amigamemptr + PSSO_Pattern_Size);
-       pattern->DrawMode = get_byte (amigamemptr + PSSO_Pattern_DrawMode);
-       return 1;
-    }
-    write_log ("ERROR - Invalid Pattern memory area...\n");
-    return 0;
-}
-
-static void CopyColorIndexMappingA2U (uaecptr amigamemptr, struct ColorIndexMapping *cim)
-{
-    int i;
-    cim->ColorMask = get_long (amigamemptr);
-    for (i = 0; i < 256; i++, amigamemptr += 4)
-       cim->Colors[i] = get_long (amigamemptr + 4);
-}
-
-static int CopyBitMapStructureA2U (uaecptr amigamemptr, struct BitMap *bm)
-{
-    int i;
-
-    bm->BytesPerRow = get_word (amigamemptr + PSSO_BitMap_BytesPerRow);
-    bm->Rows = get_word (amigamemptr + PSSO_BitMap_Rows);
-    bm->Flags = get_byte (amigamemptr + PSSO_BitMap_Flags);
-    bm->Depth = get_byte (amigamemptr + PSSO_BitMap_Depth);
-
-    /* ARGH - why is THIS happening? */
-    if(bm->Depth > 8)
-       bm->Depth = 8;
-
-    for (i = 0; i < bm->Depth; i++) {
-       uaecptr plane = get_long (amigamemptr + PSSO_BitMap_Planes + i * 4);
-       switch (plane) {
-       case 0:
-           bm->Planes[i] = &all_zeros_bitmap;
-           break;
-       case 0xFFFFFFFF:
-           bm->Planes[i] = &all_ones_bitmap;
-           break;
-       default:
-           if (valid_address (plane, bm->BytesPerRow * bm->Rows))
-               bm->Planes[i] = get_real_address (plane);
-           else
-               return 0;
-           break;
-       }
-    }
-    return 1;
-}
-
-static int CopyTemplateStructureA2U (uaecptr amigamemptr, struct Template *tmpl)
-{
-    uaecptr memp = get_long (amigamemptr + PSSO_Template_Memory);
-
-    if (valid_address (memp, sizeof(struct Template))) {
-       tmpl->Memory = get_real_address (memp);
-       tmpl->BytesPerRow = get_word (amigamemptr + PSSO_Template_BytesPerRow);
-       tmpl->XOffset = get_byte (amigamemptr + PSSO_Template_XOffset);
-       tmpl->DrawMode = get_byte (amigamemptr + PSSO_Template_DrawMode);
-       tmpl->FgPen = get_long (amigamemptr + PSSO_Template_FgPen);
-       tmpl->BgPen = get_long (amigamemptr + PSSO_Template_BgPen);
-       return 1;
-    }
-    write_log ("ERROR - Invalid Template memory area...\n");
-    return 0;
-}
-
-static int CopyLineStructureA2U(uaecptr amigamemptr, struct Line *line)
-{
-    if(valid_address(amigamemptr, sizeof(struct Line))) {
-       line->X = get_word (amigamemptr + PSSO_Line_X);
-       line->Y = get_word (amigamemptr + PSSO_Line_Y);
-       line->Length = get_word (amigamemptr + PSSO_Line_Length);
-       line->dX = get_word (amigamemptr + PSSO_Line_dX);
-       line->dY = get_word (amigamemptr + PSSO_Line_dY);
-       line->lDelta = get_word (amigamemptr + PSSO_Line_lDelta);
-       line->sDelta = get_word (amigamemptr + PSSO_Line_sDelta);
-       line->twoSDminusLD = get_word (amigamemptr + PSSO_Line_twoSDminusLD);
-       line->LinePtrn = get_word (amigamemptr + PSSO_Line_LinePtrn);
-       line->PatternShift = get_word (amigamemptr + PSSO_Line_PatternShift);
-       line->FgPen = get_long (amigamemptr + PSSO_Line_FgPen);
-       line->BgPen = get_long (amigamemptr + PSSO_Line_BgPen);
-       line->Horizontal = get_word (amigamemptr + PSSO_Line_Horizontal);
-       line->DrawMode = get_byte (amigamemptr + PSSO_Line_DrawMode);
-       line->Xorigin = get_word (amigamemptr + PSSO_Line_Xorigin);
-       line->Yorigin = get_word (amigamemptr + PSSO_Line_Yorigin);
-       return 1;
-    }
-    write_log ("ERROR - Invalid Line structure...\n");
-    return 0;
-}
-
-static void CopyLibResolutionStructureU2A (struct LibResolution *libres, uaecptr amigamemptr)
-{
-    char *uaememptr = 0;
-    int i;
-
-    uaememptr = gfxmem_xlate (amigamemptr); /* I know that amigamemptr is inside my gfxmem chunk, so I can just do the xlate() */
-    memset (uaememptr, 0, PSSO_LibResolution_sizeof); /* zero out our LibResolution structure */
-    strcpy (uaememptr + PSSO_LibResolution_P96ID, libres->P96ID);
-    put_long (amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID);
-    put_word (amigamemptr + PSSO_LibResolution_Width, libres->Width);
-    put_word (amigamemptr + PSSO_LibResolution_Height, libres->Height);
-    put_word (amigamemptr + PSSO_LibResolution_Flags, libres->Flags);
-    for (i = 0; i < MAXMODES; i++)
-       put_long (amigamemptr + PSSO_LibResolution_Modes + i * 4, libres->Modes[i]);
-#if 0
-    put_long (amigamemptr, libres->Node.ln_Succ);
-    put_long (amigamemptr + 4, libres->Node.ln_Pred);
-    put_byte (amigamemptr + 8, libres->Node.ln_Type);
-    put_byte (amigamemptr + 9, libres->Node.ln_Pri);
-#endif
-    put_long (amigamemptr + 10, amigamemptr + PSSO_LibResolution_P96ID);
-    put_long (amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo);
-}
-
-/* list is Amiga address of list, in correct endian format for UAE
-* node is Amiga address of node, in correct endian format for UAE */
-static void AmigaListAddTail (uaecptr l, uaecptr n)
-{
-    put_long (n + 0, l + 4); // n->ln_Succ = (struct Node *)&l->lh_Tail;
-    put_long (n + 4, get_long (l + 8)); // n->ln_Pred = l->lh_TailPred;
-    put_long (get_long (l + 8) + 0, n); // l->lh_TailPred->ln_Succ = n;
-    put_long (l + 8, n); // l->lh_TailPred = n;
-}
-
-/*
-* Functions to perform an action on the real screen
-*/
-
-/*
-* Fill a rectangle on the screen.  src points to the start of a line of the
-* filled rectangle in the frame buffer; it can be used as a memcpy source if
-* there is no OS specific function to fill the rectangle.
-*/
-static void do_fillrect(uae_u8 *src, unsigned int x, unsigned int y, unsigned int width, unsigned int height, uae_u32 pen, int Bpp, RGBFTYPE rgbtype)
-{
-    uae_u8 *dst;
-    int orig_width = width;
-    int orig_height = height;
-
-    /* Try OS specific fillrect function here; and return if successful.  Make sure we adjust for
-     * the pen values if we're doing 8-bit display-emulation on a 16-bit or higher screen. */
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-
-    if(picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) {
-       if(DX_Fill(x, y, width, height, pen, rgbtype))
-           return;
-    } else {
-       if(DX_Fill(x, y, width, height, picasso_vidinfo.clut[src[0]], rgbtype))
-          return;
-    }
-
-    P96TRACE(("P96_WARNING: do_fillrect() using fall-back routine!\n"));
-
-    if(y + height > picasso_vidinfo.height)
-       height = picasso_vidinfo.height - y;
-    if(x + width > picasso_vidinfo.width)
-       width = picasso_vidinfo.width - x;
-
-    if (! picasso_vidinfo.extra_mem)
-       return;
-
-#ifdef LOCK_UNLOCK_MADNESS
-    PICASSO96_Lock();
-    dst = picasso96_state.HostAddress;
-#else
-    dst = gfx_lock_picasso ();
-#endif
-    if (!dst)
-       goto out;
-
-    width *= Bpp;
-    dst += y * picasso_vidinfo.rowbytes + x * picasso_vidinfo.pixbytes;
-    if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat)
-    {
-       if(Bpp == 1)
-       {
-           while (height-- > 0)
-           {
-               memset(dst, pen, width);
-               dst += picasso_vidinfo.rowbytes;
-           }
-       }
-       else
-       {
-           while (height-- > 0)
-           {
-               memcpy (dst, src, width);
-               dst += picasso_vidinfo.rowbytes;
-           }
-       }
-    }
-    else
-    {
-       int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat);
-       if (picasso96_state.RGBFormat != RGBFB_CHUNKY)
-       {
-           write_log ("ERROR - do_fillrect() calling abort 1!\n");
-           abort ();
-       }
-
-       while (height-- > 0)
-       {
-           unsigned int i;
-           switch (psiz)
-           {
-           case 2:
-               for (i = 0; i < width; i++)
-                   *((uae_u16 *)dst + i) = picasso_vidinfo.clut[src[i]];
-               break;
-           case 4:
-               for (i = 0; i < width; i++)
-                   *((uae_u32 *)dst + i) = picasso_vidinfo.clut[src[i]];
-               break;
-           default:
-               write_log ("ERROR - do_fillrect() calling abort 2!\n");
-               abort ();
-               break;
-           }
-           dst += picasso_vidinfo.rowbytes;
-       }
-    }
-out:;
-#ifndef        LOCK_UNLOCK_MADNESS
-    gfx_unlock_picasso ();
-#else
-    PICASSO96_Unlock();
-#endif
-    DX_Invalidate (x, y, orig_width, orig_height);
-}
-
-/*
-* This routine modifies the real screen buffer after a blit has been
-* performed in the save area. If can_do_blit is nonzero, the blit can
-* be performed within the real screen buffer; otherwise, this routine
-* must do it by hand using the data in the frame-buffer, calculated using
-* the RenderInfo data and our coordinates.
-*/
-static void do_blit(struct RenderInfo *ri, int Bpp,
-                   unsigned int srcx, unsigned int srcy,
-                   unsigned int dstx, unsigned int dsty,
-                   unsigned int width, unsigned int height,
-                   BLIT_OPCODE opcode, int can_do_blit)
-{
-    uae_u8 *dstp, *srcp;
-    int orig_width, orig_height;
-
-    if(picasso96_state.BigAssBitmap && can_do_blit) {
-       srcx = dstx;
-       srcy = dsty;
-       can_do_blit = 0;
-    } //hack to use cpu rotines for scrolling in big Screens
-    if (picasso96_state.XOffset < 0)
-       can_do_blit = 0;
-
-    dstx = dstx - picasso96_state.XOffset;
-    dsty = dsty - picasso96_state.YOffset;
-    if((int)dstx <= 0) {
-       srcx = srcx - dstx;
-       dstx = 0;
-    }
-    if((int)dsty <= 0) {
-       srcy = srcy - dsty;
-       dsty = 0;
-    }
-
-#ifdef LOCK_UNLOCK_MADNESS
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#endif
-    /* Is our x/y origin on-screen? */
-    if(dsty >= picasso_vidinfo.height)
-       return;
-    if(dstx >= picasso_vidinfo.width)
-       return;
-
-    /* Is our area in-range? */
-    if(dsty + height >= picasso_vidinfo.height)
-       height = picasso_vidinfo.height - dsty;
-    if(dstx + width >= picasso_vidinfo.width)
-       width = picasso_vidinfo.width - dstx;
-
-    orig_height = height;
-    orig_width = width;
-
-    if (can_do_blit)  {
-       //
-       // Call OS blitting function that can do it in video memory.
-       // Should return if it was successful
-       //
-       if(DX_Blit(srcx, srcy, dstx, dsty, width, height, opcode))
-           return;
-       srcx = dstx;
-       srcy = dsty;
-    }
-    if (opcode != BLIT_SRC) {
-       write_log ("do_blit() opcode = %d!\n", opcode);
-       return;
-    }
-
-#ifdef LOCK_UNLOCK_MADNESS
-    PICASSO96_Lock();
-#endif
-
-    srcp = ri->Memory + srcx * Bpp + srcy * ri->BytesPerRow;
-
-    if (! picasso_vidinfo.extra_mem)
-    {
-    #ifdef LOCK_UNLOCK_MADNESS
-       goto out;
-    #else
-       return;
-    #endif
-    }
-
-#ifdef LOCK_UNLOCK_MADNESS
-    dstp = picasso96_state.HostAddress;
-#else
-    dstp = gfx_lock_picasso ();
-#endif
-    if (dstp == 0) {
-       write_log ("WARNING: do_blit() couldn't lock\n");
-       goto out;
-    }
-
-    /* The areas can't overlap: the source is always in the Picasso frame buffer,
-    * and the destination is a different buffer owned by the graphics code.  */
-    dstp += dsty * picasso_vidinfo.rowbytes + dstx * picasso_vidinfo.pixbytes;
-    P96TRACE(("do_blit with srcp %p, dstp %p, dst_rowbytes %d, srcx %d, srcy %d, dstx %d, dsty %d, w %d, h %d, dst_pixbytes %d\n",
-       srcp, dstp, picasso_vidinfo.rowbytes, srcx, srcy, dstx, dsty, width, height, picasso_vidinfo.pixbytes));
-    P96TRACE(("gfxmem is at %p\n", gfxmemory));
-
-    if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat)
-    {
-       P96TRACE(("do_blit type-a\n"));
-       width *= Bpp;
-       while (height-- > 0)
-       {
-           memcpy (dstp, srcp, width);
-           srcp += ri->BytesPerRow;
-           dstp += picasso_vidinfo.rowbytes;
-
-       }
-    }
-    else
-    {
-       int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat);
-       P96TRACE(("do_blit type-b\n"));
-       if (picasso96_state.RGBFormat != RGBFB_CHUNKY)
-       {
-           write_log ("ERROR: do_blit() calling abort 1!\n");
-           abort ();
-       }
-       while (height-- > 0)
-       {
-           unsigned int i;
-           switch (psiz)
-           {
-           case 2:
-               for (i = 0; i < width; i++)
-                   *((uae_u16 *)dstp + i) = picasso_vidinfo.clut[srcp[i]];
-               break;
-           case 4:
-               for (i = 0; i < width; i++)
-                   *((uae_u32 *)dstp + i) = picasso_vidinfo.clut[srcp[i]];
-               break;
-           default:
-               write_log ("ERROR - do_blit() calling abort 2!\n");
-               abort ();
-               break;
-           }
-           srcp += ri->BytesPerRow;
-           dstp += picasso_vidinfo.rowbytes;
-       }
-    }
-    out:;
-#ifndef LOCK_UNLOCK_MADNESS
-    gfx_unlock_picasso ();
-#else
-    PICASSO96_Unlock();
-#endif
-    DX_Invalidate (dstx, dsty, orig_width, orig_height);
-}
-
-/*
-* Invert a rectangle on the screen.  a render-info is given,
-* so that do_blit can be used if
-* there is no OS specific function to invert the rectangle.
-*/
-static void do_invertrect(struct RenderInfo *ri, int Bpp, int x, int y, int width, int height)
-{
-   /* if(DX_InvertRect(x, y, width, height))
-       return;*/  //deactivate in 0.8.20
-    P96TRACE(("do_invertrect falling back to do_blit!\n"));
-    do_blit (ri, Bpp, x, y, x, y, width, height, BLIT_SRC, 0);
-}
-
-#if 0
-static uaecptr wgfx_linestart;
-static uaecptr wgfx_lineend;
-static uaecptr wgfx_min, wgfx_max;
-static unsigned long wgfx_y;
-
-static void wgfx_do_flushline (void)
-{
-    uae_u8 *src, *dstp;
-
-    /* Mark these lines as "dirty" */
-
-    if (! picasso_vidinfo.extra_mem) /* The "out" will flush the dirty lines directly */
-       goto out;
-
-#ifdef LOCK_UNLOCK_MADNESS
-    dstp = picasso96_state.HostAddress;
-#else
-    dstp = gfx_lock_picasso ();
-#endif
-     if (dstp == 0)
-       goto out;
-
-#if P96TRACING_LEVEL > 0
-    P96TRACE(("flushing %d\n", wgfx_y));
-#endif
-
-    src = gfxmemory + wgfx_min;
-
-    if(picasso_vidinfo.rgbformat == picasso96_state.RGBFormat)
-    {
-#if P96TRACING_LEVEL > 0
-       P96TRACE(("flushing type-a\n"));
-#endif
-       dstp += wgfx_y * picasso_vidinfo.rowbytes + wgfx_min - wgfx_linestart;
-       memcpy (dstp, src, wgfx_max - wgfx_min);
-    }
-    else
-    {
-       int width = wgfx_max - wgfx_min;
-       int i;
-       int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat);
-       P96TRACE(("flushing type-b\n"));
-       if (picasso96_state.RGBFormat != RGBFB_CHUNKY)
-       {
-           write_log ("ERROR - wgfx_do_flushline() calling abort 1!\n");
-           abort ();
-       }
-
-       dstp += wgfx_y * picasso_vidinfo.rowbytes + (wgfx_min - wgfx_linestart) * psiz;
-       switch (psiz) {
-       case 2:
-           for (i = 0; i < width; i++)
-               *((uae_u16 *)dstp + i) = picasso_vidinfo.clut[src[i]];
-           break;
-       case 4:
-           for (i = 0; i < width; i++)
-               *((uae_u32 *)dstp + i) = picasso_vidinfo.clut[src[i]];
-           break;
-       default:
-           write_log ("ERROR - wgfx_do_flushline() calling abort 2!\n");
-           abort ();
-           break;
-       }
-    }
-
-out:
-#ifndef LOCK_UNLOCK_MADNESS
-    gfx_unlock_picasso ();
-#endif
-    DX_Invalidate (0, wgfx_y, -1, 1);
-
-    wgfx_linestart = 0xFFFFFFFF;
-}
-
-STATIC_INLINE void wgfx_flushline (void)
-{
-    if (wgfx_linestart == 0xFFFFFFFF || ! picasso_on)
-       return;
-    wgfx_do_flushline ();
-}
-#endif
-
-static int renderinfo_is_current_screen (struct RenderInfo *ri)
-{
-    if (! picasso_on)
-       return 0;
-    if (ri->Memory != gfxmemory + (picasso96_state.Address - gfxmem_start))
-       return 0;
-
-    return 1;
-}
-
-/*
-* Fill a rectangle in the screen.
-*/
-static void do_fillrect_frame_buffer(struct RenderInfo *ri, int X, int Y, int Width, int Height, uae_u32 Pen, int Bpp, RGBFTYPE RGBFormat)
-{
-    int cols;
-    uae_u8 *start, *oldstart;
-    uae_u8 *src, *dst;
-    int lines;
-
-    /* Do our virtual frame-buffer memory.  First, we do a single line fill by hand */
-    oldstart = start = src = ri->Memory + X * Bpp + Y * ri->BytesPerRow;
-
-    switch (Bpp)
-    {
-    case 1:
-       memset (start, Pen, Width);
-       break;
-    case 2:
-       for (cols = 0; cols < Width; cols++)
-       {
-           do_put_mem_word ((uae_u16 *)start, (uae_u16)Pen);
-           start += 2;
-       }
-       break;
-    case 3:
-       for (cols = 0; cols < Width; cols++)
-       {
-           do_put_mem_byte (start, (uae_u8)Pen);
-           start++;
-           *(uae_u16 *)(start) = (Pen & 0x00FFFF00) >> 8;
-           start+=2;
-       }
-       break;
-    case 4:
-       for (cols = 0; cols < Width; cols++)
-       {
-           /**start = Pen; */
-           do_put_mem_long ((uae_u32 *)start, Pen);
-           start += 4;
-       }
-       break;
-    }
-    src = oldstart;
-    dst = src + ri->BytesPerRow;
-    /* next, we do the remaining line fills via memcpy() for > 1 BPP, otherwise some more memset() calls */
-    if(Bpp > 1)
-    {
-       for (lines = 0; lines < Height - 1; lines++, dst += ri->BytesPerRow)
-           memcpy (dst, src, Width * Bpp);
-    }
-    else
-    {
-       for (lines = 0; lines < Height - 1; lines++, dst += ri->BytesPerRow)
-           memset(dst, Pen, Width);
-    }
-}
-
-void picasso_handle_vsync (void)
-{
-    flushpixels();
-    if (palette_changed) {
-       DX_SetPalette (0,256);
-       palette_changed = 0;
-    }
-
-    if (vsyncgfxwrite == 1) {
-       static long blitcount;
-       vsyncgfxcount++;
-       if (vsyncgfxcount > 1) {
-           if (picasso_on) {
-               if (picasso96_state.RGBFormat == picasso_vidinfo.rgbformat
-                   || picasso96_state.RGBFormat == RGBFB_CHUNKY) {
-                   static frame_time_t cycles;
-                   blitcount++;
-                   cycles = read_processor_time();
-                   picasso_refresh(1);
-                   vsyncgfxcount = 0;
-                   write_log ("%d Blitnum %.3fms\n", blitcount,
-                       (read_processor_time() - cycles) * 1000 / (double)syncbase);
-               }
-           }
-       }
-    }
-    setoverlay(1);
-}
-
-static int set_panning_called = 0;
-
-/* Clear our screen, since we've got a new Picasso screen-mode, and refresh with the proper contents
-* This is called on several occasions:
-* 1. Amiga-->Picasso transition, via SetSwitch()
-* 2. Picasso-->Picasso transition, via SetPanning().
-* 3. whenever the graphics code notifies us that the screen contents have been lost.
-*/
-extern unsigned int new_beamcon0;
-void picasso_refresh (int call_setpalette)
-{
-    struct RenderInfo ri;
-    static int beamcon0_before, p96refresh_was;
-
-    if (! picasso_on)
-       return;
-    {  //for higher P96 mousedraw rate
-       /* HACK */
-       extern uae_u16 vtotal;
-       if (p96hack_vpos2) {
-           vtotal = p96hack_vpos2;
-           beamcon0_before = new_beamcon0;
-           new_beamcon0 |= 0x80;
-           p96refresh_active = 1;
-           p96refresh_was = 1;
-       } else {
-           if (p96refresh_was) {
-               new_beamcon0 = beamcon0_before;
-               p96refresh_was = 0;
-           }
-           new_beamcon0 |= 0x20;
-       }
-               /* HACK until ntsc timing is fixed.. */
-    } //end for higher P96 mousedraw rate
-    have_done_picasso = 1;
-
-    /* Make sure that the first time we show a Picasso video mode, we don't blit any crap.
-     * We can do this by checking if we have an Address yet.  */
-    if (picasso96_state.Address) {
-       unsigned int width, height;
-
-       /* blit the stuff from our static frame-buffer to the gfx-card */
-       ri.Memory = gfxmemory + (picasso96_state.Address - gfxmem_start);
-       ri.BytesPerRow = picasso96_state.BytesPerRow;
-       ri.RGBFormat = picasso96_state.RGBFormat;
-
-       if(set_panning_called)
-       {
-           width = (picasso96_state.VirtualWidth < picasso96_state.Width) ?
-               picasso96_state.VirtualWidth : picasso96_state.Width;
-           height = (picasso96_state.VirtualHeight < picasso96_state.Height) ?
-               picasso96_state.VirtualHeight : picasso96_state.Height;
-           // Let's put a black-border around the case where we've got a sub-screen...
-           if(!picasso96_state.BigAssBitmap)
-           {
-               if (picasso96_state.XOffset || picasso96_state.YOffset)
-                   DX_Fill(0, 0, picasso96_state.Width, picasso96_state.Height, 0,
-                       picasso96_state.RGBFormat);
-           }
-       }
-       else
-       {
-           width = picasso96_state.Width;
-           height = picasso96_state.Height;
-       }
-       do_blit(&ri, picasso96_state.BytesPerPixel, 0, 0, 0, 0, width, height, BLIT_SRC, 0);
-    }
-    else
-    {
-       write_log ("ERROR - picasso_refresh() can't refresh!\n");
-    }
-}
-
-
-/*
-* Functions to perform an action on the frame-buffer
-*/
-static void do_blitrect_frame_buffer(struct RenderInfo *ri, struct RenderInfo *dstri,
-                                   unsigned long srcx, unsigned long srcy,
-                                   unsigned long dstx, unsigned long dsty,
-                                   unsigned long width, unsigned long height,
-                                   uae_u8 mask, BLIT_OPCODE opcode)
-{
-
-    uae_u8 *src, *dst, *tmp, *tmp2, *tmp3;
-    uae_u8 Bpp = GetBytesPerPixel(ri->RGBFormat);
-    unsigned long total_width = width * Bpp;
-    unsigned long linewidth = (total_width + 15) & ~15;
-    unsigned long lines;
-    int can_do_visible_blit = 0;
-
-    src = ri->Memory + srcx * Bpp + srcy * ri->BytesPerRow;
-    dst = dstri->Memory + dstx * Bpp + dsty * dstri->BytesPerRow;
-    if (mask != 0xFF && Bpp > 1)
-    {
-       write_log ("WARNING - BlitRect() has mask 0x%x with Bpp %d.\n", mask, Bpp);
-    }
-
-    if (mask == 0xFF || Bpp > 1)
-    {
-       if(opcode == BLIT_SRC)
-       {
-           /* handle normal case efficiently */
-           if (ri->Memory == dstri->Memory && dsty == srcy)
-           {
-               unsigned long i;
-               for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow)
-                   memmove (dst, src, total_width);
-           }
-           else if (dsty < srcy)
-           {
-               unsigned long i;
-               for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow)
-                   memcpy (dst, src, total_width);
-           }
-           else
-           {
-               unsigned long i;
-               src += (height - 1) * ri->BytesPerRow;
-               dst += (height - 1) * dstri->BytesPerRow;
-               for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow)
-                   memcpy (dst, src, total_width);
-           }
-           return;
-       }
-       else
-       {
-           uae_u8 *src2;
-           uae_u8 *dst2;
-           unsigned int y;
-
-           for(y = 0; y < height; y++) /* Vertical lines */
-           {
-               uae_u8 *bound = src + total_width - 4;
-               uae_u32 *src2_32;
-               uae_u32 *dst2_32;
-               //copy now the longs
-               for(src2_32 = (uae_u32*)src, dst2_32 = (uae_u32*)dst; src2_32 < (uae_u32*)bound; src2_32++, dst2_32++) /* Horizontal bytes */
-               {
-                   switch(opcode)
-                   {
-                   case BLIT_FALSE:
-                   *dst2_32 = 0;
-                   break;
-                   case BLIT_NOR:
-                   *dst2_32 = ~(*src2_32 | *dst2_32);
-                   break;
-                   case BLIT_ONLYDST:
-                   *dst2_32 = *dst2_32 & ~(*src2_32);
-                   break;
-                   case BLIT_NOTSRC:
-                   *dst2_32 = ~(*src2_32);
-                   break;
-                   case BLIT_ONLYSRC:
-                   *dst2_32 = *src2_32 & ~(*dst2_32);
-                   break;
-                   case BLIT_NOTDST:
-                   *dst2_32 = ~(*dst2_32);
-                   break;
-                   case BLIT_EOR:
-                   *dst2_32 = *src2_32 ^ *dst2_32;
-                   break;
-                   case BLIT_NAND:
-                   *dst2_32 = ~(*src2_32 & *dst2_32);
-                   break;
-                   case BLIT_AND:
-                   *dst2_32 = *src2_32 & *dst2_32;
-                   break;
-                   case BLIT_NEOR:
-                   *dst2_32 = ~(*src2_32 ^ *dst2_32);
-                   break;
-                   case BLIT_DST:
-                   write_log ( "do_blitrect_frame_buffer shouldn't get BLIT_DST!\n");
-                   break;
-                   case BLIT_NOTONLYSRC:
-                   *dst2_32 = ~(*src2_32) | *dst2_32;
-                   break;
-                   case BLIT_SRC:
-                   write_log ( "do_blitrect_frame_buffer shouldn't get BLIT_SRC!\n");
-                   break;
-                   case BLIT_NOTONLYDST:
-                   *dst2_32 = ~(*dst2_32) | *src2_32;
-                   break;
-                   case BLIT_OR:
-                   *dst2_32 = *src2_32 | *dst2_32;
-                   break;
-                   case BLIT_TRUE:
-                   *dst2_32 = 0xFFFFFFFF;
-                   break;
-                   case 30: //code for swap source with dest in byte
-                   {
-                       uae_u32 temp;
-                       temp = *src2_32;
-                       *src2_32 = *dst2_32;
-                       *dst2_32 = temp;
-                   }
-                   break;
-                   case BLIT_LAST:
-                   write_log ( "do_blitrect_frame_buffer shouldn't get BLIT_LAST!\n");
-                   break;
-                   } /* switch opcode */
-               }// for end
-               //now copy the rest few bytes
-               for(src2 = (uae_u8*)src2_32, dst2 = (uae_u8*)dst2_32; src2 < src + total_width; src2++, dst2++) /* Horizontal bytes */
-               {
-                   switch(opcode)
-                   {
-                   case BLIT_FALSE:
-                   *dst2 = 0;
-                   break;
-                   case BLIT_NOR:
-                   *dst2 = ~(*src2 | *dst2);
-                   break;
-                   case BLIT_ONLYDST:
-                   *dst2 = *dst2 & ~(*src2);
-                   break;
-                   case BLIT_NOTSRC:
-                   *dst2 = ~(*src2);
-                   break;
-                   case BLIT_ONLYSRC:
-                   *dst2 = *src2 & ~(*dst2);
-                   break;
-                   case BLIT_NOTDST:
-                   *dst2 = ~(*dst2);
-                   break;
-                   case BLIT_EOR:
-                   *dst2 = *src2 ^ *dst2;
-                   break;
-                   case BLIT_NAND:
-                   *dst2 = ~(*src2 & *dst2);
-                   break;
-                   case BLIT_AND:
-                   *dst2 = *src2 & *dst2;
-                   break;
-                   case BLIT_NEOR:
-                   *dst2 = ~(*src2 ^ *dst2);
-                   break;
-                   case BLIT_DST:
-                   write_log ("do_blitrect_frame_buffer shouldn't get BLIT_DST!\n");
-                   break;
-                   case BLIT_NOTONLYSRC:
-                   *dst2 = ~(*src2) | *dst2;
-                   break;
-                   case BLIT_SRC:
-                   write_log ("do_blitrect_frame_buffer shouldn't get BLIT_SRC!\n");
-                   break;
-                   case BLIT_NOTONLYDST:
-                   *dst2 = ~(*dst2) | *src2;
-                   break;
-                   case BLIT_OR:
-                   *dst2 = *src2 | *dst2;
-                   break;
-                   case BLIT_TRUE:
-                   *dst2 = 0xFF;
-                   break;
-                   case BLIT_LAST:
-                   write_log ("do_blitrect_frame_buffer shouldn't get BLIT_LAST!\n");
-                   break;
-                   case 30: //code for swap source with dest in long
-                   {
-                       uae_u8 temp;
-                       temp = *src2;
-                       *src2 = *dst2;
-                       *dst2 = temp;
-                   }
-                   break;
-                   } /* switch opcode */
-               } /* for width */
-               src += ri->BytesPerRow;
-               dst += dstri->BytesPerRow;
-           } /* for height */
-       }
-       return;
-    }
-
-    tmp3 = tmp2 = tmp = xmalloc (linewidth * height); /* allocate enough memory for the src-rect */
-    if (!tmp)
-       return;
-
-    /* copy the src-rect into our temporary buffer space */
-    for (lines = 0; lines < height; lines++, src += ri->BytesPerRow, tmp2 += linewidth)
-    {
-       memcpy (tmp2, src, total_width);
-    }
-
-    /* copy the temporary buffer to the destination */
-    for (lines = 0; lines < height; lines++, dst += dstri->BytesPerRow, tmp+= linewidth)
-    {
-       unsigned long cols;
-       for (cols = 0; cols < width; cols++)
-       {
-           dst[cols] &= ~mask;
-           dst[cols] |= tmp[cols] & mask;
-       }
-    }
-    /* free the temp-buf */
-    xfree (tmp3);
-}
-
-/*
-DrawLine:
-Synopsis: DrawLine(bi, ri, line, Mask, RGBFormat);
-Inputs: a0: struct BoardInfo *bi
-a1: struct RenderInfo *ri
-a2: struct Line *line
-d0.b: Mask
-d7.l: RGBFormat
-
-This function is used to paint a line on the board memory possibly using the blitter. It is called by Draw
-and obeyes the destination RGBFormat as well as ForeGround and BackGround pens and draw modes.
-*/
-uae_u32 REGPARAM2 picasso_DrawLine (struct regstruct *regs)
-{
-    uae_u32 result = 0;
-#ifdef P96_DRAWLINE
-    struct Line line;
-    struct RenderInfo ri;
-    uae_u8 Mask = m68k_dreg (regs, 0);
-    RGBFTYPE RGBFormat = m68k_dreg (regs, 7);
-
-    CopyRenderInfoStructureA2U(m68k_areg (regs, 1), &ri);
-    CopyLineStructureA2U(m68k_areg (regs, 2), &line);
-#if defined( P96TRACING_ENABLED ) && P96TRACING_LEVEL > 0
-    DumpLine( &line );
-#endif
-#else
-    P96TRACE(("DrawLine() - not implemented!\n" ));
-#endif
-    return result;
-}
-
-#ifdef HARDWARE_SPRITE_EMULATION
-/*
-SetSprite:
-Synopsis: SetSprite(bi, activate, RGBFormat);
-Inputs: a0: struct BoardInfo *bi
-d0: BOOL activate
-d7: RGBFTYPE RGBFormat
-
-This function activates or deactivates the hardware sprite.
-*/
-uae_u32 picasso_SetSprite (void)
-{
-    uae_u32 result = 0;
-    uae_u32 activate = m68k_dreg ( regs, 0 );
-    result = DX_ShowCursor( activate );
-    write_log ("SetSprite() - trying to %s cursor, result = %d\n", activate ? "show":"hide", result);
-    return result;
-}
-
-/*
-SetSpritePosition:
-Synopsis: SetSpritePosition(bi, RGBFormat);
-Inputs: a0: struct BoardInfo *bi
-d7: RGBFTYPE RGBFormat
-
-This function sets the hardware mouse sprite position according to the values in the BoardInfo structure.
-MouseX and MouseY are the coordinates relative to the screen bitmap. XOffset and YOffset must be subtracted
-to account for possible screen panning.
-*/
-uae_u32 picasso_SetSpritePosition (void)
-{
-    uae_u32 result = 0;
-    uaecptr bi = m68k_areg (regs, 0);
-    uae_u16 MouseX  = get_word (bi + PSSO_BoardInfo_MouseX) - picasso96_state.XOffset;
-    uae_u16 MouseY  = get_word (bi + PSSO_BoardInfo_MouseY) - picasso96_state.YOffset;
-
-    // Keep these around, because we don't want flickering
-    static uae_u16 OldMouseX = -1;
-    static uae_u16 OldMouseY = -1;
-
-    // Bounds check MouseX and MouseY here, because sometimes they seem to go negative...
-    if((uae_s16)MouseX < 0)
-       MouseX = 0;
-    if((uae_s16)MouseY < 0)
-       MouseY = 0;
-
-    if((MouseX != OldMouseX) || (MouseY != OldMouseY))
-    {
-       result = DX_MoveCursor(MouseX, MouseY);
-       write_log ("SetSpritePosition() - moving cursor to (%d,%d), result = %d\n", MouseX, MouseY, result);
-       if(result)
-       {
-           OldMouseX = MouseX;
-           OldMouseY = MouseY;
-       }
-    }
-    return result;
-}
-
-/*
-SetSpriteImage:
-Synopsis: SetSpriteImage(bi, RGBFormat);
-Inputs: a0: struct BoardInfo *bi
-d7: RGBFTYPE RGBFormat
-
-This function gets new sprite image data from the MouseImage field of the BoardInfo structure and writes
-it to the board.
-
-There are three possible cases:
-
-BIB_HIRESSPRITE is set:
-skip the first two long words and the following sprite data is arranged as an array of two longwords. Those form the
-two bit planes for one image line respectively.
-
-BIB_HIRESSPRITE and BIB_BIGSPRITE are not set:
-skip the first two words and the following sprite data is arranged as an array of two words. Those form the two
-bit planes for one image line respectively.
-
-BIB_HIRESSPRITE is not set and BIB_BIGSPRITE is set:
-skip the first two words and the following sprite data is arranged as an array of two words. Those form the two bit
-planes for one image line respectively. You have to double each pixel horizontally and vertically. All coordinates
-used in this case already assume a zoomed sprite, only the sprite data is not zoomed yet. You will have to
-compensate for this when accounting for hotspot offsets and sprite dimensions.
-*/
-uae_u32 picasso_SetSpriteImage (void)
-{
-    uae_u32 result = 0;
-
-    return result;
-}
-
-/*
-SetSpriteColor:
-Synopsis: SetSpriteColor(bi, index, red, green, blue, RGBFormat);
-Inputs: a0: struct BoardInfo *bi
-d0.b: index
-d1.b: red
-d2.b: green
-d3.b: blue
-d7: RGBFTYPE RGBFormat
-
-This function changes one of the possible three colors of the hardware sprite.
-*/
-uae_u32 picasso_SetSpriteColor (void)
-{
-    uae_u32 result = 0;
-
-    return result;
-}
-#endif
-
-/*
-* BOOL FindCard(struct BoardInfo *bi);      and
-*
-* FindCard is called in the first stage of the board initialisation and
-* configuration and is used to look if there is a free and unconfigured
-* board of the type the driver is capable of managing. If it finds one,
-* it immediately reserves it for use by Picasso96, usually by clearing
-* the CDB_CONFIGME bit in the flags field of the ConfigDev struct of
-* this expansion card. But this is only a common example, a driver can
-* do whatever it wants to mark this card as used by the driver. This
-* mechanism is intended to ensure that a board is only configured and
-* used by one driver. FindBoard also usually fills some fields of the
-* BoardInfo struct supplied by the caller, the rtg.library, for example
-* the MemoryBase, MemorySize and RegisterBase fields.
-*/
-uae_u32 REGPARAM2 picasso_FindCard (struct regstruct *regs)
-{
-    uaecptr AmigaBoardInfo = m68k_areg (regs, 0);
-
-    /* NOTES: See BoardInfo struct definition in Picasso96 dev info */
-
-    if (allocated_gfxmem && !picasso96_state.CardFound) {
-       /* Fill in MemoryBase, MemorySize */
-       put_long (AmigaBoardInfo + PSSO_BoardInfo_MemoryBase, gfxmem_start);
-       /* size of memory, minus a 32K chunk: 16K for pattern bitmaps, 16K for resolution list */
-       put_long (AmigaBoardInfo + PSSO_BoardInfo_MemorySize, allocated_gfxmem - 32768);
-       picasso96_state.CardFound = 1; /* mark our "card" as being found */
-       return -1;
-    } else
-       return 0;
-}
-
-static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, struct PicassoResolution *dm)
-{
-    char *uaememptr;
-    switch (dm->depth) {
-    case 1:
-       res->Modes[CHUNKY] = amigamemptr;
-       break;
-    case 2:
-       res->Modes[HICOLOR] = amigamemptr;
-       break;
-    case 3:
-       res->Modes[TRUECOLOR] = amigamemptr;
-       break;
-    default:
-       res->Modes[TRUEALPHA] = amigamemptr;
-       break;
-    }
-    uaememptr = gfxmem_xlate(amigamemptr); /* I know that amigamemptr is inside my gfxmem chunk, so I can just do the xlate() */
-    memset(uaememptr, 0, PSSO_ModeInfo_sizeof); /* zero out our ModeInfo struct */
-
-    put_word (amigamemptr + PSSO_ModeInfo_Width, dm->res.width);
-    put_word (amigamemptr + PSSO_ModeInfo_Height, dm->res.height);
-    put_byte (amigamemptr + PSSO_ModeInfo_Depth, dm->depth * 8);
-    put_byte (amigamemptr + PSSO_ModeInfo_Flags, 0);
-    put_word (amigamemptr + PSSO_ModeInfo_HorTotal, dm->res.width);
-    put_word (amigamemptr + PSSO_ModeInfo_HorBlankSize, 0);
-    put_word (amigamemptr + PSSO_ModeInfo_HorSyncStart, 0);
-    put_word (amigamemptr + PSSO_ModeInfo_HorSyncSize, 0);
-    put_byte (amigamemptr + PSSO_ModeInfo_HorSyncSkew, 0);
-    put_byte (amigamemptr + PSSO_ModeInfo_HorEnableSkew, 0);
-
-    put_word (amigamemptr + PSSO_ModeInfo_VerTotal, dm->res.height);
-    put_word (amigamemptr + PSSO_ModeInfo_VerBlankSize, 0);
-    put_word (amigamemptr + PSSO_ModeInfo_VerSyncStart, 0);
-    put_word (amigamemptr + PSSO_ModeInfo_VerSyncSize, 0);
-
-    put_byte (amigamemptr + PSSO_ModeInfo_first_union, 98);
-    put_byte (amigamemptr + PSSO_ModeInfo_second_union, 14);
-
-    put_long (amigamemptr + PSSO_ModeInfo_PixelClock,
-       dm->res.width * dm->res.height * (currprefs.gfx_refreshrate ? abs (currprefs.gfx_refreshrate) : default_freq));
-}
-
-struct modeids {
-    int width, height;
-    int id;
-};
-static struct modeids mi[] =
-{
-/* "original" modes */
-
-    320, 200, 0,
-    320, 240, 1,
-    640, 400, 2,
-    640, 480, 3,
-    800, 600, 4,
-   1024, 768, 5,
-   1152, 864, 6,
-   1280,1024, 7,
-   1600,1280, 8,
-
-/* new modes */
-
-    704, 480, 129,
-    704, 576, 130,
-    720, 480, 131,
-    720, 576, 132,
-    768, 483, 133,
-    768, 576, 134,
-    800, 480, 135,
-    848, 480, 136,
-    854, 480, 137,
-    948, 576, 138,
-   1024, 576, 139,
-   1152, 768, 140,
-   1152, 864, 141,
-   1280, 720, 142,
-   1280, 768, 143,
-   1280, 800, 144,
-   1280, 854, 145,
-   1280, 960, 146,
-   1366, 768, 147,
-   1440, 900, 148,
-   1440, 960, 149,
-   1600,1200, 150,
-   1680,1050, 151,
-   1920,1080, 152,
-   1920,1200, 153,
-   2048,1152, 154,
-   2048,1536, 155,
-   2560,1600, 156,
-   2560,2048, 157,
-    400, 300, 158,
-    512, 384, 159,
-    640, 432, 160,
-   1360, 768, 161,
-   1360,1024, 162,
-   1400,1050, 163,
-   1792,1344, 164,
-   1800,1440, 165,
-   1856,1392, 166,
-   1920,1440, 167,
-
-   -1,-1,0
-};
-
-static int AssignModeID(int dm, int count, int *unkcnt)
-{
-    int i, w, h;
-
-    w = DisplayModes[dm].res.width;
-    h = DisplayModes[dm].res.height;
-    for (i = 0; mi[i].width > 0; i++) {
-       if (w == mi[i].width && h == mi[i].height)
-           return 0x50001000 | (mi[i].id * 0x10000);
-    }
-    (*unkcnt)++;
-    write_log ("P96: Non-unique mode %dx%d\n", w, h);
-    return 0x51000000 - (*unkcnt) * 0x10000;
-#if 0
-    int result;
-    if(DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 200)
-       result = 0x50001000;
-    else  if(DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 240)
-       result = 0x50011000;
-    else if(DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 400)
-       result = 0x50021000;
-    else if(DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 480)
-       result = 0x50031000;
-    else if(DisplayModes[i].res.width == 800 && DisplayModes[i].res.height == 600)
-       result = 0x50041000;
-    else if(DisplayModes[i].res.width == 1024 && DisplayModes[i].res.height == 768)
-       result = 0x50051000;
-    else if(DisplayModes[i].res.width == 1152 && DisplayModes[i].res.height == 864)
-       result = 0x50061000;
-    else if(DisplayModes[i].res.width == 1280 && DisplayModes[i].res.height == 1024)
-       result = 0x50071000;
-    else if(DisplayModes[i].res.width == 1600 && DisplayModes[i].res.height == 1280)
-       result = 0x50081000;
-    else
-       result = 0x50090000 + count * 0x10000;
-    return result;
-#endif
-}
-
-/****************************************
-* InitCard()
-*
-* a2: BoardInfo structure ptr - Amiga-based address in Intel endian-format
-*
-* Job - fill in the following structure members:
-* gbi_RGBFormats: the pixel formats that the host-OS of UAE supports
-*     If UAE is running in a window, it should ONLY report the pixel format of the host-OS desktop
-*     If UAE is running full-screen, it should report ALL pixel formats that the host-OS can handle in full-screen
-*     NOTE: If full-screen, and the user toggles to windowed-mode, all hell will break loose visually. Must inform
-*     user that they're doing something stupid (unless their desktop and full-screen colour modes match).
-* gbi_SoftSpriteFlags: should be the same as above for now, until actual cursor support is added
-* gbi_BitsPerCannon: could be 6 or 8 or ???, depending on the host-OS gfx-card
-* gbi_MaxHorResolution: fill this in for all modes (even if you don't support them)
-* gbi_MaxVerResolution: fill this in for all modes (even if you don't support them)
-*/
-uae_u32 REGPARAM2 picasso_InitCard (struct regstruct *regs)
-{
-    struct LibResolution res;
-    int ModeInfoStructureCount = 1, LibResolutionStructureCount = 0;
-    int i, unkcnt;
-
-    uaecptr amigamemptr = 0;
-    uaecptr AmigaBoardInfo = m68k_areg (regs, 2);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_BitsPerCannon, DX_BitsPerCannon());
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_RGBFormats, picasso96_pixel_format);
-    put_long (AmigaBoardInfo + PSSO_BoardInfo_BoardType, BT_uaegfx);
-#ifdef HARDWARE_SPRITE_EMULATION
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_SoftSpriteFlags, 0);
-#else
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_SoftSpriteFlags, picasso96_pixel_format);
-#endif
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 0, planar.width);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 0, planar.height);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height);
-    put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height);
-
-    i = 0;
-    unkcnt = 0;
-    while (DisplayModes[i].depth >= 0) {
-       int j = i;
-       /* Add a LibResolution structure to the ResolutionsList MinList in our BoardInfo */
-       res.DisplayID = AssignModeID(i, LibResolutionStructureCount, &unkcnt);
-       res.BoardInfo = AmigaBoardInfo;
-       res.Width = DisplayModes[i].res.width;
-       res.Height = DisplayModes[i].res.height;
-       res.Flags = P96F_PUBLIC;
-       memcpy (res.P96ID, "P96-0:", 6);
-       sprintf (res.Name, "uaegfx:%dx%d", res.Width, res.Height);
-       res.Modes[PLANAR] = 0;
-       res.Modes[CHUNKY] = 0;
-       res.Modes[HICOLOR] = 0;
-       res.Modes[TRUECOLOR] = 0;
-       res.Modes[TRUEALPHA] = 0;
-
-       do {
-           /* Handle this display mode's depth */
-
-           /* New: Only add the modes when there is enough P96 RTG memory to hold the bitmap */
-           if((allocated_gfxmem - 32768) >
-               (DisplayModes[i].res.width * DisplayModes[i].res.height * DisplayModes[i].depth))
-           {
-               amigamemptr = gfxmem_start + allocated_gfxmem - (PSSO_ModeInfo_sizeof * ModeInfoStructureCount++);
-               FillBoardInfo(amigamemptr, &res, &DisplayModes[i]);
-           }
-           i++;
-       } while (DisplayModes[i].depth >= 0
-           && DisplayModes[i].res.width == DisplayModes[j].res.width
-           && DisplayModes[i].res.height == DisplayModes[j].res.height);
-
-       amigamemptr = gfxmem_start + allocated_gfxmem - 16384 + (PSSO_LibResolution_sizeof * LibResolutionStructureCount++);
-       CopyLibResolutionStructureU2A (&res, amigamemptr);
-#if defined P96TRACING_ENABLED && P96TRACING_LEVEL > 1
-       DumpLibResolutionStructure(amigamemptr);
-#endif
-       AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amigamemptr);
-    }
-
-    return -1;
-}
-
-/*
-* SetSwitch:
-* a0: struct BoardInfo
-* d0.w: BOOL state
-* this function should set a board switch to let the Amiga signal pass
-* through when supplied with a 0 in d0 and to show the board signal if
-* a 1 is passed in d0. You should remember the current state of the
-* switch to avoid unneeded switching. If your board has no switch, then
-* simply supply a function that does nothing except a RTS.
-*
-* NOTE: Return the opposite of the switch-state. BDK
-*/
-uae_u32 REGPARAM2 picasso_SetSwitch (struct regstruct *regs)
-{
-    uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF;
-
-    /* Do not switch immediately.  Tell the custom chip emulation about the
-    * desired state, and wait for custom.c to call picasso_enablescreen
-    * whenever it is ready to change the screen state.  */
-    picasso_requested_on = flag;
-    write_log ("SetSwitch() - trying to show %s screen\n", flag ? "picasso96" : "amiga");
-
-    /* Put old switch-state in D0 */
-
-    return !flag;
-}
-
-void picasso_enablescreen (int on)
-{
-#if 0
-    wgfx_linestart = 0xFFFFFFFF;
-#endif
-    picasso_refresh (1);
-    write_log ("SetSwitch() from threadid %d - showing %s screen\n", GetCurrentThreadId(), on ? "picasso96": "amiga");
-    checkrtglibrary();
-}
-
-/*
-* SetColorArray:
-* a0: struct BoardInfo
-* d0.w: startindex
-* d1.w: count
-* when this function is called, your driver has to fetch "count" color
-* values starting at "startindex" from the CLUT field of the BoardInfo
-* structure and write them to the hardware. The color values are always
-* between 0 and 255 for each component regardless of the number of bits
-* per cannon your board has. So you might have to shift the colors
-* before writing them to the hardware.
-*/
-uae_u32 REGPARAM2 picasso_SetColorArray (struct regstruct *regs)
-{
-/* Fill in some static UAE related structure about this new CLUT setting
-    * We need this for CLUT-based displays, and for mapping CLUT to hi/true colour */
-    uae_u16 start = m68k_dreg (regs, 0);
-    uae_u16 count = m68k_dreg (regs, 1);
-    int i;
-    uaecptr boardinfo = m68k_areg (regs, 0);
-    uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT + start * 3;
-
-    for (i = start; i < start + count; i++) {
-       int r = get_byte (clut);
-       int g = get_byte (clut + 1);
-       int b = get_byte (clut + 2);
-
-       palette_changed |= (picasso96_state.CLUT[i].Red != r
-           || picasso96_state.CLUT[i].Green != g
-           || picasso96_state.CLUT[i].Blue != b);
-
-       picasso96_state.CLUT[i].Red = r;
-       picasso96_state.CLUT[i].Green = g;
-       picasso96_state.CLUT[i].Blue = b;
-       clut += 3;
-    }
-    P96TRACE(("SetColorArray(%d,%d)\n", start, count));
-    return 1;
-}
-
-/*
-* SetDAC:
-* a0: struct BoardInfo
-* d7: RGBFTYPE RGBFormat
-* This function is called whenever the RGB format of the display changes,
-* e.g. from chunky to TrueColor. Usually, all you have to do is to set
-* the RAMDAC of your board accordingly.
-*/
-uae_u32 REGPARAM2 picasso_SetDAC (struct regstruct *regs)
-{
-/* Fill in some static UAE related structure about this new DAC setting
-    * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */
-
-    P96TRACE(("SetDAC()\n"));
-    return 1;
-}
-
-
-static void init_picasso_screen(void)
-{
-    if(set_panning_called) {
-       picasso96_state.Extent = picasso96_state.Address + (picasso96_state.BytesPerRow * picasso96_state.VirtualHeight);
-    }
-    if (set_gc_called) {
-       gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height,
-           picasso96_state.GC_Depth, picasso96_state.RGBFormat);
-    }
-    if((picasso_vidinfo.width == picasso96_state.Width) &&
-       (picasso_vidinfo.height == picasso96_state.Height) &&
-       (picasso_vidinfo.depth == (picasso96_state.GC_Depth >> 3)) &&
-       (picasso_vidinfo.selected_rgbformat == picasso96_state.RGBFormat))
-    {
-       DX_SetPalette (0, 256);
-       picasso_refresh (1);
-    }
-}
-
-/*
-* SetGC:
-* a0: struct BoardInfo
-* a1: struct ModeInfo
-* d0: BOOL Border
-* This function is called whenever another ModeInfo has to be set. This
-* function simply sets up the CRTC and TS registers to generate the
-* timing used for that screen mode. You should not set the DAC, clocks
-* or linear start adress. They will be set when appropriate by their
-* own functions.
-*/
-uae_u32 REGPARAM2 picasso_SetGC (struct regstruct *regs)
-{
-    /* Fill in some static UAE related structure about this new ModeInfo setting */
-    uae_u32 border   = m68k_dreg (regs, 0);
-    uaecptr modeinfo = m68k_areg (regs, 1);
-
-    picasso96_state.Width = get_word (modeinfo + PSSO_ModeInfo_Width);
-    picasso96_state.VirtualWidth = picasso96_state.Width; /* in case SetPanning doesn't get called */
-
-    picasso96_state.Height = get_word (modeinfo + PSSO_ModeInfo_Height);
-    picasso96_state.VirtualHeight = picasso96_state.Height; /* in case SetPanning doesn't get called */
-
-    picasso96_state.GC_Depth = get_byte (modeinfo + PSSO_ModeInfo_Depth);
-    picasso96_state.GC_Flags = get_byte (modeinfo + PSSO_ModeInfo_Flags);
-
-    P96TRACE(("SetGC(%d,%d,%d,%d)\n", picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, border));
-    set_gc_called = 1;
-    picasso96_state.HostAddress = NULL;
-    init_picasso_screen ();
-    init_hz_p96 ();
-    return 1;
-}
-
-/*
-* SetPanning:
-* a0: struct BoardInfo
-* a1: UBYTE *Memory
-* d0: uae_u16 Width
-* d1: WORD XOffset
-* d2: WORD YOffset
-* d7: RGBFTYPE RGBFormat
-* This function sets the view origin of a display which might also be
-* overscanned. In register a1 you get the start address of the screen
-* bitmap on the Amiga side. You will have to subtract the starting
-* address of the board memory from that value to get the memory start
-* offset within the board. Then you get the offset in pixels of the
-* left upper edge of the visible part of an overscanned display. From
-* these values you will have to calculate the LinearStartingAddress
-* fields of the CRTC registers.
-
-  * NOTE: SetPanning() can be used to know when a Picasso96 screen is
-  * being opened.  Better to do the appropriate clearing of the
-  * background here than in SetSwitch() derived functions,
-  * because SetSwitch() is not called for subsequent Picasso screens.
-*/
-
-uae_u32 REGPARAM2 picasso_SetPanning (struct regstruct *regs)
-{
-    uae_u16 Width = m68k_dreg (regs, 0);
-    uaecptr start_of_screen = m68k_areg (regs, 1);
-    uaecptr bi = m68k_areg (regs, 0);
-    uaecptr bmeptr = get_long (bi + PSSO_BoardInfo_BitMapExtra);  /* Get our BoardInfo ptr's BitMapExtra ptr */
-    uae_u16 bme_width, bme_height;
-
-    if(oldscr == 0) {
-       oldscr = start_of_screen;
-    }
-    if (oldscr != start_of_screen) {
-       set_gc_called = 0;
-       oldscr = start_of_screen;
-    }
-
-    bme_width = get_word (bmeptr + PSSO_BitMapExtra_Width);
-    bme_height = get_word (bmeptr + PSSO_BitMapExtra_Height);
-
-    picasso96_state.Address = start_of_screen; /* Amiga-side address */
-    picasso96_state.XOffset = (uae_s16)(m68k_dreg (regs, 1) & 0xFFFF);
-    picasso96_state.YOffset = (uae_s16)(m68k_dreg (regs, 2) & 0xFFFF);
-    picasso96_state.VirtualWidth = bme_width;
-    picasso96_state.VirtualHeight = bme_height;
-    if((bme_width > Width) || (bme_height > picasso96_state.Height)) // NOTE: These were != instead of > before...
-       picasso96_state.BigAssBitmap = 1;
-    else
-       picasso96_state.BigAssBitmap = 0;
-    picasso96_state.RGBFormat = m68k_dreg (regs, 7);
-    picasso96_state.BytesPerPixel = GetBytesPerPixel (picasso96_state.RGBFormat);
-    picasso96_state.BytesPerRow = bme_width * picasso96_state.BytesPerPixel;
-
-    set_panning_called = 1;
-    P96TRACE(("SetPanning(%d, %d, %d) Start 0x%x, BPR %d Bpp %d RGBF %d\n",
-       Width, picasso96_state.XOffset, picasso96_state.YOffset,
-       start_of_screen, picasso96_state.BytesPerRow, picasso96_state.BytesPerPixel, picasso96_state.RGBFormat));
-    init_picasso_screen ();
-    set_panning_called = 0;
-
-    return 1;
-}
-
-static void do_xor8 (uae_u8 *ptr, long len, uae_u32 val)
-{
-    int i;
-#if 0 && defined ALIGN_POINTER_TO32
-    int align_adjust = ALIGN_POINTER_TO32(ptr);
-    int len2;
-
-    len -= align_adjust;
-    while (align_adjust) {
-       *ptr ^= val;
-       ptr++;
-       align_adjust--;
-    }
-    len2 = len >> 2;
-    len -= len2 << 2;
-    for (i = 0; i < len2; i++, ptr += 4) {
-       *(uae_u32 *)ptr ^= val;
-    }
-    while (len) {
-       *ptr ^= val;
-       ptr++;
-       len--;
-    }
-    return;
-#endif
-    for (i = 0; i < len; i++, ptr++) {
-       do_put_mem_byte (ptr, (uae_u8)(do_get_mem_byte (ptr) ^ val));
-    }
-}
-
-/*
-* InvertRect:
-*
-* Inputs:
-* a0:struct BoardInfo *bi
-* a1:struct RenderInfo *ri
-* d0.w:X
-* d1.w:Y
-* d2.w:Width
-* d3.w:Height
-* d4.l:Mask
-* d7.l:RGBFormat
-*
-* This function is used to invert a rectangular area on the board. It is called by BltBitMap,
-* BltPattern and BltTemplate.
-*/
-uae_u32 REGPARAM2 picasso_InvertRect (struct regstruct *regs)
-{
-    uaecptr renderinfo = m68k_areg (regs, 1);
-    unsigned long X = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long Y = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long Width = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long Height = (uae_u16)m68k_dreg (regs, 3);
-    uae_u8 mask = (uae_u8)m68k_dreg (regs, 4);
-    int Bpp = GetBytesPerPixel (m68k_dreg (regs, 7));
-    uae_u32 xorval;
-    unsigned int lines;
-    struct RenderInfo ri;
-    uae_u8 *uae_mem, *rectstart;
-    unsigned long width_in_bytes;
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    if (CopyRenderInfoStructureA2U (renderinfo, &ri))
-    {
-       P96TRACE(("InvertRect %dbpp 0x%lx\n", Bpp, (long)mask));
-
-       if (mask != 0xFF && Bpp > 1)
-           mask = 0xFF;
-
-       xorval = 0x01010101 * (mask & 0xFF);
-       width_in_bytes = Bpp * Width;
-       rectstart = uae_mem = ri.Memory + Y * ri.BytesPerRow + X * Bpp;
-
-       for (lines = 0; lines < Height; lines++, uae_mem += ri.BytesPerRow)
-           do_xor8 (uae_mem, width_in_bytes, xorval);
-
-       if (vsyncgfxwrite == 0) {
-           if (renderinfo_is_current_screen (&ri)) {
-               if (mask == 0xFF)
-                   do_invertrect(&ri, Bpp, X, Y, Width, Height);
-               else
-                   do_blit(&ri, Bpp, X, Y, X, Y, Width, Height, BLIT_SRC, 0);
-           }
-       }
-       result = 1;
-    }
-
-    return result; /* 1 if supported, 0 otherwise */
-}
-
-/***********************************************************
-FillRect:
-***********************************************************
-* a0: struct BoardInfo *
-* a1: struct RenderInfo *
-* d0: WORD X
-* d1: WORD Y
-* d2: WORD Width
-* d3: WORD Height
-* d4: uae_u32 Pen
-* d5: UBYTE Mask
-* d7: uae_u32 RGBFormat
-***********************************************************/
-uae_u32 REGPARAM2 picasso_FillRect (struct regstruct *regs)
-{
-    uaecptr renderinfo = m68k_areg (regs, 1);
-    uae_u32 X = (uae_u16)m68k_dreg (regs, 0);
-    uae_u32 Y = (uae_u16)m68k_dreg (regs, 1);
-    uae_u32 Width = (uae_u16)m68k_dreg (regs, 2);
-    uae_u32 Height = (uae_u16)m68k_dreg (regs, 3);
-    uae_u32 Pen = m68k_dreg (regs, 4);
-    uae_u8 Mask = (uae_u8)m68k_dreg (regs, 5);
-    RGBFTYPE RGBFormat = m68k_dreg (regs, 7);
-
-    uae_u8 *src;
-    uae_u8 *oldstart;
-    int Bpp;
-    struct RenderInfo ri;
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    if (CopyRenderInfoStructureA2U (renderinfo, &ri) && Y != 0xFFFF)
-    {
-       if (ri.RGBFormat != RGBFormat)
-           write_log ("Weird Stuff!\n");
-
-       Bpp = GetBytesPerPixel (RGBFormat);
-
-       P96TRACE(("FillRect(%d, %d, %d, %d) Pen 0x%x BPP %d BPR %d Mask 0x%x\n",
-           X, Y, Width, Height, Pen, Bpp, ri.BytesPerRow, Mask));
-
-       if(Bpp > 1)
-           Mask = 0xFF;
-
-       if (Mask == 0xFF)
-       {
-           if((Width == 1) || (Height == 1))
-           {
-               int i;
-               uaecptr addr;
-               if(renderinfo_is_current_screen(&ri))
-               {
-                   uae_u32 diff = gfxmem_start - (uae_u32)gfxmemory; /* xxx this is sooo wrong.. */
-                   addr = ri.Memory + X * Bpp + Y * ri.BytesPerRow + diff;
-                   if(Width == 1)
-                   {
-                       for(i = 0; i < Height; i++)
-                       {
-                           if(Bpp == 4)
-                               gfxmem_lput(addr + (i * picasso96_state.BytesPerRow), Pen);
-                           else if(Bpp == 2)
-                               gfxmem_wput(addr + (i * picasso96_state.BytesPerRow), Pen);
-                           else
-                               gfxmem_bput(addr + (i * picasso96_state.BytesPerRow), Pen);
-                       }
-                   }
-                   else if(Height == 1)
-                   {
-                       for(i = 0; i < Width; i++)
-                       {
-                           if(Bpp == 4)
-                               gfxmem_lput(addr + (i * Bpp), Pen);
-                           else if(Bpp == 2)
-                               gfxmem_wput(addr + (i * Bpp), Pen);
-                           else
-                               gfxmem_bput(addr + (i * Bpp), Pen);
-                       }
-                   }
-                   return 1;
-               }
-           }
-           /* Do the fill-rect in the frame-buffer */
-           do_fillrect_frame_buffer(&ri, X, Y, Width, Height, Pen, Bpp, RGBFormat);
-           /* Now we do the on-screen display, if renderinfo points to it */
-           if (renderinfo_is_current_screen (&ri))
-           {
-               src = ri.Memory + X * Bpp + Y * ri.BytesPerRow;
-               X = X - picasso96_state.XOffset;
-               Y = Y - picasso96_state.YOffset;
-               if((int)X < 0) {
-                   Width = Width + X;
-                   X = 0;
-               }
-               if((int)Width < 1)
-                   return 1;
-               if((int)Y < 0) {
-                   Height = Height + Y;
-                   Y = 0;
-               }
-               if((int)Height < 1)
-                   return 1;
-               /* Argh - why does P96Speed do this to me, with FillRect only?! */
-               if((X < picasso96_state.Width) &&
-                   (Y < picasso96_state.Height))
-               {
-                   if(X + Width > picasso96_state.Width)
-                       Width = picasso96_state.Width - X;
-                   if(Y + Height > picasso96_state.Height)
-                       Height = picasso96_state.Height - Y;
-
-                   if (vsyncgfxwrite == 0)
-                       do_fillrect(src, X, Y, Width, Height, Pen, Bpp, RGBFormat);
-               }
-           }
-           result = 1;
-       }
-       else
-       {
-           /* We get here only if Mask != 0xFF */
-           if (Bpp != 1)
-           {
-               write_log ("WARNING - FillRect() has unhandled mask 0x%x with Bpp %d. Using fall-back routine.\n", Mask, Bpp);
-           }
-           else
-           {
-               Pen &= Mask;
-               Mask = ~Mask;
-               oldstart = ri.Memory + Y * ri.BytesPerRow + X * Bpp;
-               {
-                   uae_u8 *start = oldstart;
-                   uae_u8 *end = start + Height * ri.BytesPerRow;
-                   for (; start != end; start += ri.BytesPerRow)
-                   {
-                       uae_u8 *p = start;
-                       unsigned long cols;
-                       for (cols = 0; cols < Width; cols++)
-                       {
-                           uae_u32 tmpval = do_get_mem_byte (p + cols) & Mask;
-                           do_put_mem_byte (p + cols, (uae_u8)(Pen | tmpval));
-                       }
-                   }
-               }
-               if (vsyncgfxwrite == 0) {
-                   if (renderinfo_is_current_screen (&ri))
-                       do_blit(&ri, Bpp, X, Y, X, Y, Width, Height, BLIT_SRC, 0);
-               }
-               result = 1;
-           }
-       }
-    }
-    return result;
-}
-
-/*
-* BlitRect() is a generic (any chunky pixel format) rectangle copier
-* NOTE: If dstri is NULL, then we're only dealing with one RenderInfo area, and called from picasso_BlitRect()
-*
-* OpCodes:
-* 0 = FALSE:   dst = 0
-* 1 = NOR:     dst = ~(src | dst)
-* 2 = ONLYDST: dst = dst & ~src
-* 3 = NOTSRC:  dst = ~src
-* 4 = ONLYSRC: dst = src & ~dst
-* 5 = NOTDST:  dst = ~dst
-* 6 = EOR:     dst = src^dst
-* 7 = NAND:    dst = ~(src & dst)
-* 8 = AND:     dst = (src & dst)
-* 9 = NEOR:    dst = ~(src ^ dst)
-*10 = DST:     dst = dst
-*11 = NOTONLYSRC: dst = ~src | dst
-*12 = SRC:     dst = src
-*13 = NOTONLYDST: dst = ~dst | src
-*14 = OR:      dst = src | dst
-*15 = TRUE:    dst = 0xFF
-*/
-struct blitdata
-{
-    struct RenderInfo ri_struct;
-    struct RenderInfo dstri_struct;
-    struct RenderInfo *ri; /* Self-referencing pointers */
-    struct RenderInfo *dstri;
-    unsigned long srcx;
-    unsigned long srcy;
-    unsigned long dstx;
-    unsigned long dsty;
-    unsigned long width;
-    unsigned long height;
-    uae_u8 mask;
-    BLIT_OPCODE opcode;
-} blitrectdata;
-
-static int BlitRectHelper(void)
-{
-    struct RenderInfo *ri = blitrectdata.ri;
-    struct RenderInfo *dstri = blitrectdata.dstri;
-    unsigned long srcx = blitrectdata.srcx;
-    unsigned long srcy = blitrectdata.srcy;
-    unsigned long dstx = blitrectdata.dstx;
-    unsigned long dsty = blitrectdata.dsty;
-    unsigned long width = blitrectdata.width;
-    unsigned long height = blitrectdata.height;
-    uae_u8 mask = blitrectdata.mask;
-    BLIT_OPCODE opcode = blitrectdata.opcode;
-
-    uae_u8 Bpp = GetBytesPerPixel(ri->RGBFormat);
-    int can_do_visible_blit = 0;
-
-    if(opcode == BLIT_DST)
-    {
-       write_log ("WARNING: BlitRect() being called with opcode of BLIT_DST\n");
-       return 1;
-    }
-
-    /*
-    * If we have no destination RenderInfo, then we're dealing with a single-buffer action, called
-    * from picasso_BlitRect().  The code in do_blitrect_frame_buffer() deals with the frame-buffer,
-    * while the do_blit() code deals with the visible screen.
-    *
-    * If we have a destination RenderInfo, then we've been called from picasso_BlitRectNoMaskComplete()
-    * and we need to put the results on the screen from the frame-buffer.
-    */
-    if (dstri == NULL || dstri->Memory == ri->Memory)
-    {
-       if(mask != 0xFF && Bpp > 1)
-           mask = 0xFF;
-       dstri = ri;
-       can_do_visible_blit = 1;
-    }
-
-    /* Do our virtual frame-buffer memory first */
-    do_blitrect_frame_buffer(ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode);
-    /* Now we do the on-screen display, if renderinfo points to it */
-    if (vsyncgfxwrite == 1)
-       return 1;
-    if (renderinfo_is_current_screen (dstri))
-    {
-       if (mask == 0xFF || Bpp > 1) {
-           if(can_do_visible_blit)
-               do_blit(dstri, Bpp, srcx, srcy, dstx, dsty, width, height, opcode, 1);
-           else
-               do_blit(dstri, Bpp, dstx, dsty, dstx, dsty, width, height, opcode, 0);
-       } else {
-           do_blit(dstri, Bpp, dstx, dsty, dstx, dsty, width, height, opcode, 0);
-       }
-       P96TRACE(("Did do_blit 1 in BlitRect()\n"));
-    }
-    else
-    {
-       P96TRACE(("Did not do_blit 1 in BlitRect()\n"));
-    }
-
-    return 1;
-}
-
-static int BlitRect (uaecptr ri, uaecptr dstri,
-               unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty,
-               unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode)
-{
-    /* Set up the params */
-    CopyRenderInfoStructureA2U(ri, &blitrectdata.ri_struct);
-    blitrectdata.ri = &blitrectdata.ri_struct;
-    if(dstri) {
-       CopyRenderInfoStructureA2U(dstri, &blitrectdata.dstri_struct);
-       blitrectdata.dstri = &blitrectdata.dstri_struct;
-    } else {
-       blitrectdata.dstri = NULL;
-    }
-    blitrectdata.srcx = srcx;
-    blitrectdata.srcy = srcy;
-    blitrectdata.dstx = dstx;
-    blitrectdata.dsty = dsty;
-    blitrectdata.width = width;
-    blitrectdata.height = height;
-    blitrectdata.mask = mask;
-    blitrectdata.opcode = opcode;
-
-    return BlitRectHelper();
-}
-
-/***********************************************************
-BlitRect:
-***********************************************************
-* a0:  struct BoardInfo
-* a1:  struct RenderInfo
-* d0:  WORD SrcX
-* d1:  WORD SrcY
-* d2:  WORD DstX
-* d3:  WORD DstY
-* d4:  WORD Width
-* d5:  WORD Height
-* d6:  UBYTE Mask
-* d7:  uae_u32 RGBFormat
-***********************************************************/
-uae_u32 REGPARAM2 picasso_BlitRect (struct regstruct *regs)
-{
-    uaecptr renderinfo = m68k_areg (regs, 1);
-    unsigned long srcx = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long srcy = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long dstx = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long dsty = (uae_u16)m68k_dreg (regs, 3);
-    unsigned long width = (uae_u16)m68k_dreg (regs, 4);
-    unsigned long height = (uae_u16)m68k_dreg (regs, 5);
-    uae_u8 Mask = (uae_u8)m68k_dreg (regs, 6);
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-    P96TRACE(("BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n", srcx, srcy, dstx, dsty, width, height, Mask));
-    result = BlitRect(renderinfo, 0, srcx, srcy, dstx, dsty, width, height, Mask, BLIT_SRC);
-
-    return result;
-}
-
-/***********************************************************
-BlitRectNoMaskComplete:
-***********************************************************
-* a0:  struct BoardInfo
-* a1:  struct RenderInfo (src)
-* a2:  struct RenderInfo (dst)
-* d0:  WORD SrcX
-* d1:  WORD SrcY
-* d2:  WORD DstX
-* d3:  WORD DstY
-* d4:  WORD Width
-* d5:  WORD Height
-* d6:  UBYTE OpCode
-* d7:  uae_u32 RGBFormat
-* NOTE:        MUST return 0 in D0 if we're not handling this operation
-*      because the RGBFormat or opcode aren't supported.
-*      OTHERWISE return 1
-***********************************************************/
-uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete (struct regstruct *regs)
-{
-    uaecptr srcri = m68k_areg (regs, 1);
-    uaecptr dstri = m68k_areg (regs, 2);
-    unsigned long srcx = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long srcy = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long dstx = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long dsty = (uae_u16)m68k_dreg (regs, 3);
-    unsigned long width = (uae_u16)m68k_dreg (regs, 4);
-    unsigned long height = (uae_u16)m68k_dreg (regs, 5);
-    uae_u8 OpCode = m68k_dreg (regs, 6);
-    uae_u32 RGBFmt = m68k_dreg (regs, 7);
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    P96TRACE(("BlitRectNoMaskComplete() op 0x%2x, xy(%4d,%4d) --> xy(%4d,%4d), wh(%4d,%4d)\n",
-       OpCode, srcx, srcy, dstx, dsty, width, height));
-
-    result = BlitRect(srcri, dstri, srcx, srcy, dstx, dsty, width, height, 0xFF, OpCode);
-
-    return result;
-}
-
-/* This utility function is used both by BlitTemplate() and BlitPattern() */
-STATIC_INLINE void PixelWrite1(uae_u8 *mem, int bits, uae_u32 fgpen, uae_u32 mask)
-{
-    if (mask != 0xFF)
-       fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask);
-    do_put_mem_byte (mem + bits, fgpen);
-}
-
-STATIC_INLINE void PixelWrite2(uae_u8 *mem, int bits, uae_u32 fgpen)
-{
-    do_put_mem_word (((uae_u16 *)mem) + bits, fgpen);
-}
-
-STATIC_INLINE void PixelWrite3(uae_u8 *mem, int bits, uae_u32 fgpen)
-{
-    do_put_mem_byte (mem + bits * 3, fgpen & 0x000000FF);
-    *(uae_u16 *)(mem + bits * 3 + 1) = (fgpen & 0x00FFFF00) >> 8;
-}
-
-STATIC_INLINE void PixelWrite4(uae_u8 *mem, int bits, uae_u32 fgpen)
-{
-    do_put_mem_long (((uae_u32 *)mem) + bits, fgpen);
-}
-
-STATIC_INLINE void PixelWrite(uae_u8 *mem, int bits, uae_u32 fgpen, uae_u8 Bpp, uae_u32 mask)
-{
-    switch (Bpp) {
-    case 1:
-       if (mask != 0xFF)
-           fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask);
-       do_put_mem_byte (mem + bits, (uae_u8)fgpen);
-       break;
-    case 2:
-       do_put_mem_word (((uae_u16 *)mem) + bits, (uae_u16)fgpen);
-       break;
-    case 3:
-       do_put_mem_byte (mem + bits * 3, (uae_u8)fgpen);
-       *(uae_u16 *)(mem + bits * 3 + 1) = (fgpen & 0x00FFFF00) >> 8;
-       break;
-    case 4:
-       do_put_mem_long (((uae_u32 *)mem) + bits, fgpen);
-       break;
-    }
-}
-
-/*
-* BlitPattern:
-*
-* Synopsis:BlitPattern(bi, ri, pattern, X, Y, Width, Height, Mask, RGBFormat);
-* Inputs:
-* a0:struct BoardInfo *bi
-* a1:struct RenderInfo *ri
-* a2:struct Pattern *pattern
-* d0.w:X
-* d1.w:Y
-* d2.w:Width
-* d3.w:Height
-* d4.w:Mask
-* d7.l:RGBFormat
-*
-* This function is used to paint a pattern on the board memory using the blitter. It is called by
-* BltPattern, if a AreaPtrn is used with positive AreaPtSz. The pattern consists of a b/w image
-* using a single plane of image data which will be expanded repeatedly to the destination RGBFormat
-* using ForeGround and BackGround pens as well as draw modes. The width of the pattern data is
-* always 16 pixels (one word) and the height is calculated as 2^Size. The data must be shifted up
-* and to the left by XOffset and YOffset pixels at the beginning.
-*/
-uae_u32 REGPARAM2 picasso_BlitPattern (struct regstruct *regs)
-{
-    uaecptr rinf = m68k_areg (regs, 1);
-    uaecptr pinf = m68k_areg (regs, 2);
-    unsigned long X = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long Y = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long W = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long H = (uae_u16)m68k_dreg (regs, 3);
-    uae_u8 Mask = (uae_u8)m68k_dreg (regs, 4);
-    uae_u32 RGBFmt = m68k_dreg (regs, 7);
-    uae_u8 Bpp = GetBytesPerPixel (RGBFmt);
-    int inversion = 0;
-    struct RenderInfo ri;
-    struct Pattern pattern;
-    unsigned long rows;
-    uae_u32 fgpen;
-    uae_u8 *uae_mem;
-    int xshift;
-    unsigned long ysize_mask;
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    if(CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern))
-    {
-       Bpp = GetBytesPerPixel(ri.RGBFormat);
-       uae_mem = ri.Memory + Y * ri.BytesPerRow + X * Bpp; /* offset with address */
-
-       if (pattern.DrawMode & INVERS)
-           inversion = 1;
-
-       pattern.DrawMode &= 0x03;
-       if (Mask != 0xFF)
-       {
-           if(Bpp > 1)
-               Mask = 0xFF;
-
-           if(pattern.DrawMode == COMP)
-           {
-               write_log ("WARNING - BlitPattern() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n", Mask);
-           }
-           else
-           {
-               result = 1;
-           }
-       }
-       else
-       {
-           result = 1;
-       }
-
-       if(result)
-       {
-           /* write_log ("BlitPattern() xy(%d,%d), wh(%d,%d) draw 0x%x, off(%d,%d), ph %d\n",
-           X, Y, W, H, pattern.DrawMode, pattern.XOffset, pattern.YOffset, 1 << pattern.Size); */
-    #ifdef P96TRACING_ENABLED
-           DumpPattern(&pattern);
-    #endif
-           ysize_mask = (1 << pattern.Size) - 1;
-           xshift = pattern.XOffset & 15;
-
-           for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) {
-               unsigned long prow = (rows + pattern.YOffset) & ysize_mask;
-               unsigned int d = do_get_mem_word (((uae_u16 *)pattern.Memory) + prow);
-               uae_u8 *uae_mem2 = uae_mem;
-               unsigned long cols;
-
-               if (xshift != 0)
-                   d = (d << xshift) | (d >> (16 - xshift));
-
-               for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp << 4)
-               {
-                   long bits;
-                   long max = W - cols;
-                   unsigned int data = d;
-
-                   if (max > 16)
-                       max = 16;
-
-                   for (bits = 0; bits < max; bits++)
-                   {
-                       int bit_set = data & 0x8000;
-                       data <<= 1;
-                       switch (pattern.DrawMode) {
-                       case JAM1:
-                           if (inversion)
-                               bit_set = !bit_set;
-                           if (bit_set)
-                               PixelWrite (uae_mem2, bits, pattern.FgPen, Bpp, Mask);
-                           break;
-                       case JAM2:
-                           if (inversion)
-                               bit_set = !bit_set;
-                           if (bit_set)
-                               PixelWrite (uae_mem2, bits, pattern.FgPen, Bpp, Mask);
-                           else
-                               PixelWrite (uae_mem2, bits, pattern.BgPen, Bpp, Mask);
-                           break;
-                       case COMP:
-                           if (bit_set) {
-                               fgpen = pattern.FgPen;
-
-                               switch (Bpp) {
-                               case 1:
-                                   {
-                                       uae_u8 *addr = uae_mem2 + bits;
-                                       do_put_mem_byte (addr, (uae_u8)(do_get_mem_byte (addr) ^ fgpen));
-                                   }
-                                   break;
-                               case 2:
-                                   {
-                                       uae_u16 *addr = ((uae_u16 *)uae_mem2) + bits;
-                                       do_put_mem_word (addr, (uae_u16)( do_get_mem_word (addr) ^ fgpen));
-                                   }
-                                   break;
-                               case 3:
-                                   {
-                                       uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3);
-                                       do_put_mem_long (addr, do_get_mem_long (addr) ^ (fgpen & 0x00FFFFFF));
-                                   }
-                                   break;
-                               case 4:
-                                   {
-                                       uae_u32 *addr = ((uae_u32 *)uae_mem2) + bits;
-                                       do_put_mem_long (addr, do_get_mem_long (addr) ^ fgpen);
-                                   }
-                                   break;
-                               }
-                           }
-                           break;
-                       }
-                   }
-               }
-           }
-           #ifdef PIXEL_LOCK
-           flushpixels();
-           #endif
-
-           /* If we need to update a second-buffer (extra_mem is set), then do it only if visible! */
-           if (picasso_vidinfo.extra_mem && renderinfo_is_current_screen (&ri)) {
-               if (vsyncgfxwrite==0)
-                   do_blit(&ri, Bpp, X, Y, X, Y, W, H, BLIT_SRC, 0);
-           }
-           result = 1;
-       }
-    }
-
-    return result;
-}
-
-/*************************************************
-BlitTemplate:
-**************************************************
-* Synopsis: BlitTemplate(bi, ri, template, X, Y, Width, Height, Mask, RGBFormat);
-* a0: struct BoardInfo *bi
-* a1: struct RenderInfo *ri
-* a2: struct Template *template
-* d0.w: X
-* d1.w: Y
-* d2.w: Width
-* d3.w: Height
-* d4.w: Mask
-* d7.l: RGBFormat
-*
-* This function is used to paint a template on the board memory using the blitter.
-* It is called by BltPattern and BltTemplate. The template consists of a b/w image
-* using a single plane of image data which will be expanded to the destination RGBFormat
-* using ForeGround and BackGround pens as well as draw modes.
-***********************************************************************************/
-uae_u32 REGPARAM2 picasso_BlitTemplate (struct regstruct *regs)
-{
-    uae_u8 inversion = 0;
-    uaecptr rinf = m68k_areg (regs, 1);
-    uaecptr tmpl = m68k_areg (regs, 2);
-    unsigned long X = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long Y = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long W = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long H = (uae_u16)m68k_dreg (regs, 3);
-    uae_u16 Mask = (uae_u16)m68k_dreg (regs, 4);
-    struct Template tmp;
-    struct RenderInfo ri;
-    unsigned long rows;
-    int bitoffset;
-    uae_u32 fgpen;
-    uae_u8 *uae_mem, Bpp;
-    uae_u8 *tmpl_base;
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyTemplateStructureA2U (tmpl, &tmp))
-    {
-       Bpp = GetBytesPerPixel(ri.RGBFormat);
-       uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset into address */
-
-       if (tmp.DrawMode & INVERS)
-           inversion = 1;
-
-       tmp.DrawMode &= 0x03;
-
-       if (Mask != 0xFF)
-       {
-           if(Bpp > 1)
-               Mask = 0xFF;
-
-           if(tmp.DrawMode == COMP)
-           {
-               write_log ("WARNING - BlitTemplate() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n", Mask);
-               flushpixels();  //only need in the windows Version
-               return 0;
-           }
-           else
-           {
-               result = 1;
-           }
-       }
-       else
-       {
-           result = 1;
-       }
-#if 1
-       if (tmp.DrawMode == COMP) {
-           /* workaround, let native blitter handle COMP mode */
-           flushpixels();
-           return 0;
-       }
-#endif
-       if(result)
-       {
-           P96TRACE(("BlitTemplate() xy(%d,%d), wh(%d,%d) draw 0x%x fg 0x%x bg 0x%x \n",
-               X, Y, W, H, tmp.DrawMode, tmp.FgPen, tmp.BgPen));
-
-           bitoffset = tmp.XOffset % 8;
-
-#if defined(P96TRACING_ENABLED) && (P96TRACING_LEVEL > 0)
-           DumpTemplate(&tmp, W, H);
-#endif
-
-           tmpl_base = tmp.Memory + tmp.XOffset / 8;
-
-           for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) {
-               unsigned long cols;
-               uae_u8 *tmpl_mem = tmpl_base;
-               uae_u8 *uae_mem2 = uae_mem;
-               unsigned int data = *tmpl_mem;
-
-               for (cols = 0; cols < W; cols += 8, uae_mem2 += Bpp << 3) {
-                   unsigned int byte;
-                   long bits;
-                   long max = W - cols;
-
-                   if (max > 8)
-                       max = 8;
-
-                   data <<= 8;
-                   data |= *++tmpl_mem;
-
-                   byte = data >> (8 - bitoffset);
-
-                   for (bits = 0; bits < max; bits++) {
-                       int bit_set = (byte & 0x80);
-                       byte <<= 1;
-                       switch (tmp.DrawMode) {
-                       case JAM1:
-                           if (inversion)
-                               bit_set = !bit_set;
-                           if (bit_set) {
-                               fgpen = tmp.FgPen;
-                               PixelWrite(uae_mem2, bits, fgpen, Bpp, Mask);
-                           }
-                           break;
-                       case JAM2:
-                           if (inversion)
-                               bit_set = !bit_set;
-                           fgpen = tmp.BgPen;
-                           if (bit_set)
-                               fgpen = tmp.FgPen;
-
-                           PixelWrite(uae_mem2, bits, fgpen, Bpp, Mask);
-                           break;
-                       case COMP:
-                           if (bit_set) {
-                               fgpen = tmp.FgPen;
-
-                               switch (Bpp) {
-                               case 1:
-                                   {
-                                       uae_u8 *addr = uae_mem2 + bits;
-                                       do_put_mem_byte (addr, (uae_u8)(do_get_mem_byte (addr) ^ fgpen));
-                                   }
-                                   break;
-                               case 2:
-                                   {
-                                       uae_u16 *addr = ((uae_u16 *)uae_mem2) + bits;
-                                       do_put_mem_word (addr, (uae_u16)(do_get_mem_word (addr) ^ fgpen));
-                                   }
-                                   break;
-                               case 3:
-                                   {
-                                       uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3);
-                                       do_put_mem_long (addr, do_get_mem_long (addr) ^ (fgpen & 0x00FFFFFF));
-                                   }
-                                   break;
-                               case 4:
-                                   {
-                                       uae_u32 *addr = ((uae_u32 *)uae_mem2) + bits;
-                                       do_put_mem_long (addr, do_get_mem_long (addr) ^ fgpen);
-                                   }
-                                   break;
-                               }
-                           }
-                           break;
-                       }
-                   }
-               }
-           }
-
-           #ifdef PIXEL_LOCK
-           flushpixels();
-           #endif
-           /* If we need to update a second-buffer (extra_mem is set), then do it only if visible! */
-           if(picasso_vidinfo.extra_mem && renderinfo_is_current_screen(&ri)) {
-               if (vsyncgfxwrite == 0)
-                   do_blit(&ri, Bpp, X, Y, X, Y, W, H, BLIT_SRC, 0);
-           }
-           result = 1;
-       }
-}
-    return 1;
-}
-
-/*
-* CalculateBytesPerRow:
-* a0:  struct BoardInfo
-* d0:  uae_u16 Width
-* d7:  RGBFTYPE RGBFormat
-* This function calculates the amount of bytes needed for a line of
-* "Width" pixels in the given RGBFormat.
-*/
-uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (struct regstruct *regs)
-{
-    uae_u16 width = m68k_dreg (regs, 0);
-    uae_u32 type = m68k_dreg (regs, 7);
-
-    width = GetBytesPerPixel(type) * width;
-    P96TRACE(("CalculateBytesPerRow() = %d\n",width));
-
-    return width;
-}
-
-/*
-* SetDisplay:
-* a0: struct BoardInfo
-* d0: BOOL state
-* This function enables and disables the video display.
-*
-* NOTE: return the opposite of the state
-*/
-uae_u32 REGPARAM2 picasso_SetDisplay (struct regstruct *regs)
-{
-    uae_u32 state = m68k_dreg (regs, 0);
-    P96TRACE (("SetDisplay(%d)\n", state));
-    return !state;
-}
-
-void picasso_handle_hsync (void)
-{
-    static int p96hsync;
-
-    if (currprefs.gfxmem_size == 0)
-       return;
-    if (WIN32GFX_IsPicassoScreen () && currprefs.gfx_pfullscreen && currprefs.gfx_vsync) {
-       if (DirectDraw_GetVerticalBlankStatus ())
-           p96hsync = 0;
-    } else {
-       p96hsync--;
-    }
-    if (p96hsync <= 0) {
-       rtarea[get_long (RTAREA_BASE + 36) + 12 - 1]++;
-       p96hsync = p96syncrate;
-    }
-}
-
-void init_hz_p96 (void)
-{
-    int rate;
-    p96syncrate = maxvpos * vblank_hz;
-    if (isfullscreen ())
-       rate = DirectDraw_CurrentRefreshRate ();
-    else
-       rate = abs (currprefs.gfx_refreshrate);
-    if (rate <= 0)
-       rate = 60;
-    p96syncrate /= rate;
-}
-
-/* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */
-static void PlanarToChunky(struct RenderInfo *ri, struct BitMap *bm,
-                          unsigned long srcx, unsigned long srcy,
-                          unsigned long dstx, unsigned long dsty,
-                          unsigned long width, unsigned long height,
-                          uae_u8 mask)
-{
-    int j;
-
-    uae_u8 *PLANAR[8], *image = ri->Memory + dstx * GetBytesPerPixel (ri->RGBFormat) + dsty * ri->BytesPerRow;
-    int Depth = bm->Depth;
-    unsigned long rows, bitoffset = srcx & 7;
-    long eol_offset;
-
-    /* if (mask != 0xFF)
-    write_log ("P2C - pixel-width = %d, bit-offset = %d\n", width, bitoffset); */
-
-    /* Set up our bm->Planes[] pointers to the right horizontal offset */
-    for (j = 0; j < Depth; j++) {
-       uae_u8 *p = bm->Planes[j];
-       if (p != &all_zeros_bitmap && p != &all_ones_bitmap)
-           p += srcx / 8 + srcy * bm->BytesPerRow;
-       PLANAR[j] = p;
-       if ((mask & (1 << j)) == 0)
-           PLANAR[j] = &all_zeros_bitmap;
-    }
-    eol_offset = (long)bm->BytesPerRow - (long)((width + 7) >> 3);
-    for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) {
-       unsigned long cols;
-
-       for (cols = 0; cols < width; cols += 8) {
-           int k;
-           uae_u32 a = 0, b = 0;
-           unsigned int msk = 0xFF;
-           long tmp = cols + 8 - width;
-           if (tmp > 0) {
-               msk <<= tmp;
-               b = do_get_mem_long ((uae_u32 *)(image + cols + 4));
-               if (tmp < 4)
-                   b &= 0xFFFFFFFF >> (32 - tmp * 8);
-               else if (tmp > 4) {
-                   a = do_get_mem_long ((uae_u32 *)(image + cols));
-                   a &= 0xFFFFFFFF >> (64 - tmp * 8);
-               }
-           }
-           for (k = 0; k < Depth; k++) {
-               unsigned int data;
-               if (PLANAR[k] == &all_zeros_bitmap)
-                   data = 0;
-               else if (PLANAR[k] == &all_ones_bitmap)
-                   data = 0xFF;
-               else {
-                   data = (uae_u8)(do_get_mem_word ((uae_u16 *)PLANAR[k]) >> (8 - bitoffset));
-                   PLANAR[k]++;
-               }
-               data &= msk;
-               a |= p2ctab[data][0] << k;
-               b |= p2ctab[data][1] << k;
-           }
-           do_put_mem_long ((uae_u32 *)(image + cols), a);
-           do_put_mem_long ((uae_u32 *)(image + cols + 4), b);
-       }
-       for (j = 0; j < Depth; j++) {
-           if (PLANAR[j] != &all_zeros_bitmap && PLANAR[j] != &all_ones_bitmap) {
-               PLANAR[j] += eol_offset;
-           }
-       }
-    }
-}
-
-/*
-* BlitPlanar2Chunky:
-* a0: struct BoardInfo *bi
-* a1: struct BitMap *bm - source containing planar information and assorted details
-* a2: struct RenderInfo *ri - dest area and its details
-* d0.w: SrcX
-* d1.w: SrcY
-* d2.w: DstX
-* d3.w: DstY
-* d4.w: SizeX
-* d5.w: SizeY
-* d6.b: MinTerm - uh oh!
-* d7.b: Mask - uh oh!
-*
-* This function is currently used to blit from planar bitmaps within system memory to chunky bitmaps
-* on the board. Watch out for plane pointers that are 0x00000000 (represents a plane with all bits "0")
-* or 0xffffffff (represents a plane with all bits "1").
-*/
-uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky (struct regstruct *regs)
-{
-    uaecptr bm = m68k_areg (regs, 1);
-    uaecptr ri = m68k_areg (regs, 2);
-    unsigned long srcx = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long srcy = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long dstx = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long dsty = (uae_u16)m68k_dreg (regs, 3);
-    unsigned long width = (uae_u16)m68k_dreg (regs, 4);
-    unsigned long height = (uae_u16)m68k_dreg (regs, 5);
-    uae_u8 minterm = m68k_dreg (regs, 6) & 0xFF;
-    uae_u8 mask = m68k_dreg (regs, 7) & 0xFF;
-    struct RenderInfo local_ri;
-    struct BitMap local_bm;
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    if (minterm != 0x0C) {
-       write_log ("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n",
-           minterm);
-    }
-    else if(CopyRenderInfoStructureA2U (ri, &local_ri) &&
-            CopyBitMapStructureA2U (bm, &local_bm))
-    {
-       P96TRACE(("BlitPlanar2Chunky(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n",
-           srcx, srcy, dstx, dsty, width, height, minterm, mask, local_bm.Depth));
-       P96TRACE(("P2C - BitMap has %d BPR, %d rows\n", local_bm.BytesPerRow, local_bm.Rows));
-       PlanarToChunky (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, mask);
-       if (renderinfo_is_current_screen (&local_ri))
-       {
-           if (!vsyncgfxwrite)
-               do_blit(&local_ri, GetBytesPerPixel(local_ri.RGBFormat), dstx, dsty, dstx, dsty, width, height, BLIT_SRC, 0);
-       }
-       result = 1;
-    }
-
-    return result;
-}
-
-/* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */
-static void PlanarToDirect(struct RenderInfo *ri, struct BitMap *bm,
-                          unsigned long srcx, unsigned long srcy,
-                          unsigned long dstx, unsigned long dsty,
-                          unsigned long width, unsigned long height, uae_u8 mask,
-                          struct ColorIndexMapping *cim)
-{
-    int j;
-    int bpp = GetBytesPerPixel(ri->RGBFormat);
-    uae_u8 *PLANAR[8];
-    uae_u8 *image = ri->Memory + dstx * bpp + dsty * ri->BytesPerRow;
-    int Depth = bm->Depth;
-    unsigned long rows;
-    long eol_offset;
-
-    if(!bpp)
-       return;
-
-    /* Set up our bm->Planes[] pointers to the right horizontal offset */
-    for (j = 0; j < Depth; j++) {
-       uae_u8 *p = bm->Planes[j];
-       if (p != &all_zeros_bitmap && p != &all_ones_bitmap)
-           p += srcx / 8 + srcy * bm->BytesPerRow;
-       PLANAR[j] = p;
-       if ((mask & (1 << j)) == 0)
-           PLANAR[j] = &all_zeros_bitmap;
-    }
-
-    eol_offset = (long)bm->BytesPerRow - (long)((width + (srcx & 7)) >> 3);
-    for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) {
-       unsigned long cols;
-       uae_u8 *image2 = image;
-       unsigned int bitoffs = 7 - (srcx & 7);
-       int i;
-
-       for (cols = 0; cols < width; cols ++) {
-           int v = 0, k;
-           for (k = 0; k < Depth; k++) {
-               if (PLANAR[k] == &all_ones_bitmap)
-                   v |= 1 << k;
-               else if (PLANAR[k] != &all_zeros_bitmap) {
-                   v |= ((*PLANAR[k] >> bitoffs) & 1) << k;
-               }
-           }
-
-           switch (bpp) {
-           case 2:
-               do_put_mem_word ((uae_u16 *)image2, (uae_u16)(cim->Colors[v]));
-               image2 += 2;
-               break;
-           case 3:
-               do_put_mem_byte (image2++, (uae_u8)cim->Colors[v]);
-               do_put_mem_word ((uae_u16 *)image2, (uae_u16)((cim->Colors[v] & 0x00FFFF00) >> 8));
-               image2 += 2;
-               break;
-           case 4:
-               do_put_mem_long ((uae_u32 *)image2, cim->Colors[v]);
-               image2 += 4;
-               break;
-           }
-           bitoffs--;
-           bitoffs &= 7;
-           if (bitoffs == 7) {
-               int k;
-               for (k = 0; k < Depth; k++) {
-                   if (PLANAR[k] != &all_zeros_bitmap && PLANAR[k] != &all_ones_bitmap) {
-                       PLANAR[k]++;
-                   }
-               }
-           }
-       }
-
-       for (i = 0; i < Depth; i++) {
-           if (PLANAR[i] != &all_zeros_bitmap && PLANAR[i] != &all_ones_bitmap) {
-               PLANAR[i] += eol_offset;
-           }
-       }
-    }
-}
-
-/*
-* BlitPlanar2Direct:
-*
-* Synopsis:
-* BlitPlanar2Direct(bi, bm, ri, cim, SrcX, SrcY, DstX, DstY, SizeX, SizeY, MinTerm, Mask);
-* Inputs:
-* a0:struct BoardInfo *bi
-* a1:struct BitMap *bm
-* a2:struct RenderInfo *ri
-* a3:struct ColorIndexMapping *cmi
-* d0.w:SrcX
-* d1.w:SrcY
-* d2.w:DstX
-* d3.w:DstY
-* d4.w:SizeX
-* d5.w:SizeY
-* d6.b:MinTerm
-* d7.b:Mask
-*
-* This function is currently used to blit from planar bitmaps within system memory to direct color
-* bitmaps (15, 16, 24 or 32 bit) on the board. Watch out for plane pointers that are 0x00000000 (represents
-* a plane with all bits "0") or 0xffffffff (represents a plane with all bits "1"). The ColorIndexMapping is
-* used to map the color index of each pixel formed by the bits in the bitmap's planes to a direct color value
-* which is written to the destination RenderInfo. The color mask and all colors within the mapping are words,
-* triple bytes or longwords respectively similar to the color values used in FillRect(), BlitPattern() or
-* BlitTemplate().
-*/
-uae_u32 REGPARAM2 picasso_BlitPlanar2Direct (struct regstruct *regs)
-{
-    uaecptr bm = m68k_areg (regs, 1);
-    uaecptr ri = m68k_areg (regs, 2);
-    uaecptr cim = m68k_areg (regs, 3);
-    unsigned long srcx = (uae_u16)m68k_dreg (regs, 0);
-    unsigned long srcy = (uae_u16)m68k_dreg (regs, 1);
-    unsigned long dstx = (uae_u16)m68k_dreg (regs, 2);
-    unsigned long dsty = (uae_u16)m68k_dreg (regs, 3);
-    unsigned long width = (uae_u16)m68k_dreg (regs, 4);
-    unsigned long height = (uae_u16)m68k_dreg (regs, 5);
-    uae_u8 minterm = m68k_dreg (regs, 6);
-    uae_u8 Mask = m68k_dreg (regs, 7);
-    struct RenderInfo local_ri;
-    struct BitMap local_bm;
-    struct ColorIndexMapping local_cim;
-    uae_u32 result = 0;
-
-#ifdef PIXEL_LOCK
-    flushpixels();
-#endif
-#ifdef NOBLIT
-    return 0;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    wgfx_flushline ();
-#endif
-
-    if (minterm != 0x0C)
-    {
-       write_log ("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n",
-           minterm);
-    }
-    else if(CopyRenderInfoStructureA2U (ri, &local_ri) &&
-            CopyBitMapStructureA2U (bm, &local_bm))
-    {
-       Mask = 0xFF;
-       CopyColorIndexMappingA2U (cim, &local_cim);
-       P96TRACE(("BlitPlanar2Direct(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n",
-           srcx, srcy, dstx, dsty, width, height, minterm, Mask, local_bm.Depth));
-       PlanarToDirect (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, Mask, &local_cim);
-       #ifdef PIXEL_LOCK
-       flushpixels();
-       #endif
-       if (renderinfo_is_current_screen (&local_ri)) {
-           if (!vsyncgfxwrite)
-               do_blit(&local_ri, GetBytesPerPixel(local_ri.RGBFormat), dstx, dsty, dstx, dsty, width, height, BLIT_SRC, 0);
-       }
-       result = 1;
-    }
-
-    return result;
-}
-
-/* @@@ - Work to be done here!
-*
-* The address is the offset into our Picasso96 frame-buffer (pointed to by gfxmem_start)
-* where the value was put.
-*
-* Porting work: on some machines you may not need these functions, ie. if the memory for the
-* Picasso96 frame-buffer is directly viewable or directly blittable.  On Win32 with DirectX,
-* this is not the case.  So I provide some write-through functions (as per Mathias' orders!)
-*/
-#ifdef PIXEL_LOCK
-
-struct frect
-{
-    int top, left, right, bottom;
-    int first;
-};
-
-STATIC_INLINE init_refresh(struct frect *r)
-{
-    r->first = 1;
-    r->left = picasso96_state.Width * picasso96_state.BytesPerPixel;
-    r->top = picasso96_state.Height;
-    r->right = -1;
-    r->bottom = -1;
-}
-
-STATIC_INLINE flush_it(struct frect *r)
-{
-    if (r->right >= 0 && r->bottom >= 0) {
-       DX_Invalidate (r->left / picasso96_state.BytesPerPixel, r->top,
-           (r->right - r->left) / picasso96_state.BytesPerPixel + 1, (r->bottom - r->top) + 1);
-    }
-    init_refresh(r);
-}
-
-#define FLUSH_MIN 30
-STATIC_INLINE void flush_refresh(int x, int y, struct frect *r)
-{
-    if (x < r->left) {
-       if (!r->first && r->left - x > FLUSH_MIN) {
-           flush_it(r);
-           flush_refresh(x, y, r);
-           return;
-       }
-       r->left = x;
-    }
-    if (y < r->top) {
-       if (!r->first && r->top - y > FLUSH_MIN) {
-           flush_it(r);
-           flush_refresh(x, y, r);
-           return;
-       }
-       r->top = y;
-    }
-    if (x > r->right) {
-       if (!r->first && x - r->right > FLUSH_MIN) {
-           flush_it(r);
-           flush_refresh(x, y, r);
-           return;
-       }
-       r->right = x;
-    }
-    if (y > r->bottom) {
-       if (!r->first && y - r->bottom > FLUSH_MIN) {
-           flush_it(r);
-           flush_refresh(x, y, r);
-           return;
-       }
-       r->bottom = y;
-    }
-    r->first = 0;
-}
-
-static void flushpixels_2(void)
-{
-    int i;
-    uae_u8 *dst;
-    int lock = 0;
-    int needrefresh;
-    struct frect r;
-
-    if (pixelcount == 0)
-       return;
-    if (!picasso_on) {
-       pixelcount = 0;
-       return;
-    }
-    needrefresh = DirectDraw_GetLockableType() == secondary_surface;
-
-    if(DirectDraw_IsLocked() == FALSE) {
-       dst = gfx_lock_picasso ();
-       lock = 1;
-    } else {
-       dst = picasso96_state.HostAddress;
-    }
-    if (!dst)
-       goto out;
-
-    init_refresh(&r);
-
-    if(picasso_vidinfo.rgbformat != picasso96_state.RGBFormat) {
-
-       int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat);
-       if (picasso96_state.RGBFormat != RGBFB_CHUNKY) {
-           write_log ("ERROR - flushpixels() has non RGBFB_CHUNKY mode!\n");
-           goto out;
-       }
-       for (i = 0; i < pixelcount; i++) {
-           int i2 = pixelbase[i].size;
-           uaecptr addr = pixelbase[i].addr;
-           uae_u32 value = pixelbase[i].value;
-           int y = addr / picasso96_state.BytesPerRow;
-           int xbytes = addr % picasso96_state.BytesPerRow;
-
-           if (! picasso_vidinfo.extra_mem)
-               break;
-
-           if (xbytes < picasso96_state.Width * picasso96_state.BytesPerPixel && y < picasso96_state.Height) {
-               if(psiz == 4) {
-                   uae_u8 *addr;
-
-                   addr = dst + y * picasso_vidinfo.rowbytes + xbytes * 4;
-                   if (i2 == 4) {
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[value & 0xff];
-                       addr += 4;
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[(value >> 8) & 0xff];
-                       addr += 4;
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[(value >> 16) & 0xff];
-                       addr += 4;
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[(value >> 24) & 0xff];
-                       break;
-                   } else if (i2 == 2) {
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[(value >> 8) & 0xff];
-                       addr += 4;
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[value & 0xff];
-                       break;
-                   } else if (i2 == 1) {
-                       *(uae_u32 *) addr = picasso_vidinfo.clut[value & 0xff];
-                       break;
-                   }
-               } else {
-                   uae_u8 *addr;
-
-                   addr = dst + y * picasso_vidinfo.rowbytes + xbytes * 2;
-                   if (i2 == 4) {
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[value & 0xff];
-                       addr += 2;
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[(value >> 8) & 0xff];
-                       addr += 2;
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[(value >> 16) & 0xff];
-                       addr += 2;
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[(value >> 24) & 0xff];
-                       break;
-                   } else if (i2 == 2) {
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[(value >> 8) & 0xff];
-                       addr+=2;
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[value & 0xff];
-                       break;
-                   } else if (i2 == 1) {
-                       *(uae_u16 *) addr = picasso_vidinfo.clut[value & 0xff];
-                       break;
-                   }
-               }
-               if (needrefresh)
-                   flush_refresh(xbytes, y, &r);
-           }
-       }
-
-    } else {
-
-       for (i = 0;i < pixelcount; i++) {
-           uaecptr addr = pixelbase[i].addr;
-           uae_u32 value = pixelbase[i].value;
-           int y = addr / picasso96_state.BytesPerRow;
-           int xbytes = addr % picasso96_state.BytesPerRow;
-           uae_u8 *p = dst + y * picasso_vidinfo.rowbytes + xbytes;
-
-           if (! picasso_vidinfo.extra_mem)
-               continue;
-
-           if (xbytes < picasso96_state.Width * picasso96_state.BytesPerPixel && y < picasso96_state.Height) {
-               switch (pixelbase[i].size)
-               {
-                   case 1:
-                   *(uae_u8 *)p = value;
-                   break;
-                   case 2:
-                   *(uae_u16 *)p = value;
-                   break;
-                   case 4:
-                   *(uae_u32 *)p = value;
-                   break;
-               }
-               if (needrefresh)
-                   flush_refresh(xbytes, y, &r);
-           }
-       }
-    }
-out:;
-    if(lock)
-       gfx_unlock_picasso();
-    pixelcount = 0;
-    flush_it(&r);
-}
-
-
-static int watchbuffersize;
-static void **watchbuffer;
-static uae_u8 *secondarygfx;
-extern uae_u8 *natmem_offset;
-
-static void dowatch(void)
-{
-    uae_u8 *dst;
-    int lock = 0;
-    int needrefresh;
-    struct frect r;
-    ULONG pagesize;
-    ULONG_PTR cnt;
-    int i, j, total;
-
-    if (!secondarygfx) {
-       SYSTEM_INFO si;
-       GetSystemInfo(&si);
-       secondarygfx = xmalloc (allocated_gfxmem);
-       watchbuffersize = allocated_gfxmem / si.dwPageSize + 1;
-       watchbuffer = xmalloc (sizeof(void*) * watchbuffersize);
-    }
-
-    cnt = watchbuffersize;
-    if (GetWriteWatch(WRITE_WATCH_FLAG_RESET, gfxmemory, allocated_gfxmem, watchbuffer, &cnt, &pagesize)) {
-       write_log ("GetWriteWatch failed, err=%d\n", GetLastError());
-       return;
-    }
-    if (cnt == 0)
-       return;
-
-    needrefresh = DirectDraw_GetLockableType() == secondary_surface;
-
-    if(DirectDraw_IsLocked() == FALSE) {
-       dst = gfx_lock_picasso ();
-       lock = 1;
-    } else {
-       dst = picasso96_state.HostAddress;
-    }
-    if (!dst)
-       goto out;
-
-    init_refresh(&r);
-
-    total = 0;
-    for (i = 0; i < cnt; i++) {
-       uae_u8 *p1 = watchbuffer[i];
-       uae_u8 *p2 = secondarygfx + (p1 - gfxmemory);
-       uaecptr addr = (uaecptr)(p1 - (p96ram_start + natmem_offset)); /* bleh.. */
-       int y, xbytes;
-       uae_u8 *p;
-       int tonextrow_p, tonextrow_addr;
-
-       if (addr >= picasso96_state.Extent)
-           continue;
-       addr -= (picasso96_state.XOffset * picasso96_state.BytesPerPixel)
-           + (picasso96_state.YOffset * picasso96_state.BytesPerRow);
-       y = addr / picasso96_state.BytesPerRow;
-       if (y >= picasso96_state.Height)
-           continue;
-       xbytes = addr % picasso96_state.BytesPerRow;
-       p = dst + y * picasso_vidinfo.rowbytes + xbytes;
-       tonextrow_p = picasso_vidinfo.rowbytes - xbytes;
-       tonextrow_addr = (picasso96_state.BytesPerRow - xbytes) / 4;
-
-       for (j = 0; j < pagesize / 4; j++) {
-           uae_u32 *pp1 = (uae_u32*)p1;
-           uae_u32 *pp2 = (uae_u32*)p2;
-           if (pp1[j] != pp2[j]) {
-               pp2[j] = pp1[j];
-               *(uae_u32*)p = pp1[j];
-               if (needrefresh)
-                   flush_refresh(xbytes, y, &r);
-               total++;
-           }
-           p += 4;
-           xbytes += 4;
-           if (xbytes >= picasso96_state.Width * picasso96_state.BytesPerPixel) {
-               xbytes -= picasso96_state.Width * picasso96_state.BytesPerPixel;
-               y++;
-               if (y >= picasso96_state.Height)
-                   break;
-               p += tonextrow_p;
-               j += tonextrow_addr;
-           }
-       }
-    }
-    write_log ("%d ", total);
-out:;
-    if(lock)
-       gfx_unlock_picasso();
-    flush_it(&r);
-}
-
-
-static void flushpixels(void)
-{
-    flushpixels_2();
-    dowatch();
-}
-#endif
-
-static void write_gfx_x (uaecptr addr, uae_u32 value, int size)
-{
-    uaecptr oldaddr = addr;
-    int y;
-#ifdef LOCK_UNLOCK_MADNESS
-    int x, xbytes;
-    uae_u8 *dst;
-#endif
-
-    if (!picasso_on)
-       return;
-
-#ifdef PIXEL_LOCK
-    addr += gfxmem_start;
-    /* Check to see if this needs to be written through to the display, or was it an "offscreen" area? */
-    if (addr >= picasso96_state.Address && addr + size < picasso96_state.Extent) {
-       addr -= picasso96_state.Address + (picasso96_state.XOffset * picasso96_state.BytesPerPixel)
-           + (picasso96_state.YOffset * picasso96_state.BytesPerRow);
-       if (pixelcount > MAXFLUSHPIXEL)
-           flushpixels_2();
-       pixelbase[pixelcount].addr = addr;
-       pixelbase[pixelcount].value = value;
-       pixelbase[pixelcount++].size = size;
-    }
-    return;
-#endif
-#ifndef LOCK_UNLOCK_MADNESS
-    /*
-     * Several writes to successive memory locations are a common access pattern.
-     * Try to optimize it.
-     */
-    if (addr >= wgfx_linestart && addr + size <= wgfx_lineend) {
-       if (addr < wgfx_min)
-           wgfx_min = addr;
-       if (addr + size > wgfx_max)
-           wgfx_max = addr + size;
-       return;
-    } else
-       wgfx_flushline ();
-#endif
-
-    addr += gfxmem_start;
-    /* Check to see if this needs to be written through to the display, or was it an "offscreen" area? */
-    if (addr < picasso96_state.Address || addr + size >= picasso96_state.Extent)
-       return;
-    addr -= picasso96_state.Address + (picasso96_state.XOffset * picasso96_state.BytesPerPixel)
-       + (picasso96_state.YOffset * picasso96_state.BytesPerRow);
-
-    y = addr / picasso96_state.BytesPerRow;
-    xbytes = addr % picasso96_state.BytesPerRow;
-    x = xbytes / picasso96_state.BytesPerPixel;
-
-#ifdef LOCK_UNLOCK_MADNESS
-    if (! picasso_vidinfo.extra_mem) {
-       pixelcount = 0;
-       return;
-    }
-
-    if (x < picasso96_state.Width && y < picasso96_state.Height) {
-       dst = picasso96_state.HostAddress;
-       //dst = gfx_lock_picasso ();
-       if (dst) {
-           switch (size)
-           {
-               case 1:
-               *(uae_u8 *)(dst + y * picasso_vidinfo.rowbytes + xbytes) = value;
-               break;
-               case 2:
-               do_put_mem_word ((uae_u16 *)(dst + y * picasso_vidinfo.rowbytes + xbytes), value);
-               break;
-               case 4:
-               do_put_mem_long ((uae_u32 *)(dst + y * picasso_vidinfo.rowbytes + xbytes), value);
-               break;
-           }
-           //gfx_unlock_picasso ();
-       }
-    }
-#else
-    if (y >= picasso96_state.Height)
-       return;
-    wgfx_linestart = picasso96_state.Address - gfxmem_start + y * picasso96_state.BytesPerRow;
-    wgfx_lineend = wgfx_linestart + picasso96_state.BytesPerRow;
-    wgfx_y = y;
-    wgfx_min = oldaddr;
-    wgfx_max = oldaddr + size;
-#endif
-}
-
-static uae_u32 REGPARAM2 gfxmem_lget (uaecptr addr)
-{
-    uae_u8 *m;
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    m = gfxmemory + addr;
-    return do_get_mem_long((uae_u32*)m);
-}
-
-static uae_u32 REGPARAM2 gfxmem_wget (uaecptr addr)
-{
-    uae_u8 *m;
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    m = gfxmemory + addr;
-    return do_get_mem_word((uae_u16*)m);
-}
-
-static uae_u32 REGPARAM2 gfxmem_bget (uaecptr addr)
-{
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    return gfxmemory[addr];
-}
-
-static void REGPARAM2 gfxmem_lput (uaecptr addr, uae_u32 l)
-{
-    uae_u8 *m;
-#ifdef SWAPSPEEDUP
-    __asm {         //byteswap now
-       mov eax,l
-       bswap eax
-       mov l,eax
-    }
-#endif
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-
-    m = gfxmemory + addr;
-#ifdef SWAPSPEEDUP
-    *m = l;
-#else
-    do_put_mem_long((uae_u32*)m, l);
-#endif
-}
-
-static void REGPARAM2 gfxmem_wput (uaecptr addr, uae_u32 w)
-{
-    uae_u8 *m;
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    m = gfxmemory + addr;
-    do_put_mem_word((uae_u16*)m, w);
-}
-
-static void REGPARAM2 gfxmem_bput (uaecptr addr, uae_u32 b)
-{
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    gfxmemory[addr] = b;
-}
-
-static int REGPARAM2 gfxmem_check (uaecptr addr, uae_u32 size)
-{
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    return (addr + size) < allocated_gfxmem;
-}
-
-static uae_u8 *REGPARAM2 gfxmem_xlate (uaecptr addr)
-{
-    addr -= gfxmem_start & gfxmem_mask;
-    addr &= gfxmem_mask;
-    return gfxmemory + addr;
-}
-
-addrbank gfxmem_bank = {
-    gfxmem_lget, gfxmem_wget, gfxmem_bget,
-    gfxmem_lput, gfxmem_wput, gfxmem_bput,
-    gfxmem_xlate, gfxmem_check, NULL, "RTG RAM",
-    dummy_lgeti, dummy_wgeti, ABFLAG_RAM
-};
-
-/* Call this function first, near the beginning of code flow
-* Place in InitGraphics() which seems reasonable...
-* Also put it in reset_drawing() for safe-keeping.  */
-void InitPicasso96 (void)
-{
-    have_done_picasso = 0;
-    pixelcount = 0;
-    palette_changed = 0;
-//fastscreen
-    oldscr = 0;
-//fastscreen
-    memset (&picasso96_state, 0, sizeof(struct picasso96_state_struct));
-
-    if (1) {
-       int i, count;
-
-       for (i = 0; i < 256; i++) {
-           p2ctab[i][0] = (((i & 128) ? 0x01000000 : 0)
-               | ((i & 64) ? 0x010000 : 0)
-               | ((i & 32) ? 0x0100 : 0)
-               | ((i & 16) ? 0x01 : 0));
-           p2ctab[i][1] = (((i & 8) ? 0x01000000 : 0)
-               | ((i & 4) ? 0x010000 : 0)
-               | ((i & 2) ? 0x0100 : 0)
-               | ((i & 1) ? 0x01 : 0));
-       }
-       count = 0;
-       while (DisplayModes[count].depth >= 0)
-           count++;
-       for (i = 0; i < count; i++) {
-           switch (DisplayModes[i].depth) {
-           case 1:
-               if (DisplayModes[i].res.width > chunky.width)
-                   chunky.width = DisplayModes[i].res.width;
-               if (DisplayModes[i].res.height > chunky.height)
-                   chunky.height = DisplayModes[i].res.height;
-               break;
-           case 2:
-               if (DisplayModes[i].res.width > hicolour.width)
-                   hicolour.width = DisplayModes[i].res.width;
-               if (DisplayModes[i].res.height > hicolour.height)
-                   hicolour.height = DisplayModes[i].res.height;
-               break;
-           case 3:
-               if (DisplayModes[i].res.width > truecolour.width)
-                   truecolour.width = DisplayModes[i].res.width;
-               if (DisplayModes[i].res.height > truecolour.height)
-                   truecolour.height = DisplayModes[i].res.height;
-               break;
-           case 4:
-               if (DisplayModes[i].res.width > alphacolour.width)
-                   alphacolour.width = DisplayModes[i].res.width;
-               if (DisplayModes[i].res.height > alphacolour.height)
-                   alphacolour.height = DisplayModes[i].res.height;
-               break;
-           }
-       }
-       //ShowSupportedResolutions ();
-    }
-}
-
-uae_u8 *restore_p96 (uae_u8 *src)
-{
-    return src;
-}
-
-uae_u8 *save_p96 (int *len, uae_u8 *dstptr)
-{
-    uae_u8 *dstbak,*dst;
-
-    //dstbak = dst = malloc (16 + 12 + 1 + 1);
-    return 0;
-}
-
-#endif
index 65f83289ed5e9e6ed8ea633678b73839b134694c..6ff65e92f45b1d5c6f9d3a8936232fc1924a5787 100755 (executable)
 #define IDS_NUMSG_EXPROMNEED            332
 #define IDS_HARDDRIVESAFETYWARNING2     333
 #define IDM_DBGCONTEXTMENU              334
+#define IDS_SB_FAVORITENAME             334
 #define IDD_DBGMEMINPUT                 335
+#define IDS_SB_CUSTOMEVENT              335
 #define IDS_QS_MODELS                   1000
 #define IDS_QS_MODEL_A500               1001
 #define IDS_QS_MODEL_A500P              1002
 #define IDC_CREATE_NAME                 1707
 #define IDC_FILTERAUTORES               1708
 #define IDC_SOUND_AUTO                  1709
+#define IDC_FILTERKEEPASPECT            1709
 #define IDC_CS_RTC                      1710
 #define IDC_CS_CIAA_TOD1                1711
 #define IDC_CS_CIAA_TOD2                1712
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NO_MFC                     1
 #define _APS_3D_CONTROLS                     1
-#define _APS_NEXT_RESOURCE_VALUE        336
+#define _APS_NEXT_RESOURCE_VALUE        335
 #define _APS_NEXT_COMMAND_VALUE         40045
 #define _APS_NEXT_CONTROL_VALUE         1789
 #define _APS_NEXT_SYMED_VALUE           101
index 65f83289ed5e9e6ed8ea633678b73839b134694c..6ff65e92f45b1d5c6f9d3a8936232fc1924a5787 100755 (executable)
 #define IDS_NUMSG_EXPROMNEED            332
 #define IDS_HARDDRIVESAFETYWARNING2     333
 #define IDM_DBGCONTEXTMENU              334
+#define IDS_SB_FAVORITENAME             334
 #define IDD_DBGMEMINPUT                 335
+#define IDS_SB_CUSTOMEVENT              335
 #define IDS_QS_MODELS                   1000
 #define IDS_QS_MODEL_A500               1001
 #define IDS_QS_MODEL_A500P              1002
 #define IDC_CREATE_NAME                 1707
 #define IDC_FILTERAUTORES               1708
 #define IDC_SOUND_AUTO                  1709
+#define IDC_FILTERKEEPASPECT            1709
 #define IDC_CS_RTC                      1710
 #define IDC_CS_CIAA_TOD1                1711
 #define IDC_CS_CIAA_TOD2                1712
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NO_MFC                     1
 #define _APS_3D_CONTROLS                     1
-#define _APS_NEXT_RESOURCE_VALUE        336
+#define _APS_NEXT_RESOURCE_VALUE        335
 #define _APS_NEXT_COMMAND_VALUE         40045
 #define _APS_NEXT_CONTROL_VALUE         1789
 #define _APS_NEXT_SYMED_VALUE           101
index be90d711285d030c9f3f5f3ccaa74f7cdbab6e0a..0856b9f71f1f7b468f5d2e128d40522af91d28a7 100755 (executable)
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Accelerator
-//
-
-IDR_DBGACCEL ACCELERATORS 
-BEGIN
-    VK_F1,          ID_DBG_PAGE1,           VIRTKEY, NOINVERT
-    VK_F2,          ID_DBG_PAGE2,           VIRTKEY, NOINVERT
-    VK_F3,          ID_DBG_PAGE3,           VIRTKEY, NOINVERT
-    VK_F4,          ID_DBG_PAGE4,           VIRTKEY, NOINVERT
-    VK_F5,          ID_DBG_PAGE5,           VIRTKEY, NOINVERT
-    VK_F6,          ID_DBG_PAGE6,           VIRTKEY, NOINVERT
-    VK_F7,          ID_DBG_PAGE7,           VIRTKEY, NOINVERT
-    VK_F8,          ID_DBG_PAGE8,           VIRTKEY, NOINVERT
-    VK_F9,          ID_DBG_PAGE9,           VIRTKEY, NOINVERT
-    VK_F11,         ID_DBG_STEP_OVER,       VIRTKEY, NOINVERT
-    VK_F12,         ID_DBG_STEP_INTO,       VIRTKEY, NOINVERT
-    VK_DOWN,        IDC_DBG_MEMDOWN,        VIRTKEY, ALT, NOINVERT
-    VK_RIGHT,       IDC_DBG_MEMDOWNFAST,    VIRTKEY, ALT, NOINVERT
-    VK_UP,          IDC_DBG_MEMUP,          VIRTKEY, ALT, NOINVERT
-    VK_LEFT,        IDC_DBG_MEMUPFAST,      VIRTKEY, ALT, NOINVERT
-    "H",            IDC_DBG_HELP,           VIRTKEY, ALT, NOINVERT
-    "P",            IDC_DBG_MEMTOPC,        VIRTKEY, ALT, NOINVERT
-    "A",            IDC_DBG_AUTOSET,        VIRTKEY, ALT, NOINVERT
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_KICKSTART DIALOGEX 0, 0, 300, 176
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_CONTEXTHELP
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "System ROM Settings",-1,5,0,290,93
-    RTEXT           "Main ROM file:",IDC_ROMTEXT,10,13,75,10
-    COMBOBOX        IDC_ROMFILE,12,26,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "...",IDC_KICKCHOOSER,280,25,10,15
-    RTEXT           "Extended ROM file:",IDC_ROMFILE2TEXT,10,43,75,10
-    COMBOBOX        IDC_ROMFILE2,12,56,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "...",IDC_ROMCHOOSER2,280,55,10,15
-    CONTROL         "MapROM emulation [] Creates a BlizKick-compatible memory area.",IDC_MAPROM,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,95,77,87,10
-    CONTROL         "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,77,87,10
-    GROUPBOX        "Miscellaneous",-1,5,99,290,75
-    RTEXT           "Cartridge ROM file:",IDC_FLASHTEXT2,8,110,75,10
-    COMBOBOX        IDC_CARTFILE,12,123,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "...",IDC_CARTCHOOSER,280,122,10,15
-    RTEXT           "Flash RAM file:",IDC_FLASHTEXT,8,142,75,10
-    EDITTEXT        IDC_FLASHFILE,12,155,262,13,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_FLASHCHOOSER,280,154,10,15
-END
-
-IDD_DISPLAY DIALOGEX 0, 0, 300, 235
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Screen",IDC_SCREENRESTEXT,12,0,270,67,BS_LEFT
-    RTEXT           "Full screen:",IDC_SELECTRESTEXT,15,17,40,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_DISPLAYSELECT,59,10,215,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RESOLUTION,59,27,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_REFRESHRATE,187,27,87,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    EDITTEXT        IDC_XSIZE,59,48,48,12,ES_NUMBER
-    EDITTEXT        IDC_YSIZE,114,48,47,12,ES_NUMBER
-    GROUPBOX        "Settings",IDC_SETTINGSTEXT,12,73,199,125
-    CONTROL         "Correct aspect ratio",IDC_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,126,92,10
-    LTEXT           "Refresh:",IDC_REFRESHTEXT,18,162,28,8
-    CONTROL         "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,157,75,20
-    EDITTEXT        IDC_RATETEXT,124,161,77,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Centering",IDC_STATIC,221,73,61,49
-    CONTROL         "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,87,49,10
-    CONTROL         "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,103,49,10
-    GROUPBOX        "Line Mode",IDC_LINEMODE,222,126,61,73
-    CONTROL         "Normal",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,231,142,44,10
-    CONTROL         "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,158,45,10
-    CONTROL         "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,174,46,10
-    COMBOBOX        IDC_DA_MODE,20,211,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,207,101,20
-    LTEXT           "FPS adj.:",IDC_REFRESH2TEXT,16,182,32,8
-    CONTROL         "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,177,127,20
-    EDITTEXT        IDC_RATE2TEXT,175,181,26,12,ES_CENTER | ES_READONLY
-    COMBOBOX        IDC_RESOLUTIONDEPTH,134,27,46,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Filtered low resolution",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,126,89,10
-    COMBOBOX        IDC_SCREENMODE_NATIVE,100,85,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SCREENMODE_RTG,100,103,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Native mode:",IDC_STATIC,19,85,59,15,SS_CENTERIMAGE
-    RTEXT           "Windowed:",IDC_WINDOWEDTEXT,15,51,40,8
-    RTEXT           "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE
-    PUSHBUTTON      "Reset to defaults",IDC_DA_RESET,212,211,73,14
-    RTEXT           "Resolution:",IDC_STATIC,27,140,59,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_LORES,100,140,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-END
-
-IDD_MEMORY DIALOGEX 0, 0, 300, 239
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_CONTEXTHELP
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Memory Settings",-1,14,7,274,69
-    RTEXT           "Chip:",-1,24,26,20,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20
-    EDITTEXT        IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Slow:",-1,149,26,20,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20
-    EDITTEXT        IDC_SLOWRAM,243,25,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Fast:",IDC_FASTTEXT,24,51,20,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,47,50,20
-    EDITTEXT        IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Z3 Fast:",IDC_Z3TEXT,139,51,30,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20
-    EDITTEXT        IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,98,53,10,SS_NOTIFY | SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,94,60,20
-    EDITTEXT        IDC_P96RAM,152,97,34,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Advanced Memory Settings",-1,13,179,275,57
-    RTEXT           "Motherboard RAM (Low area):",-1,39,194,129,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,190,59,20
-    EDITTEXT        IDC_MBRAM1,243,193,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Motherboard RAM (High area):",-1,39,217,129,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,213,59,20
-    EDITTEXT        IDC_MBRAM2,243,216,34,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "RTG Graphics Card Settings",-1,14,81,275,95
-    CONTROL         "Scale if smaller than display size setting",IDC_RTG_SCALE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,128,162,10
-    CONTROL         "Match host and RTG color depth if possible",IDC_RTG_MATCH_DEPTH,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,116,163,10
-    COMBOBOX        IDC_RTG_8BIT,211,107,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_16BIT,211,123,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_24BIT,211,139,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_32BIT,211,155,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,140,162,10
-    COMBOBOX        IDC_RTG_SCALE_ASPECTRATIO,131,155,57,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Scale aspect ratio",-1,24,156,99,10,SS_CENTERIMAGE
-END
-
-IDD_CPU DIALOGEX 0, 0, 300, 226
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "CPU",IDC_STATIC,5,3,81,139,BS_LEFT
-    CONTROL         "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,16,63,10
-    CONTROL         "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,30,65,10
-    CONTROL         "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,44,63,10
-    CONTROL         "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,58,64,10
-    CONTROL         "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,72,66,10
-    CONTROL         "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,86,66,10
-    CONTROL         "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,114,73,8
-    CONTROL         "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,127,73,10
-    GROUPBOX        "CPU Emulation Speed",IDC_STATIC,90,3,205,90
-    CONTROL         "Fastest possible, but maintain chipset timing",IDC_CS_HOST,
-                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,95,18,195,10
-    CONTROL         "Match A500 speed",IDC_CS_68000,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,32,195,10
-    CONTROL         "Adjustable between CPU and chipset",IDC_CS_ADJUSTABLE,
-                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,46,195,10
-    RTEXT           "CPU",IDC_CS_CPU_TEXT,96,73,15,10,SS_CENTERIMAGE | WS_TABSTOP
-    CONTROL         "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,114,68,67,20
-    LTEXT           "Chipset",IDC_CS_CHIPSET_TEXT,182,73,25,10,SS_CENTERIMAGE | NOT WS_GROUP | WS_TABSTOP
-    RTEXT           "CPU idle",IDC_CS_CPU_TEXT2,236,56,32,10,SS_CENTERIMAGE | WS_TABSTOP
-    CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,219,68,69,20
-    GROUPBOX        "Advanced JIT Settings",IDC_STATIC,90,94,205,93
-    RTEXT           "Cache size:",IDC_CS_CACHE_TEXT,95,113,45,10,SS_CENTERIMAGE | WS_TABSTOP
-    CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,140,108,115,20
-    EDITTEXT        IDC_CACHETEXT,255,113,30,12,ES_CENTER | ES_READONLY
-    CONTROL         "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,141,63,10
-    CONTROL         "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,155,63,10
-    CONTROL         "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,169,62,10
-    CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,141,62,10
-    CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,235,141,52,10
-    CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,155,52,10
-    CONTROL         "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,210,73,10
-    GROUPBOX        "FPU",IDC_STATIC,6,146,81,80,BS_LEFT
-    CONTROL         "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,100,73,8
-    CONTROL         "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,157,63,10
-    CONTROL         "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,171,63,10
-    CONTROL         "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,185,63,10
-    CONTROL         "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,199,63,10
-END
-
-IDD_FLOPPY DIALOGEX 0, 0, 300, 240
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    COMBOBOX        IDC_DF0TEXT,2,22,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF0TYPE,115,6,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,8,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF0WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,4,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT0,253,4,30,15
-    PUSHBUTTON      "...",IDC_DF0,287,4,10,15
-    COMBOBOX        IDC_DF1TEXT,2,58,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF1TYPE,115,42,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,43,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF1WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,40,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT1,253,40,30,15
-    PUSHBUTTON      "...",IDC_DF1,287,40,10,15
-    COMBOBOX        IDC_DF2TEXT,2,93,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF2TYPE,115,77,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,77,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF2WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,75,9,15
-    PUSHBUTTON      "Eject",IDC_EJECT2,253,75,30,15
-    PUSHBUTTON      "...",IDC_DF2,287,75,10,15
-    COMBOBOX        IDC_DF3TEXT,2,128,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_DF3TYPE,115,112,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Write-protected",IDC_STATIC,174,113,59,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF3WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,111,9,15
-    PUSHBUTTON      "Eject",IDC_EJECT3,253,110,30,15
-    PUSHBUTTON      "...",IDC_DF3,287,109,10,15
-    GROUPBOX        "New Floppy Disk Image",IDC_SETTINGSTEXT,5,183,289,49
-    COMBOBOX        IDC_FLOPPYTYPE,16,197,51,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Create Standard Disk [] Creates a standard 880 or 1760 KB ADF disk image.",IDC_CREATE,77,196,97,15
-    PUSHBUTTON      "Create Custom Disk [] Creates a low level (MFM) ADF disk image (about 2MB). Useful for programs that use non-standard disk formats (for example some save disks or DOS-formatted floppies)",IDC_CREATE_RAW,183,196,101,15
-    GROUPBOX        "Floppy Drive Emulation Speed",IDC_SETTINGSTEXT2,5,144,289,35
-    CONTROL         "",IDC_FLOPPYSPD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,32,154,116,20
-    EDITTEXT        IDC_FLOPPYSPDTEXT,183,157,101,12,ES_CENTER | ES_READONLY
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE0,43,5,70,15,NOT WS_VISIBLE
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE1,43,40,70,15,NOT WS_VISIBLE
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE2,43,75,70,15,NOT WS_VISIBLE
-    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE3,43,110,70,15,NOT WS_VISIBLE
-    EDITTEXT        IDC_CREATE_NAME,77,215,97,13,ES_AUTOHSCROLL
-    RTEXT           "Disk label:",IDC_STATIC,15,216,52,10,SS_CENTERIMAGE
-    CONTROL         "DF0:",IDC_DF0ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,6,34,15
-    CONTROL         "DF1:",IDC_DF1ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,41,34,15
-    CONTROL         "DF2:",IDC_DF2ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,76,34,15
-    CONTROL         "DF3:",IDC_DF3ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,111,34,15
-END
-
-IDD_HARDDISK DIALOGEX 0, 0, 300, 237
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_CONTEXTHELP
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    CONTROL         "List1",IDC_VOLUMELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,0,290,176
-    PUSHBUTTON      "Add &Directory or Archive...",IDC_NEW_FS,10,179,103,15
-    PUSHBUTTON      "Add &Hardfile...",IDC_NEW_HF,130,179,74,15
-    PUSHBUTTON      "Add Ha&rd Drive...",IDC_NEW_HD,220,179,75,15
-    PUSHBUTTON      "Remove",IDC_REMOVE,235,203,60,15
-    PUSHBUTTON      "&Properties",IDC_EDIT,235,220,60,15
-    CONTROL         "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,202,100,10
-    CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,202,119,10
-    CONTROL         "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,213,121,10
-    CONTROL         "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,225,101,10
-    CONTROL         "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,213,100,10
-    CONTROL         "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,225,115,10
-END
-
-IDD_SOUND DIALOGEX 0, 0, 300, 231
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    RTEXT           "Sound device:",IDC_SOUNDCARD,8,9,51,13,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDCARDLIST,64,9,229,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Sound Emulation",IDC_SOUNDSETTINGS,5,30,120,81
-    CONTROL         "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,45,101,10
-    CONTROL         "Disabled, but emulated",IDC_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,57,102,10
-    CONTROL         "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,69,102,10
-    CONTROL         "Enabled, 100% accurate",IDC_SOUND3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,81,101,10
-    GROUPBOX        "Volume",IDC_STATIC,132,36,164,31
-    CONTROL         "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,44,105,20
-    EDITTEXT        IDC_SOUNDVOLUME2,247,47,40,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Sound Buffer Size",IDC_STATIC,132,73,164,31
-    CONTROL         "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,81,105,19
-    EDITTEXT        IDC_SOUNDBUFFERMEM,247,84,40,12,ES_CENTER | ES_READONLY
-    GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,6,114,290,60
-    LTEXT           "Frequency:",IDC_SOUNDFREQTXT,11,148,53,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFREQ,13,157,51,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,209,148,77,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFILTER,209,157,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Channel mode:",IDC_SOUNDSTEREOTXT,11,124,57,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREO,13,133,122,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,209,124,75,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDINTERPOLATION,209,133,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,141,124,63,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREOSEP,142,133,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Stereo delay:",IDC_SOUNDSTEREOMIXTXT,141,148,63,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREOMIX,142,157,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Floppy Drive Sound Emulation",IDC_STATIC,6,177,290,46
-    CONTROL         "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,185,107,19
-    EDITTEXT        IDC_SOUNDDRIVEVOLUME2,124,187,40,12,ES_CENTER | ES_READONLY
-    COMBOBOX        IDC_SOUNDDRIVE,237,187,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SOUNDDRIVESELECT,18,205,265,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_SOUNDSWAP,73,157,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "Swap channels:",IDC_SOUNDSWAPTXT,74,148,61,8,SS_CENTERIMAGE
-    CONTROL         "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,95,103,10
-END
-
-IDD_LOADSAVE DIALOGEX 0, 0, 302, 241
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    CONTROL         "",IDC_CONFIGTREE,"SysTreeView32",TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,6,3,289,153,WS_EX_CLIENTEDGE
-    RTEXT           "Name:",IDC_STATIC,4,161,40,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITNAME,48,162,146,13,ES_AUTOHSCROLL
-    RTEXT           "Description:",IDC_STATIC,2,182,41,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITDESCRIPTION,48,183,146,13,ES_AUTOHSCROLL
-    RTEXT           "Link:",IDC_STATIC,4,204,40,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_CONFIGLINK,48,205,93,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,207,48,10
-    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED
-    CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,163,42,10
-    GROUPBOX        "Additional Information",IDC_STATIC,199,179,96,38,BS_LEFT
-    PUSHBUTTON      "View",IDC_VIEWINFO,208,195,37,15
-    PUSHBUTTON      "Set",IDC_SETINFO,250,195,37,15
-    PUSHBUTTON      "Load",IDC_QUICKLOAD,5,225,44,15
-    PUSHBUTTON      "Save",IDC_QUICKSAVE,54,225,44,15
-    PUSHBUTTON      "Load From...",IDC_LOAD,121,225,49,15
-    PUSHBUTTON      "Delete",IDC_DELETE,251,225,44,15
-    PUSHBUTTON      "Save As...",IDC_SAVE,175,225,44,15
-END
-
-IDD_PORTS DIALOGEX 0, 0, 300, 238
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Parallel Port",IDC_SERPARFRAME,5,2,291,68
-    RTEXT           "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_PRINTERLIST,49,15,153,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,220,15,58,12
-    CONTROL         "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,79,12
-    CONTROL         "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,95,33,110,12
-    RTEXT           "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | SS_CENTERIMAGE
-    EDITTEXT        IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER
-    RTEXT           "Ghostscript extra parameters:",IDC_STATIC,12,49,102,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_PS_PARAMS,124,50,165,12,ES_AUTOHSCROLL
-    GROUPBOX        "Serial Port",IDC_SERIALFRAME,4,72,292,48
-    COMBOBOX        IDC_SERIAL,49,84,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,103,48,12
-    CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,103,55,12
-    GROUPBOX        "MIDI",IDC_MIDIFRAME,4,123,292,33
-    RTEXT           "Out:",IDC_MIDI,10,134,34,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_MIDIOUTLIST,50,134,95,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "In:",IDC_MIDI2,150,134,29,15,SS_CENTERIMAGE
-    COMBOBOX        IDC_MIDIINLIST,185,134,95,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Mouse/Joystick Ports",IDC_PORT0,4,158,292,75
-    COMBOBOX        IDC_PORT0_JOYS,45,174,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_PORT1_JOYS,45,195,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Swap ports",IDC_SWAP,211,214,75,14
-    RTEXT           "Port 0:",IDC_STATIC,11,173,25,15,SS_CENTERIMAGE
-    RTEXT           "Port 1:",IDC_STATIC,11,194,25,15,SS_CENTERIMAGE
-    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,16,213,106,15,SS_NOTIFY | SS_CENTERIMAGE
-    CONTROL         "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,
-                    "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,103,65,12
-    CONTROL         "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,103,78,12
-END
-
-IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "UAE Authors and Contributors..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    DEFPUSHBUTTON   "Ok",ID_OK,177,219,53,14
-    CONTROL         "",IDC_CONTRIBUTORS,"RICHEDIT",TCS_HOTTRACK | TCS_VERTICAL | TCS_RAGGEDRIGHT | TCS_OWNERDRAWFIXED | TCS_MULTISELECT | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,5,404,206
-END
-
-IDD_ABOUT DIALOGEX 0, 0, 300, 191
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    CONTROL         "",IDC_RICHEDIT1,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,45,10,210,15
-    CONTROL         "",IDC_RICHEDIT2,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,30,260,13
-    PUSHBUTTON      "Contributors",IDC_CONTRIBUTORS,110,55,80,15
-    CONTROL         "",IDC_UAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,120,80,15
-    CONTROL         "",IDC_PICASSOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,90,80,20
-    CONTROL         "",IDC_AMIGAHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,109,90,80,20
-    CONTROL         "",IDC_WINUAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,120,80,15
-    CONTROL         "",IDC_AIABHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,120,80,15
-    CONTROL         "",IDC_THEROOTS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,145,80,15
-    CONTROL         "",IDC_CAPS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,145,80,15
-    CONTROL         "",IDC_ABIME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,145,80,15
-    CONTROL         "",IDC_CLOANTOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,90,80,20
-    CONTROL         "",IDC_AMIGASYS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,63,169,80,15
-    CONTROL         "",IDC_AMIKIT,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,157,169,80,15
-END
-
-IDD_MISC1 DIALOGEX 0, 0, 300, 237
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Advanced",IDC_STATIC,8,2,285,110
-    CONTROL         "Untrap mouse with middle button",IDC_JULIAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,15,129,10
-    CONTROL         "Show GUI on startup",IDC_SHOWGUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,27,120,10
-    CONTROL         "On-screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,40,115,10
-    CONTROL         "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,53,63,10
-    CONTROL         "Don't show taskbar button",IDC_NOTASKBARBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,66,117,10
-    CONTROL         "bsdsocket.library emulation",IDC_SOCKETS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,15,120,10
-    CONTROL         "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,27,120,10
-    CONTROL         "Synchronize clock",IDC_CLOCKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,40,115,10
-    GROUPBOX        "Keyboard LEDs",IDC_STATIC,7,140,85,94
-    COMBOBOX        IDC_KBLED1,22,154,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_KBLED2,22,173,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_KBLED3,22,193,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Logging",IDC_STATIC,97,140,195,25
-    CONTROL         "Create log file",IDC_CREATELOGFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,151,72,10
-    CONTROL         "Illegal memory accesses",IDC_ILLEGAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,189,151,95,10
-    GROUPBOX        "State Files",IDC_STATIC,98,167,195,68
-    PUSHBUTTON      "Load state...",IDC_DOLOADSTATE,105,180,49,14
-    PUSHBUTTON      "Save state...",IDC_DOSAVESTATE,105,208,49,14
-    CONTROL         "Enable state recording",IDC_STATE_CAPTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,182,88,10
-    RTEXT           "Recording rate (seconds):",IDC_STATIC,157,199,86,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_STATE_RATE,248,197,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Recording buffer (MB):",IDC_STATIC,160,219,83,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_STATE_BUFFERSIZE,248,217,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Always on top",IDC_ALWAYSONTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,79,117,10
-    CONTROL         "Catweasel",IDC_CATWEASEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,53,115,10
-    CONTROL         "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,216,64,10
-    COMBOBOX        IDC_SCSIMODE,92,51,64,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_LANGUAGE,103,121,179,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Language",IDC_STATIC,7,113,285,25
-    CONTROL         "Disable powersaving features",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,92,120,10
-    CONTROL         "Magic Mouse",IDC_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,66,119,10
-    CONTROL         "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,79,94,10
-    COMBOBOX        IDC_DD_SURFACETYPE,217,93,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Display buffer:",IDC_STATIC,159,94,52,10,SS_CENTERIMAGE
-END
-
-IDD_HARDFILE DIALOGEX 0, 0, 299, 249
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardfile Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "Settings",IDC_STATIC,10,5,280,146
-    RTEXT           "Path:",IDC_HARDFILE_DIR_TEXT,25,18,22,10
-    EDITTEXT        IDC_PATH_NAME,52,15,213,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_SELECTOR,271,15,11,15
-    RTEXT           "FileSys:",IDC_HARDFILE_FILESYS_TEXT,13,38,34,10
-    EDITTEXT        IDC_PATH_FILESYS,52,35,213,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_FILESYS_SELECTOR,271,35,11,15
-    RTEXT           "Device:",IDC_HARDFILE_DEVICE_TEXT,16,58,31,10
-    EDITTEXT        IDC_HARDFILE_DEVICE,52,55,66,15,ES_AUTOHSCROLL
-    RTEXT           "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,20,94,48,8
-    EDITTEXT        IDC_HARDFILE_BOOTPRI,73,90,44,15
-    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,74,64,10
-    PUSHBUTTON      "Enable RDB mode",IDC_HDF_RDB,174,55,92,14
-    RTEXT           "Surfaces:",IDC_SURFACES_TEXT,118,94,32,10
-    EDITTEXT        IDC_HEADS,155,90,40,15,ES_NUMBER
-    RTEXT           "Reserved:",IDC_RESERVED_TEXT,197,94,35,10
-    EDITTEXT        IDC_RESERVED,237,90,40,15,ES_NUMBER
-    RTEXT           "Sectors:",IDC_SECTORS_TEXT,120,113,30,10
-    EDITTEXT        IDC_SECTORS,155,111,40,15,ES_NUMBER
-    RTEXT           "Block size:",IDC_BLOCKSIZE_TEXT,197,113,35,10
-    EDITTEXT        IDC_BLOCKSIZE,237,111,40,15,ES_NUMBER
-    GROUPBOX        "New hard disk image file",IDC_STATIC,10,156,280,62
-    PUSHBUTTON      "Create",IDC_HF_CREATE,23,171,80,14
-    EDITTEXT        IDC_HF_SIZE,119,171,61,15,ES_NUMBER
-    PUSHBUTTON      "OK",IDOK,102,226,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,158,226,50,14
-    EDITTEXT        IDC_HF_DOSTYPE,119,194,61,15
-    COMBOBOX        IDC_HF_TYPE,23,195,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_HDF_CONTROLLER,73,112,44,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "DOS type",IDC_STATIC,187,196,32,10,SS_CENTERIMAGE
-    RTEXT           "MB",IDC_STATIC,185,174,17,10,SS_CENTERIMAGE
-    RTEXT           "HD Controller:",IDC_STATIC,16,113,52,10,SS_CENTERIMAGE
-    CONTROL         "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,74,53,10
-    CONTROL         "Do not mount",IDC_HDF_DONOTMOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,74,67,10
-    EDITTEXT        IDC_HDFINFO,16,131,268,12,ES_CENTER | ES_READONLY
-    CONTROL         "Sparse file",IDC_HF_SPARSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,174,62,10
-END
-
-IDD_FILESYS DIALOGEX 15, 25, 299, 111
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Volume Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    LTEXT           "Device name:",-1,11,7,54,10
-    EDITTEXT        IDC_VOLUME_DEVICE,65,5,104,15,ES_AUTOHSCROLL
-    LTEXT           "Volume label:",-1,13,28,54,10
-    EDITTEXT        IDC_VOLUME_NAME,65,25,104,15,ES_AUTOHSCROLL
-    LTEXT           "Path:",-1,38,49,44,10
-    EDITTEXT        IDC_PATH_NAME,65,46,227,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "Select Directory",IDC_FS_SELECT_DIR,65,66,103,15
-    CONTROL         "Read/write",IDC_FS_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,7,55,10
-    RTEXT           "Boot priority:",IDC_VOLUME_BOOTPRI_TEXT,178,28,49,8
-    EDITTEXT        IDC_VOLUME_BOOTPRI,236,25,30,15
-    PUSHBUTTON      "OK",IDOK,65,91,48,15
-    PUSHBUTTON      "Cancel",IDCANCEL,120,91,48,15
-    PUSHBUTTON      "Select Archive or Plain File",IDC_FS_SELECT_FILE,190,66,103,15
-    PUSHBUTTON      "Eject",IDC_FS_SELECT_EJECT,230,91,62,15
-    CONTROL         "Bootable",IDC_FS_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,7,53,10
-END
-
-IDD_SETINFO DIALOGEX 0, 0, 229, 85
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Additional Information Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    RTEXT           "Path:",-1,5,20,24,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATH_NAME,35,20,169,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_SELECTOR,210,20,10,15
-    PUSHBUTTON      "OK",IDOK,120,65,48,15
-    PUSHBUTTON      "Cancel",IDCANCEL,175,65,48,15
-END
-
-IDD_CHIPSET DIALOGEX 0, 65490, 300, 229
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "Chipset",IDC_STATIC,14,11,145,90
-    CONTROL         "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS,
-                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,26,51,10
-    CONTROL         "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,42,55,10
-    CONTROL         "ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,42,55,10
-    CONTROL         "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,58,52,10
-    CONTROL         "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,26,51,10
-    CONTROL         "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,58,50,10
-    GROUPBOX        "Options",IDC_STATIC,168,11,114,89
-    CONTROL         "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,179,33,96,10
-    CONTROL         "Cycle-exact [] The most compatible A500 emulation mode. Very fast PC recommended.",IDC_CYCLEEXACT,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,46,100,10
-    GROUPBOX        "Collision Level",IDC_STATIC,14,105,267,48
-    CONTROL         "None [] Collision hardware emulation disabled.",IDC_COLLISION0,
-                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,121,59,10
-    CONTROL         "Sprites only [] Emulate only sprite vs. sprite collisions.",IDC_COLLISION1,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,137,62,10
-    CONTROL         "Sprites and Sprites vs. Playfield [] Recommended collision emulation level.",IDC_COLLISION2,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,121,161,10
-    CONTROL         "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",IDC_COLLISION3,
-                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,137,119,10
-    GROUPBOX        "Sound Emulation",IDC_STATIC,13,159,268,65
-    CONTROL         "Disabled",IDC_CS_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,175,102,10
-    CONTROL         "Emulated",IDC_CS_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,190,91,10
-    CONTROL         "Emulated, 100% accurate",IDC_CS_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,205,95,10
-    CONTROL         "Genlock connected [] Allow boot sequence to detect genlock. Genlock is not emulated.",IDC_GENLOCK,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,59,100,10
-    CONTROL         "Faster RTG [] Enables less accurate custom chipset emulation mode when Picasso96 is enabled.",IDC_FASTERRTG,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,72,100,10
-    COMBOBOX        IDC_CS_EXT,100,80,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Chipset Extra",IDC_STATIC,25,79,52,15,SS_CENTERIMAGE
-END
-
-IDD_CHIPSET2 DIALOGEX 0, 65490, 300, 247
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "Battery Backed Up Real Time Clock",IDC_STATIC,11,24,275,29
-    CONTROL         "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,36,55,10
-    CONTROL         "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,36,52,10
-    CONTROL         "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,36,46,10
-    EDITTEXT        IDC_CS_RTCADJUST,215,34,64,13,ES_AUTOHSCROLL
-    GROUPBOX        "CIA-A TOD Clock Source",IDC_STATIC,11,56,275,29
-    CONTROL         "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,68,63,10
-    CONTROL         "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,68,85,10
-    CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,186,68,88,10
-    CONTROL         "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,146,80,10
-    CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,95,88,10
-    CONTROL         "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,76,10
-    CONTROL         "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,108,87,10
-    CONTROL         "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,108,84,10
-    CONTROL         "CDTV CD",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,121,47,10
-    CONTROL         "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,120,87,10
-    CONTROL         "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,120,90,10
-    CONTROL         "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,133,79,10
-    CONTROL         "A4000/A4000T IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,133,88,10
-    CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,71,10
-    EDITTEXT        IDC_CS_RAMSEYREV,91,214,45,13,ES_AUTOHSCROLL
-    CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,229,71,10
-    EDITTEXT        IDC_CS_FATGARYREV,91,228,45,13,ES_AUTOHSCROLL
-    CONTROL         "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,188,76,10
-    CONTROL         "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,8,234,10
-    CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,95,92,10
-    CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,216,81,10
-    EDITTEXT        IDC_CS_AGNUSREV,232,214,45,13,ES_AUTOHSCROLL
-    CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,229,81,10
-    EDITTEXT        IDC_CS_DENISEREV,232,228,45,13,ES_AUTOHSCROLL
-    CONTROL         "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,188,76,10
-    CONTROL         "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,188,88,10
-    LTEXT           "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,22,174,224,8,SS_CENTERIMAGE
-    CONTROL         "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,133,92,10
-    CONTROL         "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,76,10
-    CONTROL         "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,200,76,10
-    CONTROL         "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,200,101,10
-    CONTROL         "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,146,92,10
-    CONTROL         "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,146,80,10
-    CONTROL         "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10
-    CONTROL         "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,159,80,10
-    CONTROL         "No-EHB Denise",IDC_CS_NOEHB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,159,80,10
-    CONTROL         "Blitter Busy Bug",IDC_CS_BLITTERBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,159,80,10
-END
-
-IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 203
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Output Properties",IDC_STATIC,5,0,274,126
-    EDITTEXT        IDC_AVIOUTPUT_FILETEXT,15,15,226,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE
-    PUSHBUTTON      "...",IDC_AVIOUTPUT_FILE,249,15,19,12
-    CONTROL         "Audio",IDC_AVIOUTPUT_AUDIO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,33,39,14
-    CONTROL         "",IDC_AVIOUTPUT_AUDIO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,34,209,13
-    CONTROL         "Video",IDC_AVIOUTPUT_VIDEO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,50,39,14
-    CONTROL         "",IDC_AVIOUTPUT_VIDEO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,51,209,13
-    CONTROL         "Disable frame rate limit while recording",IDC_AVIOUTPUT_FRAMELIMITER,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,68,158,10
-    CONTROL         "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14
-    CONTROL         "PAL",IDC_AVIOUTPUT_PAL,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,131,103,66,14
-    CONTROL         "NTSC",IDC_AVIOUTPUT_NTSC,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,204,103,66,14
-    CONTROL         "Slider1",IDC_AVIOUTPUT_FPS,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_ENABLESELRANGE | WS_TABSTOP,166,84,87,11
-    LTEXT           "fps",IDC_AVIOUTPUT_FPS_STATIC,255,84,19,8
-    PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,16,141,77,14
-    GROUPBOX        "Ripper",IDC_STATIC,5,127,274,38
-    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,104,141,77,14,WS_DISABLED
-    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,141,77,14
-    GROUPBOX        "Input Recorder",IDC_STATIC,5,166,274,33
-    CONTROL         "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,178,77,14
-    CONTROL         "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,178,77,14
-    CONTROL         "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,180,78,10
-    CONTROL         "Disable sound output while recording",IDC_AVIOUTPUT_NOSOUNDOUTPUT,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,85,148,10
-END
-
-IDD_INPUT DIALOGEX 0, 0, 300, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    COMBOBOX        IDC_INPUTTYPE,5,5,98,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_INPUTDEVICE,109,5,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "",IDC_INPUTDEVICEDISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,282,8,9,8
-    CONTROL         "List1",IDC_INPUTLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,22,290,146
-    COMBOBOX        IDC_INPUTAMIGACNT,5,174,24,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_INPUTAMIGA,33,174,262,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Joystick dead zone (%):",-1,7,196,79,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTDEADZONE,92,195,25,12,ES_NUMBER
-    RTEXT           "Autofire rate (frames):",-1,10,212,76,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTAUTOFIRERATE,92,210,25,12,ES_NUMBER
-    RTEXT           "Digital joy-mouse speed:",-1,124,196,84,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTSPEEDD,215,195,25,12,ES_NUMBER
-    RTEXT           "Analog joy-mouse speed:",-1,120,212,88,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTSPEEDA,215,211,25,12,ES_NUMBER
-    RTEXT           "Mouse speed:",-1,132,228,76,10,SS_CENTERIMAGE
-    EDITTEXT        IDC_INPUTSPEEDM,215,227,25,12,ES_NUMBER
-    PUSHBUTTON      "Copy from:",IDC_INPUTCOPY,249,195,45,14
-    COMBOBOX        IDC_INPUTCOPYFROM,249,211,45,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14
-END
-
-IDD_FILTER DIALOGEX 0, 0, 296, 224
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Filter Settings",-1,0,0,294,186
-    CONTROL         "Enable",IDC_FILTERENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,17,46,10
-    COMBOBOX        IDC_FILTERMODE,62,15,61,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERFILTER,128,15,81,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Reset to defaults",IDC_FILTERDEFAULT,213,15,73,14
-    RTEXT           "Horiz. size:",-1,7,44,54,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,37,152,19
-    EDITTEXT        IDC_FILTERHZV,253,39,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Vert. size:",-1,7,64,54,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,57,152,19
-    EDITTEXT        IDC_FILTERVZV,253,59,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Horiz. position:",-1,5,84,55,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,77,151,19
-    EDITTEXT        IDC_FILTERHOV,253,79,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Vert. position:",-1,5,103,55,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,97,151,19
-    EDITTEXT        IDC_FILTERVOV,253,99,34,12,ES_CENTER | ES_READONLY
-    RTEXT           "Extra settings:",-1,27,133,57,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,157,151,19
-    EDITTEXT        IDC_FILTERXLV,253,159,34,12,ES_CENTER | ES_READONLY
-    COMBOBOX        IDC_FILTERSLR,253,130,33,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Presets",-1,0,187,296,36
-    COMBOBOX        IDC_FILTERPRESETS,8,201,119,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Load",IDC_FILTERPRESETLOAD,132,200,47,14
-    PUSHBUTTON      "Save",IDC_FILTERPRESETSAVE,184,200,47,14
-    PUSHBUTTON      "Delete",IDC_FILTERPRESETDELETE,236,200,47,14
-    COMBOBOX        IDC_FILTERHZMULT,67,43,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_FILTERVZMULT,67,63,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Autoscale",IDC_FILTERAUTORES,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,168,63,10
-    COMBOBOX        IDC_FILTERXTRA,105,130,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Keep aspect ratio",IDC_FILTERASPECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,153,87,10
-END
-
-IDD_HARDDRIVE DIALOGEX 0, 0, 380, 76
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Harddrive Settings"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    LTEXT           "Hard drive:",IDC_STATIC,7,11,80,10
-    COMBOBOX        IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10
-    DEFPUSHBUTTON   "Add hard drive",IDOK,231,48,65,14
-    PUSHBUTTON      "Cancel",IDCANCEL,319,48,54,14
-    DEFPUSHBUTTON   "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14
-    EDITTEXT        IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
-    COMBOBOX        IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "HD Controller:",IDC_STATIC,42,51,52,10,SS_CENTERIMAGE
-END
-
-IDD_MISC2 DIALOGEX 0, 0, 300, 92
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "When Active",IDC_STATIC,8,7,88,73
-    RTEXT           "Run at priority:",IDC_ACTIVE_PRI,14,17,52,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_ACTIVE_PRIORITY,14,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "When Inactive",IDC_STATIC,102,7,92,73
-    RTEXT           "Run at priority:",IDC_INACTIVE_PRI,109,17,51,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_INACTIVE_PRIORITY,109,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Pause emulation",IDC_INACTIVE_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,50,69,10
-    CONTROL         "Disable sound",IDC_INACTIVE_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,63,79,10
-    GROUPBOX        "When Minimized",IDC_STATIC,199,7,92,73
-    RTEXT           "Run at priority:",IDC_MINIMIZED_PRI,207,18,51,10,SS_CENTERIMAGE | WS_TABSTOP
-    COMBOBOX        IDC_MINIMIZED_PRIORITY,207,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Pause emulation",IDC_MINIMIZED_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,50,69,10
-    CONTROL         "Disable sound",IDC_MINIMIZED_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,63,79,10
-END
-
-IDD_DISK DIALOGEX 0, 0, 300, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_CONTROL | DS_CENTER | DS_CENTERMOUSE | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    CONTROL         "",IDC_DISKLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,6,292,196
-    PUSHBUTTON      "Remove floppy disk image",IDC_DISKLISTREMOVE,156,223,101,15
-    COMBOBOX        IDC_DISKTEXT,3,205,293,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Insert floppy disk image",IDC_DISKLISTINSERT,41,223,101,15
-END
-
-IDD_PANEL DIALOGEX 0, 0, 420, 278
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT
-CAPTION "WinUAE Properties"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    GROUPBOX        "",IDC_PANEL_FRAME,112,4,303,247,NOT WS_VISIBLE
-    CONTROL         "",IDC_PANELTREE,"SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_NOSCROLL | WS_BORDER | WS_HSCROLL | WS_TABSTOP,5,5,101,248,WS_EX_CLIENTEDGE
-    GROUPBOX        "",IDC_PANEL_FRAME_OUTER,110,2,307,251
-    PUSHBUTTON      "Reset",IDC_RESETAMIGA,6,259,47,14
-    PUSHBUTTON      "Quit",IDC_QUITEMU,57,259,47,14
-    DEFPUSHBUTTON   "OK",IDOK,260,259,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,313,259,50,14
-    PUSHBUTTON      "Help",IDHELP,366,259,50,14,WS_DISABLED
-    PUSHBUTTON      "Restart",IDC_RESTARTEMU,109,259,47,14,NOT WS_VISIBLE
-END
-
-IDD_PATHS DIALOGEX 0, 0, 300, 237
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    LTEXT           "System ROMs:",IDC_PATHS_ROML,14,9,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_ROM,14,22,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_ROMS,281,22,11,15
-    LTEXT           "Configuration files:",IDC_PATHS_CONFIGL,14,40,121,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_CONFIG,14,52,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_CONFIGS,281,52,11,15
-    LTEXT           "Screenshots:",IDC_PATHS_SCREENSHOTL,14,71,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_SCREENSHOT,14,83,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_SCREENSHOTS,281,83,11,15
-    LTEXT           "State files:",IDC_PATHS_STATEFILEL,14,102,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_SAVESTATE,14,114,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_SAVESTATES,281,114,11,15
-    LTEXT           "Videos:",IDC_PATHS_AVIOUTPUTL,14,132,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_AVIOUTPUT,14,144,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_AVIOUTPUTS,281,144,11,15
-    LTEXT           "Saveimages:",IDC_PATHS_SAVEIMAGEL,14,163,260,8,SS_CENTERIMAGE
-    EDITTEXT        IDC_PATHS_SAVEIMAGE,14,175,261,15,ES_AUTOHSCROLL
-    PUSHBUTTON      "...",IDC_PATHS_SAVEIMAGES,281,175,11,15
-    PUSHBUTTON      "Reset to defaults",IDC_PATHS_DEFAULT,14,199,92,14
-    PUSHBUTTON      "Rescan ROMs",IDC_ROM_RESCAN,14,218,92,14
-    PUSHBUTTON      "Clear registry",IDC_RESETREGISTRY,112,218,77,14
-    COMBOBOX        IDC_PATHS_DEFAULTTYPE,112,199,163,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Clear disk history",IDC_RESETDISKHISTORY,198,218,77,14
-    CONTROL         "Cache Configuration files",IDC_PATHS_CONFIGCACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,40,117,10
-END
-
-IDD_QUICKSTART DIALOGEX 0, 0, 300, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    GROUPBOX        "Emulated Hardware",IDC_QUICKSTART_CONFIG,3,0,294,54
-    RTEXT           "Model:",IDC_STATIC,5,14,50,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_QUICKSTART_MODEL,59,12,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Configuration:",IDC_STATIC,5,33,50,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_QUICKSTART_CONFIGURATION,59,31,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Compatibility vs Required CPU Power ",IDC_QUICKSTART_COMPA,3,56,294,33
-    RTEXT           "Best compatibility",IDC_STATIC,13,70,67,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_QUICKSTART_COMPATIBILITY,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,95,65,115,21
-    RTEXT           "Low compatibility",IDC_STATIC,215,70,63,10,SS_CENTERIMAGE
-    GROUPBOX        "Host Configuration",IDC_QUICKSTART_HOST,3,91,294,33
-    RTEXT           "Configuration:",IDC_STATIC,5,105,55,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_QUICKSTART_HOSTCONFIG,65,103,225,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Emulated Floppy Drives",IDC_QUICKSTART_DF,3,126,294,84
-    CONTROL         "Floppy drive DF0:",IDC_DF0QENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,10,136,72,15
-    PUSHBUTTON      "Select disk image",IDC_DF0QQ,85,136,98,15
-    RTEXT           "Write-protected",IDC_STATIC,185,139,56,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF0WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,137,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT0Q,261,136,30,15
-    COMBOBOX        IDC_DF0TEXTQ,9,154,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Floppy drive DF1:",IDC_DF1QENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,172,71,15
-    PUSHBUTTON      "Select disk image",IDC_DF1QQ,85,172,98,15
-    RTEXT           "Write-protected",IDC_STATIC,185,175,55,10,SS_CENTERIMAGE
-    CONTROL         "",IDC_DF1WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,173,10,15
-    PUSHBUTTON      "Eject",IDC_EJECT1Q,261,172,30,15
-    COMBOBOX        IDC_DF1TEXTQ,9,190,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Set configuration",IDC_QUICKSTART_SETCONFIG,9,219,72,15,NOT WS_VISIBLE
-    GROUPBOX        "Mode",IDC_STATIC,190,211,107,27,BS_LEFT
-    CONTROL         "Start in Quickstart mode",IDC_QUICKSTARTMODE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,197,222,94,10
-END
-
-IDD_FRONTEND DIALOGEX 0, 0, 420, 242
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
-    CONTROL         "",IDC_FE_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,9,235,124
-    GROUPBOX        "",IDC_FE_INFO,249,140,160,95
-    GROUPBOX        "",IDC_FE_SCREENSHOT,249,7,160,128
-END
-
-IDD_PROGRESSBAR DIALOGEX 0, 0, 229, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Processing..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    PUSHBUTTON      "Cancel",IDCANCEL,88,40,50,14
-    CONTROL         "",IDC_PROGRESSBAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,7,19,215,14
-    CTEXT           "x",IDC_PROGRESSBAR_TEXT,23,5,187,10,SS_CENTERIMAGE | WS_TABSTOP
-END
-
-IDD_STRINGBOX DIALOGEX 0, 0, 229, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Enter text..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,48,39,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,151,39,50,14
-    EDITTEXT        IDC_STRINGBOXEDIT,7,17,214,14,ES_AUTOHSCROLL | ES_WANTRETURN
-END
-
-IDD_DEBUGGER DIALOGEX 0, 0, 454, 368
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "WinUAE Debugger"
-FONT 8, "Courier New", 0, 0, 0x0
-BEGIN
-    EDITTEXT        IDC_DBG_OUTPUT1,1,255,370,86,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP
-    EDITTEXT        IDC_DBG_OUTPUT2,1,79,370,262,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP
-    LISTBOX         IDC_DBG_MEM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_DASM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    EDITTEXT        IDC_DBG_MEMINPUT,1,79,36,12,ES_AUTOHSCROLL | ES_WANTRETURN
-    EDITTEXT        IDC_DBG_INPUT,1,342,354,12,ES_AUTOHSCROLL | ES_WANTRETURN
-    PUSHBUTTON      "?",IDC_DBG_HELP,356,342,15,12,NOT WS_TABSTOP
-    PUSHBUTTON      "Set to PC",IDC_DBG_MEMTOPC,38,79,45,12,NOT WS_TABSTOP
-    LISTBOX         IDC_DBG_DREG,1,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_AREG,54,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_AMEM,106,1,231,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_CCR,338,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_SP_VBR,338,44,115,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MMISC,396,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_PC,1,68,52,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_PREFETCH,54,68,283,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_FPREG,372,218,81,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_FPSR,372,285,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MISCCPU,372,320,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    CONTROL         "",IDC_DBG_STATUS,"msctls_statusbar32",0x103,0,355,453,12
-    LISTBOX         IDC_DBG_BRKPTS,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-    LISTBOX         IDC_DBG_MCUSTOM,372,79,81,138,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MISC,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-    LISTBOX         IDC_DBG_CUSTOM,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-    CONTROL         "Auto set",IDC_DBG_AUTOSET,"Button",BS_AUTOCHECKBOX,84,79,50,12
-    LISTBOX         IDC_DBG_DASM2,1,79,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-    LISTBOX         IDC_DBG_MEM2,1,167,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT
-END
-
-IDD_DBGMEMINPUT DIALOGEX 0, 0, 150, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Enter address..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,15,39,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,75,39,50,14
-    EDITTEXT        IDC_DBG_MEMINPUT2,20,12,100,14,ES_AUTOHSCROLL | ES_WANTRETURN
-    CTEXT           "Enter address",IDC_DBG_ADDRINPUTTXT,20,1,100,10,SS_CENTERIMAGE | WS_TABSTOP
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_APPICON             ICON                    "winuae.ico"
-IDI_FLOPPY              ICON                    "35floppy.ico"
-IDI_ABOUT               ICON                    "amigainfo.ico"
-IDI_HARDDISK            ICON                    "Drive.ico"
-IDI_CPU                 ICON                    "cpu.ico"
-IDI_PORTS               ICON                    "joystick.ico"
-IDI_INPUT               ICON                    "joystick.ico"
-IDI_MISC1               ICON                    "misc.ico"
-IDI_MISC2               ICON                    "misc.ico"
-IDI_MOVE_UP             ICON                    "move_up.ico"
-IDI_MOVE_DOWN           ICON                    "move_dow.ico"
-IDI_AVIOUTPUT           ICON                    "avioutput.ico"
-IDI_DISK                ICON                    "Drive.ico"
-IDI_CONFIGFILE          ICON                    "file.ico"
-IDI_FOLDER              ICON                    "folder.ico"
-IDI_SOUND               ICON                    "sound.ico"
-IDI_DISPLAY             ICON                    "screen.ico"
-IDI_ROOT                ICON                    "root.ico"
-IDI_MEMORY              ICON                    "chip.ico"
-IDI_QUICKSTART          ICON                    "quickstart.ico"
-IDI_PATHS               ICON                    "paths.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,5,1,0
- PRODUCTVERSION 1,5,1,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "FileDescription", "WinUAE"
-            VALUE "FileVersion", "1.5.1"
-            VALUE "InternalName", "WinUAE"
-            VALUE "LegalCopyright", "© 1996-2008 under the GNU Public License (GPL)"
-            VALUE "OriginalFilename", "WinUAE.exe"
-            VALUE "ProductName", "WinUAE"
-            VALUE "ProductVersion", "1.5.1"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x409, 1200
-    END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Cursor
-//
-
-IDC_MYHAND              CURSOR                  "H_arrow.cur"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDM_SYSTRAY MENU 
-BEGIN
-    POPUP "Menu"
-    BEGIN
-        MENUITEM "Configuration",               ID_ST_CONFIGURATION
-        POPUP "Floppy drives"
-        BEGIN
-            MENUITEM "Eject all drives",            ID_ST_EJECTALL
-            MENUITEM "DF0:",                        ID_ST_DF0
-            MENUITEM "DF1:",                        ID_ST_DF1
-            MENUITEM "DF2:",                        ID_ST_DF2
-            MENUITEM "DF3:",                        ID_ST_DF3
-        END
-        MENUITEM "Reset",                       ID_ST_RESET
-        MENUITEM "Help",                        ID_ST_HELP
-        MENUITEM "Quit WinUAE",                 ID_ST_QUIT
-    END
-END
-
-IDM_DBGCONTEXTMENU MENU 
-BEGIN
-    POPUP "Inactive"
-    BEGIN
-        POPUP "Copy"
-        BEGIN
-            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE
-            MENUITEM "Copy all",                    ID_DBG_COPYLB
-        END
-    END
-    POPUP "Memory"
-    BEGIN
-        POPUP "Copy"
-        BEGIN
-            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE
-            MENUITEM "Copy all",                    ID_DBG_COPYLB
-        END
-        POPUP "Set top address"
-        BEGIN
-            MENUITEM "Set to A0",                   ID_DBG_SETTOA0
-            MENUITEM "Set to A1",                   ID_DBG_SETTOA1
-            MENUITEM "Set to A2",                   ID_DBG_SETTOA2
-            MENUITEM "Set to A3",                   ID_DBG_SETTOA3
-            MENUITEM "Set to A4",                   ID_DBG_SETTOA4
-            MENUITEM "Set to A5",                   ID_DBG_SETTOA5
-            MENUITEM "Set to A6",                   ID_DBG_SETTOA6
-            MENUITEM "Set to A7",                   ID_DBG_SETTOA7
-            MENUITEM "Enter address",               ID_DBG_ENTERADDR
-        END
-    END
-    POPUP "Disassembly"
-    BEGIN
-        POPUP "Copy"
-        BEGIN
-            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE
-            MENUITEM "Copy all",                    ID_DBG_COPYLB
-        END
-        POPUP "Breakpoints"
-        BEGIN
-            MENUITEM "Toggle breakpoint",           ID_DBG_TOGGLEBP
-            MENUITEM "Clear all breakpoints",       ID_DBG_DELETEBPS
-        END
-        POPUP "Set top address"
-        BEGIN
-            MENUITEM "Set to PC",                   ID_DBG_SETTOPC
-            MENUITEM "Enter address",               ID_DBG_ENTERADDR
-        END
-    END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// WAVE
-//
-
-IDR_DRIVE_STARTUP_A500_1 WAVE                    "drive_startup.wav"
-IDR_DRIVE_CLICK_A500_1  WAVE                    "drive_click.wav"
-IDR_DRIVE_SPIN_A500_1   WAVE                    "drive_spin.wav"
-IDR_DRIVE_SNATCH_A500_1 WAVE                    "drive_snatch.wav"
-IDR_DRIVE_SPINND_A500_1 WAVE                    "drive_spinnd.wav"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_XARCADE             BITMAP                  "xarcade-winuae.bmp"
-IDB_LCD160X43           BITMAP                  "lcd.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE 
-BEGIN
-    IDS_KICKSTART           "ROM"
-    IDS_DISK                "Disk swapper"
-    IDS_DISPLAY             "Display"
-    IDS_HARDDISK            "Hard drives"
-    IDS_FLOPPY              "Floppy drives"
-    IDS_ABOUT               "About"
-    IDS_LOADSAVE            "Configurations"
-    IDS_AVIOUTPUT           "Output"
-    IDS_PORTS               "Game & I/O ports"
-    IDS_MISC1               "Misc"
-    IDS_MEMORY              "RAM"
-    IDS_CPU                 "CPU and FPU"
-    IDS_CHIPSET             "Chipset"
-    IDS_INPUT               "Input"
-    IDS_FILTER              "Filter"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_MISC2               "Priority"
-    IDS_PATHS               "Paths"
-    IDS_QUICKSTART          "Quickstart"
-    IDS_FRONTEND            "Frontend"
-    IDS_CHIPSET2            "Adv. Chipset"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_EXTTEXT             "Floppy disk image files"
-    IDS_EXTACTUAL           "ADF"
-    IDS_SOUND               "Sound"
-    IDS_CDROM               "CD-ROM"
-    IDS_FRAMERATE           "Every %1Frame"
-    IDS_SECOND              "second "
-    IDS_THIRD               "third "
-    IDS_FOURTH              "fourth "
-    IDS_FIFTH               "fifth "
-    IDS_SIXTH               "sixth "
-    IDS_SEVENTH             "seventh "
-    IDS_EIGHTH              "eighth "
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NINTH               "ninth "
-    IDS_TENTH               "tenth "
-    IDS_SELECTADF           "Select a floppy disk image file..."
-    IDS_ADF                 "Floppy disk image files"
-    IDS_CHOOSEBLANK         "Choose a blank floppy disk image file..."
-    IDS_SELECTHDF           "Select a hard disk image file..."
-    IDS_HDF                 "Hard disk image files"
-    IDS_SELECTUAE           "Select a WinUAE configuration file..."
-    IDS_UAE                 "WinUAE configuration files"
-    IDS_SELECTROM           "Select a system ROM file..."
-    IDS_ROM                 "System ROM files"
-    IDS_SELECTKEY           "Select a system ROM key file..."
-    IDS_KEY                 "System ROM key files"
-    IDS_SELECTINFO          "Select information for your configuration..."
-    IDS_NONE                "none"
-    IDS_VOLUME              "Volume"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_SELECTFILESYSROOT   "Please select the root directory of the file system..."
-    IDS_DEFAULTMIDIOUT      "Default MIDI-Out Device"
-    IDS_CONTRIBUTORS1       "Bernd Schmidt - The Grand-Master\nSam Jordan - Custom-chip, floppy-DMA, etc.\nMathias Ortmann - Original WinUAE Main Guy, BSD Socket support\nBrian King - Picasso96 Support, Integrated GUI for WinUAE, previous WinUAE Main Guy\nToni Wilen - Core updates, WinUAE Main Guy\nGustavo Goedert/Peter Remmers/Michael Sontheimer/Tomi Hakala/Tim Gunn/Nemo Pohle - DOS Port Stuff\nSamuel Devulder/Olaf Barthel/Sam Jordan - Amiga Ports\nKrister Bergman - XFree86 and OS/2 Port\nA. Blanchard/Ernesto Corvi - MacOS Port\nChristian Bauer - BeOS Port\nIan Stephenson - NextStep Port\nPeter Teichmann - Acorn/RiscOS Port\nStefan Reinauer - ZorroII/III AutoConfig, Serial Support\nChristian Schmitt/Chris Hames - Serial Support\nHerman ten Brugge - 68020/68881 Emulation Code\nTauno Taipaleenmaki - Various UAE-Control/UAE-Library Support\nBrett Eden/Tim Gunn/Paolo Besser/Nemo Pohle - Various Docs and Web-Sites\nGeorg Veichtlbauer - Help File coordinator, German GUI\nFulvio Leonardi - Italian translator for WinUAE\n"
-    IDS_CONTRIBUTORS2       "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nPéter Tóth /Balázs Rátkai/Iván Herczeg/András Arató - Hungarian translation.\nKarsten Bock, Gavin Fance, Dirk Trowe, Christoph Meier and Christian Schindler - Freezer cartridge hardware support."
-    IDS_INVALIDPRTPORT      "The printer you have in this configuration is not valid on this machine.\n"
-    IDS_RESTOREUSS          "Restore a WinUAE snapshot file"
-    IDS_USS                 "WinUAE snapshot files"
-    IDS_WRONGOSVERSION      "WinUAE is no longer supported on Windows NT.  Please upgrade to either Windows 2000 or Windows XP or a later version."
-    IDS_SELECTFLASH         "Select a flash or battery-backed RAM file..."
-    IDS_FLASH               "WinUAE flash or battery-backed RAM file"
-    IDS_INPUTHOSTWIDGET     "Input source"
-    IDS_INPUTAMIGAEVENT     "Input target"
-    IDS_INPUTAUTOFIRE       "Autofire"
-    IDS_SAVEUSS             "Save a WinUAE snapshot file"
-    IDS_MIDIOVERFLOW        "Sysexbuffer overflow. Should not happen. Please report this to\nberndroesch1@compuserve.de"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_PATH                "Path"
-    IDS_RW                  "R/W"
-    IDS_SECTORS             "Sectors"
-    IDS_SURFACES            "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nHungarian translation - Péter Tóth , Balázs Rátkai , Iván Herczeg , András Arató"
-    IDS_RESERVED            "Reserved"
-    IDS_BLOCKSIZE           "Block size"
-    IDS_NAME                "Name"
-    IDS_DESCRIPTION         "Description"
-    IDS_COULDNOTLOADCONFIG  "Could not load the selected configuration!\n"
-    IDS_NOHELP              "Online help is disabled because the HTML Help functionality is not installed on this system. HTML Help is available from http://www.microsoft.com/downloads/.\n"
-    IDS_MUSTSELECTCONFIG    "You must select a configuration or enter a name before selecting Load...\n"
-    IDS_INVALIDCOMPORT      "The serial port you have in this configuration is not valid on this machine.\n"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_HFDSIZE             "Size"
-    IDS_DEVICE              "Device"
-    IDS_BOOTPRI             "BootPri"
-    IDS_FLOPPY_COMPATIBLE   " (compatible)"
-    IDS_FLOPPY_TURBO        "Turbo"
-    IDS_YES                 "yes"
-    IDS_NO                  "no"
-    IDS_PRI_ABOVENORMAL     "Above Normal"
-    IDS_PRI_NORMAL          "Normal"
-    IDS_PRI_BELOWNORMAL     "Below Normal"
-    IDS_PRI_LOW             "Low"
-    IDS_OLDRTGLIBRARY       "The installed LIBS:Picasso96/rtg.library (%d.%d) should be updated.\nA newer version is included in the ""Amiga Programs"" directory\n of the WinUAE distribution archive.\n\nNewer library version fixes graphics problems and increases performance."
-    IDS_DEFAULT_AF2005      "Amiga Forever 2005+"
-    IDS_DEFAULT_AF          "Amiga Forever"
-    IDS_DEFAULT_WINUAE      "WinUAE default (old)"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_SOUND_STEREO2       "Cloned Stereo (4 Channels)"
-    IDS_INPUT_CUSTOMEVENT   "<Custom event>"
-    IDS_DEFAULT_NEWWINUAE   "WinUAE default (new)"
-    IDS_SOUND_CLONED51      "Cloned Stereo (5.1)"
-    IDS_SOUND_51            "5.1 Channels"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_UNSUPPORTEDPIXELFORMAT 
-                            "Error: unsupported pixel format. Please use a different screen mode.\n"
-    IDS_MUSTENTERNAME       "You must select a configuration or enter a name before selecting Save...\n"
-    IDS_MUSTSELECTCONFIGFORDELETE 
-                            "You must select a configuration or enter a name before selecting Delete...\n"
-    IDS_DELETECONFIGCONFIRMATION 
-                            "Are you sure you want to Delete this configuration?\n"
-    IDS_DELETECONFIGTITLE   "Confirm Delete"
-    IDS_MUSTSELECTPATH      "You must select a path!"
-    IDS_SETTINGSERROR       "Settings error"
-    IDS_MUSTSELECTNAME      "You must select a name for the volume!"
-    IDS_MUSTSELECTFILE      "You must select a file!"
-    IDS_FAILEDHARDFILECREATION "Failed to create hard disk image file..."
-    IDS_CREATIONERROR       "Creation error"
-    IDS_ERRORTITLE          "WinUAE message"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_INP                 "WinUAE Input Recording"
-    IDS_RESTOREINP          "Playback a WinUAE input recording"
-    IDS_SAVEINP             "Record a WinUAE input recording"
-    IDS_SCREEN_WINDOWED     "Windowed"
-    IDS_SCREEN_FULLSCREEN   "Fullscreen"
-    IDS_SCREEN_FULLWINDOW   "Full-window"
-    IDS_SCREEN_VSYNC        "VSync"
-    IDS_SOUND_MONO          "Mono"
-    IDS_SOUND_MIXED         "Mixed"
-    IDS_SOUND_STEREO        "Stereo"
-    IDS_SOUND_INTERPOL_DISABLED "Disabled"
-    IDS_SOUND_FILTER_OFF    "Always off"
-    IDS_SOUND_FILTER_EMULATED "Emulated (A500)"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_SOUND_FILTER_EMULATED_E "Emulated (A1200)"
-    IDS_INPUT_COMPATIBILITY "Compatibility mode"
-    IDS_INPUT_CUSTOM        "Configuration #%d"
-    IDS_INPUT_COPY_DEFAULT  "Default"
-    IDS_INPUT_COPY_CUSTOM   "Config #%d"
-    IDS_3D_NO_FILTER        "Point (%d-bit)"
-    IDS_3D_BILINEAR         "Bilinear (%d-bit)"
-    IDS_VSYNC_DEFAULT       "Default"
-    IDS_DRIVESOUND_NONE     "No sound"
-    IDS_DRIVESOUND_DEFAULT_A500 "A500 (WinUAE built-in)"
-    IDS_AVIOUTPUT_NOCODEC   "no codec selected"
-    IDS_DISK_IMAGENAME      "Disk image"
-    IDS_DISK_DRIVENAME      "Drive"
-    IDS_AGA8BIT             "AGA emulation requires a 16-bit or higher display depth.\nSwitching from 8-bit to 16-bit."
-    IDS_UNSUPPORTEDSCREENMODE 
-                            "The selected screen mode can't be displayed in a window, because %s\nSwitching to full-screen display."
-    IDS_UNSUPPORTEDSCREENMODE_1 
-                            "the desktop is running in an unknown color mode."
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_UNSUPPORTEDSCREENMODE_2 
-                            "the desktop is running in 8-bit color depth, which WinUAE can't use in windowed mode."
-    IDS_UNSUPPORTEDSCREENMODE_3 
-                            "the desktop is too small for the specified window size."
-    IDS_UNSUPPORTEDSCREENMODE_4 
-                            "you selected an RTG (Picasso96) display with unsupported color depth."
-    IDS_FLOPPYTYPE35DD      "3.5"" DD"
-    IDS_FLOPPYTYPE35HD      "3.5"" HD"
-    IDS_FLOPPYTYPE525SD     "5.25"" SD"
-    IDS_FLOPPYTYPEDISABLED  "Disabled"
-    IDS_STMENUNOFLOPPY      "No floppy disk inserted"
-    IDS_TREEVIEW_HARDWARE   "Hardware"
-    IDS_TREEVIEW_HOST       "Host"
-    IDS_TREEVIEW_MISC       "Miscellaneous"
-    IDS_TREEVIEW_SETTINGS   "Settings"
-    IDS_WINUAETITLE_MMB     "[Mouse active - press ALT+TAB or middle mouse button to cancel]"
-    IDS_WINUAETITLE_NORMAL  "[Mouse active - press ALT+TAB to cancel]"
-    IDS_STARTEMULATION      "Start"
-    IDS_TREEVIEW_ABOUT      "About"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NOHARDDRIVES        "No hard disks detected that were either empty or RDB-partitioned."
-    IDS_DEFAULT_HOST        "Default Configuration"
-    IDS_SOUND_4CHANNEL      "4 Channels"
-    IDS_HF_FS_CUSTOM        "Custom"
-    IDS_SELECTFS            "Select file system handler (FastFileSystem, SmartFilesystem, etc.)"
-    IDS_KEYJOY              "Keyboard Layout A (Numeric keypad, 0 and 5 = Fire)\nKeyboard Layout B (Cursor keys, Right CTRL and ALT = Fire)\nKeyboard Layout C (W=Up S=Down A=Left D=Right, Left ALT = Fire)\nX-Arcade (Left)\nX-Arcade (Right)"
-    IDS_STATEFILE_UNCOMPRESSED "Uncompressed"
-    IDS_STATEFILE_RAMDUMP   "RAM dump"
-    IDS_STATEFILE_WAVE      "Wave audio dump"
-    IDS_SOUND_SWAP_PAULA    "Paula only"
-    IDS_SOUND_SWAP_AHI      "AHI only"
-    IDS_SOUND_SWAP_BOTH     "Both"
-    IDS_SOUND_FILTER_ON_AGA "Always on (A500)"
-    IDS_SOUND_FILTER_ON_A500 "Always on (A1200)"
-    IDS_DRIVESOUND_PC_FLOPPY "PC floppy drive %c"
-    IDS_FLOPPYTYPE35DDESCOM "3.5"" ESCOM"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NUMSG_NEEDEXT2      "The software uses a non-standard floppy disk format. You may need to use a custom floppy disk image file instead of a standard one. This message will not appear again."
-    IDS_NUMSG_NOROMKEY      "Could not find system ROM key file."
-    IDS_NUMSG_KSROMCRCERROR "System ROM checksum incorrect. The system ROM image file may be corrupt."
-    IDS_NUMSG_KSROMREADERROR "Error while reading system ROM."
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_NUMSG_NOEXTROM      "No extended ROM found."
-    IDS_NUMSG_MODRIP_NOTFOUND "No music modules or packed data found."
-    IDS_NUMSG_MODRIP_FINISHED "Scan finished."
-    IDS_NUMSG_MODRIP_SAVE   "Module/packed data found\n%s\nStart address %08.8X, Size %d bytes\nWould you like to save it?"
-    IDS_NUMSG_KS68020       "The selected system ROM requires a 68020 with 32-bit addressing or 68030 or higher CPU."
-    IDS_NUMSG_ROMNEED       "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."
-    IDS_NUMSG_STATEHD       "WARNING: Current configuration is not fully compatible with state saves.\nThis message will not appear again."
-    IDS_NUMSG_NOCAPS        "Selected disk image needs the SPS plugin\nwhich is available from\nhttp//www.softpres.org/"
-    IDS_NUMSG_OLDCAPS       "You need an updated SPS plugin\nwhich is available from\nhttp//www.softpres.org/"
-    IDS_IMGCHK_BOOTBLOCKCRCERROR 
-                            "The selected floppy disk image is not bootable (boot block checksum error)"
-    IDS_IMGCHK_BOOTBLOCKNO  "The selected floppy disk image is not bootable (no boot block)"
-    IDS_IMGCHK_DAMAGED      "The selected floppy disk image is damaged or unformatted"
-    IDS_IMGCHK_KS2          "The selected floppy disk image requires a 2.04 or later system ROM.\nThe configuration has been updated."
-    IDS_IMGCHK_KS3          "The selected floppy disk image requires a 3.0 or later system ROM.\nThe configuration has been updated."
-    IDS_ROMSCANEND          "Scan of ROMs finished"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_ROM_AVAILABLE       "available"
-    IDS_ROM_UNAVAILABLE     "unavailable"
-    IDS_HARDDRIVESAFETYWARNING1 
-                            "Warning: The drive safety check is active. Selected drive is not empty and non-RDB partitioned."
-    IDS_NUMSG_KS68EC020     "The selected system ROM requires a 68020 with 24-bit addressing or higher CPU."
-    IDS_ROMSCANNOROMS       "No supported system ROMs detected."
-    IDS_NUMSG_KICKREP       "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement."
-    IDS_NUMSG_KICKREPNO     "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality."
-    IDS_NUMSG_NOROM         "Could not load system ROM, trying system ROM replacement."
-    IDS_HDCLONE_OK          "Hard drive image file created succesfully."
-    IDS_HDCLONE_FAIL        "Hard drive image file creation failed.\nError code %d:%d."
-    IDS_NUMSG_KS68030       "The selected system ROM requires a 68030 CPU."
-    IDS_NUMSG_EXPROMNEED    "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."
-    IDS_HARDDRIVESAFETYWARNING2 
-                            "Warning: The drive safety check has been disabled, and non-empty and non-RDB partitioned hard disk(s) were detected."
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_QS_MODELS           "A500\nA500+\nA600\nA1000\nA1200\nA3000\nA4000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration"
-    IDS_QS_MODEL_A500       "1.3 ROM, OCS, 512 KB Chip + 512 KB Slow RAM (most common)\nThis configuration is capable of running most games and demos produced for first-generation hardware. Only few exceptions need a different configuration (e.g. the oldest games tend to be incompatible with this configuration).\n1.3 ROM, ECS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nLater hardware revision of the A500. Nearly 100% compatible with the previous configuration.\n1.3 ROM, ECS Agnus, 1 MB Chip RAM\nFew newer games and demos require this configuration.\n1.3 ROM, OCS Agnus, 512 KB Chip RAM\nVery old (e.g. pre-1988) games and demos may require this configuration.\n1.2 ROM, OCS Agnus, 512 KB Chip RAM\nAs available for the A1000, and installed on the first A500 and A2000 series. Some very old programs only work correctly with this configuration. Note: This system ROM version can only boot from floppy disk (no hard disk boot support).\n1.2 ROM, OCS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nThis configuration adds expansion memory to the first A500 produced. Try this if your game does not work with newer configurations, but works with the previous one. It could add some features to the game, including faster loading times. Note: This system ROM version can only boot from floppy disk (no hard disk boot support)."
-    IDS_QS_MODEL_A500P      "Basic non-expanded configuration\nThe A500+ adds an ECS Agnus chip, 1 MB of Chip RAM and a 2.0 ROM to the A500. Many A500 games and demos don't work properly on an A500+.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"
-    IDS_QS_MODEL_A600       "Basic non-expanded configuration\nThe A600 is smaller than the A500+ and has an updated 2.0 ROM.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"
-    IDS_QS_MODEL_A1000      "512 KB Chip RAM\nThe A1000 was the first model produced, with a configuration equivalent to that of an A500 with OCS chipset. You normally don't need to use this configuration, unless you are nostalgic and would like to hear the short A1000 boot tune\n""ICS"" Denise without EHB support\nVery first A1000 models had Denise without EHB capability.\n256 KB Chip RAM\n Unexpanded A1000. All later A1000 models were sold with a 256 KB RAM expansion built-in."
-    IDS_QS_MODEL_A1200      "Basic non-expanded configuration\nUse this configuration to run most AGA demos and games\n4 MB Fast RAM expanded configuration\nSome newer AGA games and demos need an expanded A1200 to run."
-    IDS_QS_MODEL_CD32       "CD32\nThe CD32 was one the first 32-bit consoles on the market. It is basically an A1200 with a built-in CD-ROM drive. Insert your CD32 or CDTV CD-ROM into a free CD-ROM drive before starting the emulation.\nCD32 + MPEG Full Motion Video Cartridge (not emulated yet)\n"
-    IDS_QS_MODEL_CDTV       "CDTV\nThe CDTV was the first model with a built-in CD-ROM drive. Looking like a black CD player, it featured a configuration equivalent to that of an A500 with 1 MB RAM and an ECS chipset.\nFloppy drive and 64KB SRAM card expanded CDTV\n"
-END
-
-STRINGTABLE 
-BEGIN
-    IDS_QS_MODEL_UAE        "High-end expanded configuration"
-    IDS_QS_MODEL_ARCADIA    "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and  Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel."
-    IDS_QS_MODEL_A3000      "1.4 ROM, 2MB Chip + 8MB Fast\n\n2.04 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n"
-    IDS_QS_MODEL_A4000      "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n"
-    IDS_QS_MODEL_A4000T     "A4000T (test)\nA4000T"
-END
-
-#endif    // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Finnish resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)
-#ifdef _WIN32
-LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE 
-BEGIN
-    "resource.\0"
-END
-
-3 TEXTINCLUDE 
-BEGIN
-    "\r\0"
-END
-
-2 TEXTINCLUDE 
-BEGIN
-    "#include ""afxres.h""\r\0"
-END
-
-#endif    // APSTUDIO_INVOKED
-
-#endif    // Finnish resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "afxres.h"\r\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDR_DBGACCEL ACCELERATORS \r
+BEGIN\r
+    VK_F1,          ID_DBG_PAGE1,           VIRTKEY, NOINVERT\r
+    VK_F2,          ID_DBG_PAGE2,           VIRTKEY, NOINVERT\r
+    VK_F3,          ID_DBG_PAGE3,           VIRTKEY, NOINVERT\r
+    VK_F4,          ID_DBG_PAGE4,           VIRTKEY, NOINVERT\r
+    VK_F5,          ID_DBG_PAGE5,           VIRTKEY, NOINVERT\r
+    VK_F6,          ID_DBG_PAGE6,           VIRTKEY, NOINVERT\r
+    VK_F7,          ID_DBG_PAGE7,           VIRTKEY, NOINVERT\r
+    VK_F8,          ID_DBG_PAGE8,           VIRTKEY, NOINVERT\r
+    VK_F9,          ID_DBG_PAGE9,           VIRTKEY, NOINVERT\r
+    VK_F11,         ID_DBG_STEP_OVER,       VIRTKEY, NOINVERT\r
+    VK_F12,         ID_DBG_STEP_INTO,       VIRTKEY, NOINVERT\r
+    VK_DOWN,        IDC_DBG_MEMDOWN,        VIRTKEY, ALT, NOINVERT\r
+    VK_RIGHT,       IDC_DBG_MEMDOWNFAST,    VIRTKEY, ALT, NOINVERT\r
+    VK_UP,          IDC_DBG_MEMUP,          VIRTKEY, ALT, NOINVERT\r
+    VK_LEFT,        IDC_DBG_MEMUPFAST,      VIRTKEY, ALT, NOINVERT\r
+    "H",            IDC_DBG_HELP,           VIRTKEY, ALT, NOINVERT\r
+    "P",            IDC_DBG_MEMTOPC,        VIRTKEY, ALT, NOINVERT\r
+    "A",            IDC_DBG_AUTOSET,        VIRTKEY, ALT, NOINVERT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_KICKSTART DIALOGEX 0, 0, 300, 176\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+EXSTYLE WS_EX_CONTEXTHELP\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "System ROM Settings",-1,5,0,290,93\r
+    RTEXT           "Main ROM file:",IDC_ROMTEXT,10,13,75,10\r
+    COMBOBOX        IDC_ROMFILE,12,26,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "...",IDC_KICKCHOOSER,280,25,10,15\r
+    RTEXT           "Extended ROM file:",IDC_ROMFILE2TEXT,10,43,75,10\r
+    COMBOBOX        IDC_ROMFILE2,12,56,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "...",IDC_ROMCHOOSER2,280,55,10,15\r
+    CONTROL         "MapROM emulation [] Creates a BlizKick-compatible memory area.",IDC_MAPROM,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,95,77,87,10\r
+    CONTROL         "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,77,87,10\r
+    GROUPBOX        "Miscellaneous",-1,5,99,290,75\r
+    RTEXT           "Cartridge ROM file:",IDC_FLASHTEXT2,8,110,75,10\r
+    COMBOBOX        IDC_CARTFILE,12,123,263,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "...",IDC_CARTCHOOSER,280,122,10,15\r
+    RTEXT           "Flash RAM file:",IDC_FLASHTEXT,8,142,75,10\r
+    EDITTEXT        IDC_FLASHFILE,12,155,262,13,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_FLASHCHOOSER,280,154,10,15\r
+END\r
+\r
+IDD_DISPLAY DIALOGEX 0, 0, 300, 235\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Screen",IDC_SCREENRESTEXT,12,0,270,67,BS_LEFT\r
+    RTEXT           "Full screen:",IDC_SELECTRESTEXT,15,17,40,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_DISPLAYSELECT,59,10,215,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RESOLUTION,59,27,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_REFRESHRATE,187,27,87,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    EDITTEXT        IDC_XSIZE,59,48,48,12,ES_NUMBER\r
+    EDITTEXT        IDC_YSIZE,114,48,47,12,ES_NUMBER\r
+    GROUPBOX        "Settings",IDC_SETTINGSTEXT,12,73,199,125\r
+    CONTROL         "Correct aspect ratio",IDC_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,126,92,10\r
+    LTEXT           "Refresh:",IDC_REFRESHTEXT,18,162,28,8\r
+    CONTROL         "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,157,75,20\r
+    EDITTEXT        IDC_RATETEXT,124,161,77,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Centering",IDC_STATIC,221,73,61,49\r
+    CONTROL         "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,87,49,10\r
+    CONTROL         "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,103,49,10\r
+    GROUPBOX        "Line Mode",IDC_LINEMODE,222,126,61,73\r
+    CONTROL         "Normal",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,231,142,44,10\r
+    CONTROL         "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,158,45,10\r
+    CONTROL         "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,174,46,10\r
+    COMBOBOX        IDC_DA_MODE,20,211,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,207,101,20\r
+    LTEXT           "FPS adj.:",IDC_REFRESH2TEXT,16,182,32,8\r
+    CONTROL         "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,177,127,20\r
+    EDITTEXT        IDC_RATE2TEXT,175,181,26,12,ES_CENTER | ES_READONLY\r
+    COMBOBOX        IDC_RESOLUTIONDEPTH,134,27,46,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Filtered low resolution",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,126,89,10\r
+    COMBOBOX        IDC_SCREENMODE_NATIVE,100,85,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_SCREENMODE_RTG,100,103,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Native mode:",IDC_STATIC,19,85,59,15,SS_CENTERIMAGE\r
+    RTEXT           "Windowed:",IDC_WINDOWEDTEXT,15,51,40,8\r
+    RTEXT           "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE\r
+    PUSHBUTTON      "Reset to defaults",IDC_DA_RESET,212,211,73,14\r
+    RTEXT           "Resolution:",IDC_STATIC,27,140,59,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_LORES,100,140,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+END\r
+\r
+IDD_MEMORY DIALOGEX 0, 0, 300, 239\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+EXSTYLE WS_EX_CONTEXTHELP\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Memory Settings",-1,14,7,274,69\r
+    RTEXT           "Chip:",-1,24,26,20,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20\r
+    EDITTEXT        IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Slow:",-1,149,26,20,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20\r
+    EDITTEXT        IDC_SLOWRAM,243,25,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Fast:",IDC_FASTTEXT,24,51,20,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,47,50,20\r
+    EDITTEXT        IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Z3 Fast:",IDC_Z3TEXT,139,51,30,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20\r
+    EDITTEXT        IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,98,53,10,SS_NOTIFY | SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,94,60,20\r
+    EDITTEXT        IDC_P96RAM,152,97,34,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Advanced Memory Settings",-1,13,179,275,57\r
+    RTEXT           "Motherboard RAM (Low area):",-1,39,194,129,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,190,59,20\r
+    EDITTEXT        IDC_MBRAM1,243,193,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Motherboard RAM (High area):",-1,39,217,129,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,213,59,20\r
+    EDITTEXT        IDC_MBRAM2,243,216,34,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "RTG Graphics Card Settings",-1,14,81,275,95\r
+    CONTROL         "Scale if smaller than display size setting",IDC_RTG_SCALE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,128,162,10\r
+    CONTROL         "Match host and RTG color depth if possible",IDC_RTG_MATCH_DEPTH,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,116,163,10\r
+    COMBOBOX        IDC_RTG_8BIT,211,107,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RTG_16BIT,211,123,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RTG_24BIT,211,139,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_RTG_32BIT,211,155,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,140,162,10\r
+    COMBOBOX        IDC_RTG_SCALE_ASPECTRATIO,131,155,57,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Scale aspect ratio",-1,24,156,99,10,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_CPU DIALOGEX 0, 0, 300, 226\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "CPU",IDC_STATIC,5,3,81,139,BS_LEFT\r
+    CONTROL         "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,16,63,10\r
+    CONTROL         "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,30,65,10\r
+    CONTROL         "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,44,63,10\r
+    CONTROL         "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,58,64,10\r
+    CONTROL         "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,72,66,10\r
+    CONTROL         "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,86,66,10\r
+    CONTROL         "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,114,73,8\r
+    CONTROL         "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,127,73,10\r
+    GROUPBOX        "CPU Emulation Speed",IDC_STATIC,90,3,205,90\r
+    CONTROL         "Fastest possible, but maintain chipset timing",IDC_CS_HOST,\r
+                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,95,18,195,10\r
+    CONTROL         "Match A500 speed",IDC_CS_68000,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,32,195,10\r
+    CONTROL         "Adjustable between CPU and chipset",IDC_CS_ADJUSTABLE,\r
+                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,95,46,195,10\r
+    RTEXT           "CPU",IDC_CS_CPU_TEXT,96,73,15,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    CONTROL         "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,114,68,67,20\r
+    LTEXT           "Chipset",IDC_CS_CHIPSET_TEXT,182,73,25,10,SS_CENTERIMAGE | NOT WS_GROUP | WS_TABSTOP\r
+    RTEXT           "CPU idle",IDC_CS_CPU_TEXT2,236,56,32,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,219,68,69,20\r
+    GROUPBOX        "Advanced JIT Settings",IDC_STATIC,90,94,205,93\r
+    RTEXT           "Cache size:",IDC_CS_CACHE_TEXT,95,113,45,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,140,108,115,20\r
+    EDITTEXT        IDC_CACHETEXT,255,113,30,12,ES_CENTER | ES_READONLY\r
+    CONTROL         "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,141,63,10\r
+    CONTROL         "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,155,63,10\r
+    CONTROL         "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,169,62,10\r
+    CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,141,62,10\r
+    CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,235,141,52,10\r
+    CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,155,52,10\r
+    CONTROL         "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,210,73,10\r
+    GROUPBOX        "FPU",IDC_STATIC,6,146,81,80,BS_LEFT\r
+    CONTROL         "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,100,73,8\r
+    CONTROL         "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,157,63,10\r
+    CONTROL         "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,171,63,10\r
+    CONTROL         "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,185,63,10\r
+    CONTROL         "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,199,63,10\r
+END\r
+\r
+IDD_FLOPPY DIALOGEX 0, 0, 300, 240\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    COMBOBOX        IDC_DF0TEXT,2,22,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF0TYPE,115,6,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,8,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF0WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,4,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT0,253,4,30,15\r
+    PUSHBUTTON      "...",IDC_DF0,287,4,10,15\r
+    COMBOBOX        IDC_DF1TEXT,2,58,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF1TYPE,115,42,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,43,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF1WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,40,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT1,253,40,30,15\r
+    PUSHBUTTON      "...",IDC_DF1,287,40,10,15\r
+    COMBOBOX        IDC_DF2TEXT,2,93,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF2TYPE,115,77,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,77,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF2WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,75,9,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT2,253,75,30,15\r
+    PUSHBUTTON      "...",IDC_DF2,287,75,10,15\r
+    COMBOBOX        IDC_DF3TEXT,2,128,296,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_DF3TYPE,115,112,57,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Write-protected",IDC_STATIC,174,113,59,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF3WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,238,111,9,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT3,253,110,30,15\r
+    PUSHBUTTON      "...",IDC_DF3,287,109,10,15\r
+    GROUPBOX        "New Floppy Disk Image",IDC_SETTINGSTEXT,5,183,289,49\r
+    COMBOBOX        IDC_FLOPPYTYPE,16,197,51,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Create Standard Disk [] Creates a standard 880 or 1760 KB ADF disk image.",IDC_CREATE,77,196,97,15\r
+    PUSHBUTTON      "Create Custom Disk [] Creates a low level (MFM) ADF disk image (about 2MB). Useful for programs that use non-standard disk formats (for example some save disks or DOS-formatted floppies)",IDC_CREATE_RAW,183,196,101,15\r
+    GROUPBOX        "Floppy Drive Emulation Speed",IDC_SETTINGSTEXT2,5,144,289,35\r
+    CONTROL         "",IDC_FLOPPYSPD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,32,154,116,20\r
+    EDITTEXT        IDC_FLOPPYSPDTEXT,183,157,101,12,ES_CENTER | ES_READONLY\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE0,43,5,70,15,NOT WS_VISIBLE\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE1,43,40,70,15,NOT WS_VISIBLE\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE2,43,75,70,15,NOT WS_VISIBLE\r
+    PUSHBUTTON      "Delete save image",IDC_SAVEIMAGE3,43,110,70,15,NOT WS_VISIBLE\r
+    EDITTEXT        IDC_CREATE_NAME,77,215,97,13,ES_AUTOHSCROLL\r
+    RTEXT           "Disk label:",IDC_STATIC,15,216,52,10,SS_CENTERIMAGE\r
+    CONTROL         "DF0:",IDC_DF0ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,6,34,15\r
+    CONTROL         "DF1:",IDC_DF1ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,41,34,15\r
+    CONTROL         "DF2:",IDC_DF2ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,76,34,15\r
+    CONTROL         "DF3:",IDC_DF3ENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,3,111,34,15\r
+END\r
+\r
+IDD_HARDDISK DIALOGEX 0, 0, 300, 237\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+EXSTYLE WS_EX_CONTEXTHELP\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "List1",IDC_VOLUMELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,0,290,176\r
+    PUSHBUTTON      "Add &Directory or Archive...",IDC_NEW_FS,10,179,103,15\r
+    PUSHBUTTON      "Add &Hardfile...",IDC_NEW_HF,130,179,74,15\r
+    PUSHBUTTON      "Add Ha&rd Drive...",IDC_NEW_HD,220,179,75,15\r
+    PUSHBUTTON      "Remove",IDC_REMOVE,235,203,60,15\r
+    PUSHBUTTON      "&Properties",IDC_EDIT,235,220,60,15\r
+    CONTROL         "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,202,100,10\r
+    CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,202,119,10\r
+    CONTROL         "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,213,121,10\r
+    CONTROL         "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,225,101,10\r
+    CONTROL         "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,213,100,10\r
+    CONTROL         "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,225,115,10\r
+END\r
+\r
+IDD_SOUND DIALOGEX 0, 0, 300, 231\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    RTEXT           "Sound device:",IDC_SOUNDCARD,8,9,51,13,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDCARDLIST,64,9,229,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Sound Emulation",IDC_SOUNDSETTINGS,5,30,120,81\r
+    CONTROL         "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,45,101,10\r
+    CONTROL         "Disabled, but emulated",IDC_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,57,102,10\r
+    CONTROL         "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,69,102,10\r
+    CONTROL         "Enabled, 100% accurate",IDC_SOUND3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,81,101,10\r
+    GROUPBOX        "Volume",IDC_STATIC,132,36,164,31\r
+    CONTROL         "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,44,105,20\r
+    EDITTEXT        IDC_SOUNDVOLUME2,247,47,40,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Sound Buffer Size",IDC_STATIC,132,73,164,31\r
+    CONTROL         "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,81,105,19\r
+    EDITTEXT        IDC_SOUNDBUFFERMEM,247,84,40,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,6,114,290,60\r
+    LTEXT           "Frequency:",IDC_SOUNDFREQTXT,11,148,53,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDFREQ,13,157,51,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,209,148,77,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDFILTER,209,157,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Channel mode:",IDC_SOUNDSTEREOTXT,11,124,57,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDSTEREO,13,133,122,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,209,124,75,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDINTERPOLATION,209,133,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,141,124,63,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDSTEREOSEP,142,133,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Stereo delay:",IDC_SOUNDSTEREOMIXTXT,141,148,63,8,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_SOUNDSTEREOMIX,142,157,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Floppy Drive Sound Emulation",IDC_STATIC,6,177,290,46\r
+    CONTROL         "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,185,107,19\r
+    EDITTEXT        IDC_SOUNDDRIVEVOLUME2,124,187,40,12,ES_CENTER | ES_READONLY\r
+    COMBOBOX        IDC_SOUNDDRIVE,237,187,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_SOUNDDRIVESELECT,18,205,265,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_SOUNDSWAP,73,157,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Swap channels:",IDC_SOUNDSWAPTXT,74,148,61,8,SS_CENTERIMAGE\r
+    CONTROL         "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,95,103,10\r
+END\r
+\r
+IDD_LOADSAVE DIALOGEX 0, 0, 302, 241\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "",IDC_CONFIGTREE,"SysTreeView32",TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,6,3,289,153,WS_EX_CLIENTEDGE\r
+    RTEXT           "Name:",IDC_STATIC,4,161,40,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDITNAME,48,162,146,13,ES_AUTOHSCROLL\r
+    RTEXT           "Description:",IDC_STATIC,2,182,41,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDITDESCRIPTION,48,183,146,13,ES_AUTOHSCROLL\r
+    RTEXT           "Link:",IDC_STATIC,4,204,40,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_CONFIGLINK,48,205,93,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,207,48,10\r
+    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED\r
+    CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,163,42,10\r
+    GROUPBOX        "Additional Information",IDC_STATIC,199,179,96,38,BS_LEFT\r
+    PUSHBUTTON      "View",IDC_VIEWINFO,208,195,37,15\r
+    PUSHBUTTON      "Set",IDC_SETINFO,250,195,37,15\r
+    PUSHBUTTON      "Load",IDC_QUICKLOAD,5,225,44,15\r
+    PUSHBUTTON      "Save",IDC_QUICKSAVE,54,225,44,15\r
+    PUSHBUTTON      "Load From...",IDC_LOAD,121,225,49,15\r
+    PUSHBUTTON      "Delete",IDC_DELETE,251,225,44,15\r
+    PUSHBUTTON      "Save As...",IDC_SAVE,175,225,44,15\r
+END\r
+\r
+IDD_PORTS DIALOGEX 0, 0, 300, 238\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Parallel Port",IDC_SERPARFRAME,5,2,291,68\r
+    RTEXT           "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_PRINTERLIST,49,15,153,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,220,15,58,12\r
+    CONTROL         "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,79,12\r
+    CONTROL         "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,95,33,110,12\r
+    RTEXT           "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER\r
+    RTEXT           "Ghostscript extra parameters:",IDC_STATIC,12,49,102,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PS_PARAMS,124,50,165,12,ES_AUTOHSCROLL\r
+    GROUPBOX        "Serial Port",IDC_SERIALFRAME,4,72,292,48\r
+    COMBOBOX        IDC_SERIAL,49,84,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,103,48,12\r
+    CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,103,55,12\r
+    GROUPBOX        "MIDI",IDC_MIDIFRAME,4,123,292,33\r
+    RTEXT           "Out:",IDC_MIDI,10,134,34,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_MIDIOUTLIST,50,134,95,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "In:",IDC_MIDI2,150,134,29,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_MIDIINLIST,185,134,95,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Mouse/Joystick Ports",IDC_PORT0,4,158,292,75\r
+    COMBOBOX        IDC_PORT0_JOYS,45,174,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_PORT1_JOYS,45,195,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Swap ports",IDC_SWAP,211,214,75,14\r
+    RTEXT           "Port 0:",IDC_STATIC,11,173,25,15,SS_CENTERIMAGE\r
+    RTEXT           "Port 1:",IDC_STATIC,11,194,25,15,SS_CENTERIMAGE\r
+    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,16,213,106,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    CONTROL         "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,\r
+                    "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,103,65,12\r
+    CONTROL         "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,103,78,12\r
+END\r
+\r
+IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION\r
+CAPTION "UAE Authors and Contributors..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "Ok",ID_OK,177,219,53,14\r
+    CONTROL         "",IDC_CONTRIBUTORS,"RICHEDIT",TCS_HOTTRACK | TCS_VERTICAL | TCS_RAGGEDRIGHT | TCS_OWNERDRAWFIXED | TCS_MULTISELECT | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,5,404,206\r
+END\r
+\r
+IDD_ABOUT DIALOGEX 0, 0, 300, 191\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    CONTROL         "",IDC_RICHEDIT1,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,45,10,210,15\r
+    CONTROL         "",IDC_RICHEDIT2,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,30,260,13\r
+    PUSHBUTTON      "Contributors",IDC_CONTRIBUTORS,110,55,80,15\r
+    CONTROL         "",IDC_UAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,120,80,15\r
+    CONTROL         "",IDC_PICASSOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,90,80,20\r
+    CONTROL         "",IDC_AMIGAHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,109,90,80,20\r
+    CONTROL         "",IDC_WINUAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,120,80,15\r
+    CONTROL         "",IDC_AIABHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,120,80,15\r
+    CONTROL         "",IDC_THEROOTS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,145,80,15\r
+    CONTROL         "",IDC_CAPS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,145,80,15\r
+    CONTROL         "",IDC_ABIME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,145,80,15\r
+    CONTROL         "",IDC_CLOANTOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,90,80,20\r
+    CONTROL         "",IDC_AMIGASYS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,63,169,80,15\r
+    CONTROL         "",IDC_AMIKIT,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,157,169,80,15\r
+END\r
+\r
+IDD_MISC1 DIALOGEX 0, 0, 300, 237\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Advanced",IDC_STATIC,8,2,285,110\r
+    CONTROL         "Untrap mouse with middle button",IDC_JULIAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,15,129,10\r
+    CONTROL         "Show GUI on startup",IDC_SHOWGUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,27,120,10\r
+    CONTROL         "On-screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,40,115,10\r
+    CONTROL         "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,53,63,10\r
+    CONTROL         "Don't show taskbar button",IDC_NOTASKBARBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,66,117,10\r
+    CONTROL         "bsdsocket.library emulation",IDC_SOCKETS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,15,120,10\r
+    CONTROL         "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,27,120,10\r
+    CONTROL         "Synchronize clock",IDC_CLOCKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,40,115,10\r
+    GROUPBOX        "Keyboard LEDs",IDC_STATIC,7,140,85,94\r
+    COMBOBOX        IDC_KBLED1,22,154,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_KBLED2,22,173,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_KBLED3,22,193,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Logging",IDC_STATIC,97,140,195,25\r
+    CONTROL         "Create log file",IDC_CREATELOGFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,151,72,10\r
+    CONTROL         "Illegal memory accesses",IDC_ILLEGAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,189,151,95,10\r
+    GROUPBOX        "State Files",IDC_STATIC,98,167,195,68\r
+    PUSHBUTTON      "Load state...",IDC_DOLOADSTATE,105,180,49,14\r
+    PUSHBUTTON      "Save state...",IDC_DOSAVESTATE,105,208,49,14\r
+    CONTROL         "Enable state recording",IDC_STATE_CAPTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,182,88,10\r
+    RTEXT           "Recording rate (seconds):",IDC_STATIC,157,199,86,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_STATE_RATE,248,197,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Recording buffer (MB):",IDC_STATIC,160,219,83,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_STATE_BUFFERSIZE,248,217,38,65,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Always on top",IDC_ALWAYSONTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,79,117,10\r
+    CONTROL         "Catweasel",IDC_CATWEASEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,53,115,10\r
+    CONTROL         "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,216,64,10\r
+    COMBOBOX        IDC_SCSIMODE,92,51,64,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_LANGUAGE,103,121,179,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Language",IDC_STATIC,7,113,285,25\r
+    CONTROL         "Disable powersaving features",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,92,120,10\r
+    CONTROL         "Magic Mouse",IDC_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,66,119,10\r
+    CONTROL         "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,79,94,10\r
+    COMBOBOX        IDC_DD_SURFACETYPE,217,93,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Display buffer:",IDC_STATIC,159,94,52,10,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_HARDFILE DIALOGEX 0, 0, 299, 249\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Hardfile Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "Settings",IDC_STATIC,10,5,280,146\r
+    RTEXT           "Path:",IDC_HARDFILE_DIR_TEXT,25,18,22,10\r
+    EDITTEXT        IDC_PATH_NAME,52,15,213,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_SELECTOR,271,15,11,15\r
+    RTEXT           "FileSys:",IDC_HARDFILE_FILESYS_TEXT,13,38,34,10\r
+    EDITTEXT        IDC_PATH_FILESYS,52,35,213,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_FILESYS_SELECTOR,271,35,11,15\r
+    RTEXT           "Device:",IDC_HARDFILE_DEVICE_TEXT,16,58,31,10\r
+    EDITTEXT        IDC_HARDFILE_DEVICE,52,55,66,15,ES_AUTOHSCROLL\r
+    RTEXT           "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,20,94,48,8\r
+    EDITTEXT        IDC_HARDFILE_BOOTPRI,73,90,44,15\r
+    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,74,64,10\r
+    PUSHBUTTON      "Enable RDB mode",IDC_HDF_RDB,174,55,92,14\r
+    RTEXT           "Surfaces:",IDC_SURFACES_TEXT,118,94,32,10\r
+    EDITTEXT        IDC_HEADS,155,90,40,15,ES_NUMBER\r
+    RTEXT           "Reserved:",IDC_RESERVED_TEXT,197,94,35,10\r
+    EDITTEXT        IDC_RESERVED,237,90,40,15,ES_NUMBER\r
+    RTEXT           "Sectors:",IDC_SECTORS_TEXT,120,113,30,10\r
+    EDITTEXT        IDC_SECTORS,155,111,40,15,ES_NUMBER\r
+    RTEXT           "Block size:",IDC_BLOCKSIZE_TEXT,197,113,35,10\r
+    EDITTEXT        IDC_BLOCKSIZE,237,111,40,15,ES_NUMBER\r
+    GROUPBOX        "New hard disk image file",IDC_STATIC,10,156,280,62\r
+    PUSHBUTTON      "Create",IDC_HF_CREATE,23,171,80,14\r
+    EDITTEXT        IDC_HF_SIZE,119,171,61,15,ES_NUMBER\r
+    PUSHBUTTON      "OK",IDOK,102,226,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,158,226,50,14\r
+    EDITTEXT        IDC_HF_DOSTYPE,119,194,61,15\r
+    COMBOBOX        IDC_HF_TYPE,23,195,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_HDF_CONTROLLER,73,112,44,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "DOS type",IDC_STATIC,187,196,32,10,SS_CENTERIMAGE\r
+    RTEXT           "MB",IDC_STATIC,185,174,17,10,SS_CENTERIMAGE\r
+    RTEXT           "HD Controller:",IDC_STATIC,16,113,52,10,SS_CENTERIMAGE\r
+    CONTROL         "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,74,53,10\r
+    CONTROL         "Do not mount",IDC_HDF_DONOTMOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,74,67,10\r
+    EDITTEXT        IDC_HDFINFO,16,131,268,12,ES_CENTER | ES_READONLY\r
+    CONTROL         "Sparse file",IDC_HF_SPARSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,174,62,10\r
+END\r
+\r
+IDD_FILESYS DIALOGEX 15, 25, 299, 111\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Volume Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "Device name:",-1,11,7,54,10\r
+    EDITTEXT        IDC_VOLUME_DEVICE,65,5,104,15,ES_AUTOHSCROLL\r
+    LTEXT           "Volume label:",-1,13,28,54,10\r
+    EDITTEXT        IDC_VOLUME_NAME,65,25,104,15,ES_AUTOHSCROLL\r
+    LTEXT           "Path:",-1,38,49,44,10\r
+    EDITTEXT        IDC_PATH_NAME,65,46,227,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "Select Directory",IDC_FS_SELECT_DIR,65,66,103,15\r
+    CONTROL         "Read/write",IDC_FS_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,7,55,10\r
+    RTEXT           "Boot priority:",IDC_VOLUME_BOOTPRI_TEXT,178,28,49,8\r
+    EDITTEXT        IDC_VOLUME_BOOTPRI,236,25,30,15\r
+    PUSHBUTTON      "OK",IDOK,65,91,48,15\r
+    PUSHBUTTON      "Cancel",IDCANCEL,120,91,48,15\r
+    PUSHBUTTON      "Select Archive or Plain File",IDC_FS_SELECT_FILE,190,66,103,15\r
+    PUSHBUTTON      "Eject",IDC_FS_SELECT_EJECT,230,91,62,15\r
+    CONTROL         "Bootable",IDC_FS_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,7,53,10\r
+END\r
+\r
+IDD_SETINFO DIALOGEX 0, 0, 229, 85\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Additional Information Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    RTEXT           "Path:",-1,5,20,24,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATH_NAME,35,20,169,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_SELECTOR,210,20,10,15\r
+    PUSHBUTTON      "OK",IDOK,120,65,48,15\r
+    PUSHBUTTON      "Cancel",IDCANCEL,175,65,48,15\r
+END\r
+\r
+IDD_CHIPSET DIALOGEX 0, 65490, 300, 229\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "Chipset",IDC_STATIC,14,11,145,90\r
+    CONTROL         "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,26,51,10\r
+    CONTROL         "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,42,55,10\r
+    CONTROL         "ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,42,55,10\r
+    CONTROL         "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,58,52,10\r
+    CONTROL         "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,26,51,10\r
+    CONTROL         "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,58,50,10\r
+    GROUPBOX        "Options",IDC_STATIC,168,11,114,89\r
+    CONTROL         "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,179,33,96,10\r
+    CONTROL         "Cycle-exact [] The most compatible A500 emulation mode. Very fast PC recommended.",IDC_CYCLEEXACT,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,46,100,10\r
+    GROUPBOX        "Collision Level",IDC_STATIC,14,105,267,48\r
+    CONTROL         "None [] Collision hardware emulation disabled.",IDC_COLLISION0,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,121,59,10\r
+    CONTROL         "Sprites only [] Emulate only sprite vs. sprite collisions.",IDC_COLLISION1,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,137,62,10\r
+    CONTROL         "Sprites and Sprites vs. Playfield [] Recommended collision emulation level.",IDC_COLLISION2,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,121,161,10\r
+    CONTROL         "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",IDC_COLLISION3,\r
+                    "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,137,119,10\r
+    GROUPBOX        "Sound Emulation",IDC_STATIC,13,159,268,65\r
+    CONTROL         "Disabled",IDC_CS_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,175,102,10\r
+    CONTROL         "Emulated",IDC_CS_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,190,91,10\r
+    CONTROL         "Emulated, 100% accurate",IDC_CS_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,205,95,10\r
+    CONTROL         "Genlock connected [] Allow boot sequence to detect genlock. Genlock is not emulated.",IDC_GENLOCK,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,59,100,10\r
+    CONTROL         "Faster RTG [] Enables less accurate custom chipset emulation mode when Picasso96 is enabled.",IDC_FASTERRTG,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,179,72,100,10\r
+    COMBOBOX        IDC_CS_EXT,100,80,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Chipset Extra",IDC_STATIC,25,79,52,15,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_CHIPSET2 DIALOGEX 0, 65490, 300, 247\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "Battery Backed Up Real Time Clock",IDC_STATIC,11,24,275,29\r
+    CONTROL         "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,36,55,10\r
+    CONTROL         "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,36,52,10\r
+    CONTROL         "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,36,46,10\r
+    EDITTEXT        IDC_CS_RTCADJUST,215,34,64,13,ES_AUTOHSCROLL\r
+    GROUPBOX        "CIA-A TOD Clock Source",IDC_STATIC,11,56,275,29\r
+    CONTROL         "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,68,63,10\r
+    CONTROL         "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,68,85,10\r
+    CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,186,68,88,10\r
+    CONTROL         "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,146,80,10\r
+    CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,95,88,10\r
+    CONTROL         "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,76,10\r
+    CONTROL         "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,108,87,10\r
+    CONTROL         "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,108,84,10\r
+    CONTROL         "CDTV CD",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,121,47,10\r
+    CONTROL         "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,120,87,10\r
+    CONTROL         "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,120,90,10\r
+    CONTROL         "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,133,79,10\r
+    CONTROL         "A4000/A4000T IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,133,88,10\r
+    CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,71,10\r
+    EDITTEXT        IDC_CS_RAMSEYREV,91,214,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,229,71,10\r
+    EDITTEXT        IDC_CS_FATGARYREV,91,228,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,188,76,10\r
+    CONTROL         "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,8,234,10\r
+    CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,95,92,10\r
+    CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,216,81,10\r
+    EDITTEXT        IDC_CS_AGNUSREV,232,214,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,229,81,10\r
+    EDITTEXT        IDC_CS_DENISEREV,232,228,45,13,ES_AUTOHSCROLL\r
+    CONTROL         "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,188,76,10\r
+    CONTROL         "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,188,88,10\r
+    LTEXT           "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,22,174,224,8,SS_CENTERIMAGE\r
+    CONTROL         "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,133,92,10\r
+    CONTROL         "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,76,10\r
+    CONTROL         "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,200,76,10\r
+    CONTROL         "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,200,101,10\r
+    CONTROL         "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,146,92,10\r
+    CONTROL         "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,146,80,10\r
+    CONTROL         "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10\r
+    CONTROL         "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,159,80,10\r
+    CONTROL         "No-EHB Denise",IDC_CS_NOEHB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,159,80,10\r
+    CONTROL         "Blitter Busy Bug",IDC_CS_BLITTERBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,159,80,10\r
+END\r
+\r
+IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 203\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Output Properties",IDC_STATIC,5,0,274,126\r
+    EDITTEXT        IDC_AVIOUTPUT_FILETEXT,15,15,226,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE\r
+    PUSHBUTTON      "...",IDC_AVIOUTPUT_FILE,249,15,19,12\r
+    CONTROL         "Audio",IDC_AVIOUTPUT_AUDIO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,33,39,14\r
+    CONTROL         "",IDC_AVIOUTPUT_AUDIO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,34,209,13\r
+    CONTROL         "Video",IDC_AVIOUTPUT_VIDEO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,50,39,14\r
+    CONTROL         "",IDC_AVIOUTPUT_VIDEO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,51,209,13\r
+    CONTROL         "Disable frame rate limit while recording",IDC_AVIOUTPUT_FRAMELIMITER,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,68,158,10\r
+    CONTROL         "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14\r
+    CONTROL         "PAL",IDC_AVIOUTPUT_PAL,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,131,103,66,14\r
+    CONTROL         "NTSC",IDC_AVIOUTPUT_NTSC,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,204,103,66,14\r
+    CONTROL         "Slider1",IDC_AVIOUTPUT_FPS,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_ENABLESELRANGE | WS_TABSTOP,166,84,87,11\r
+    LTEXT           "fps",IDC_AVIOUTPUT_FPS_STATIC,255,84,19,8\r
+    PUSHBUTTON      "Save screenshot",IDC_SCREENSHOT,16,141,77,14\r
+    GROUPBOX        "Ripper",IDC_STATIC,5,127,274,38\r
+    PUSHBUTTON      "Pro Wizard 1.62",IDC_PROWIZARD,104,141,77,14,WS_DISABLED\r
+    CONTROL         "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,141,77,14\r
+    GROUPBOX        "Input Recorder",IDC_STATIC,5,166,274,33\r
+    CONTROL         "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,178,77,14\r
+    CONTROL         "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,178,77,14\r
+    CONTROL         "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,180,78,10\r
+    CONTROL         "Disable sound output while recording",IDC_AVIOUTPUT_NOSOUNDOUTPUT,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,85,148,10\r
+END\r
+\r
+IDD_INPUT DIALOGEX 0, 0, 300, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    COMBOBOX        IDC_INPUTTYPE,5,5,98,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_INPUTDEVICE,109,5,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "",IDC_INPUTDEVICEDISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,282,8,9,8\r
+    CONTROL         "List1",IDC_INPUTLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,22,290,146\r
+    COMBOBOX        IDC_INPUTAMIGACNT,5,174,24,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_INPUTAMIGA,33,174,262,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Joystick dead zone (%):",-1,7,196,79,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTDEADZONE,92,195,25,12,ES_NUMBER\r
+    RTEXT           "Autofire rate (frames):",-1,10,212,76,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTAUTOFIRERATE,92,210,25,12,ES_NUMBER\r
+    RTEXT           "Digital joy-mouse speed:",-1,124,196,84,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDD,215,195,25,12,ES_NUMBER\r
+    RTEXT           "Analog joy-mouse speed:",-1,120,212,88,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDA,215,211,25,12,ES_NUMBER\r
+    RTEXT           "Mouse speed:",-1,132,228,76,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDM,215,227,25,12,ES_NUMBER\r
+    PUSHBUTTON      "Copy from:",IDC_INPUTCOPY,249,195,45,14\r
+    COMBOBOX        IDC_INPUTCOPYFROM,249,211,45,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14\r
+END\r
+\r
+IDD_FILTER DIALOGEX 0, 0, 296, 224\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Filter Settings",-1,0,0,294,186\r
+    CONTROL         "Enable",IDC_FILTERENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,17,46,10\r
+    COMBOBOX        IDC_FILTERMODE,62,15,61,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERFILTER,128,15,81,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Reset to defaults",IDC_FILTERDEFAULT,213,15,73,14\r
+    RTEXT           "Horiz. size:",-1,7,44,54,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,37,152,19\r
+    EDITTEXT        IDC_FILTERHZV,253,39,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Vert. size:",-1,7,64,54,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,57,152,19\r
+    EDITTEXT        IDC_FILTERVZV,253,59,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Horiz. position:",-1,5,84,55,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,77,151,19\r
+    EDITTEXT        IDC_FILTERHOV,253,79,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Vert. position:",-1,5,103,55,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,97,151,19\r
+    EDITTEXT        IDC_FILTERVOV,253,99,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Extra settings:",-1,27,137,57,10,SS_CENTERIMAGE\r
+    CONTROL         "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,157,151,19\r
+    EDITTEXT        IDC_FILTERXLV,253,159,34,12,ES_CENTER | ES_READONLY\r
+    COMBOBOX        IDC_FILTERSLR,253,134,33,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Presets",-1,0,187,296,36\r
+    COMBOBOX        IDC_FILTERPRESETS,8,201,119,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Load",IDC_FILTERPRESETLOAD,132,200,47,14\r
+    PUSHBUTTON      "Save",IDC_FILTERPRESETSAVE,184,200,47,14\r
+    PUSHBUTTON      "Delete",IDC_FILTERPRESETDELETE,236,200,47,14\r
+    COMBOBOX        IDC_FILTERHZMULT,67,43,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERVZMULT,67,63,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Autoscale",IDC_FILTERAUTORES,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,168,83,10\r
+    COMBOBOX        IDC_FILTERXTRA,105,134,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERASPECT,21,118,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,153,85,10\r
+END\r
+\r
+IDD_HARDDRIVE DIALOGEX 0, 0, 380, 76\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Harddrive Settings"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "Hard drive:",IDC_STATIC,7,11,80,10\r
+    COMBOBOX        IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10\r
+    DEFPUSHBUTTON   "Add hard drive",IDOK,231,48,65,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,319,48,54,14\r
+    DEFPUSHBUTTON   "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14\r
+    EDITTEXT        IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE\r
+    COMBOBOX        IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "HD Controller:",IDC_STATIC,42,51,52,10,SS_CENTERIMAGE\r
+END\r
+\r
+IDD_MISC2 DIALOGEX 0, 0, 300, 92\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "When Active",IDC_STATIC,8,7,88,73\r
+    RTEXT           "Run at priority:",IDC_ACTIVE_PRI,14,17,52,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_ACTIVE_PRIORITY,14,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "When Inactive",IDC_STATIC,102,7,92,73\r
+    RTEXT           "Run at priority:",IDC_INACTIVE_PRI,109,17,51,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_INACTIVE_PRIORITY,109,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Pause emulation",IDC_INACTIVE_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,50,69,10\r
+    CONTROL         "Disable sound",IDC_INACTIVE_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,63,79,10\r
+    GROUPBOX        "When Minimized",IDC_STATIC,199,7,92,73\r
+    RTEXT           "Run at priority:",IDC_MINIMIZED_PRI,207,18,51,10,SS_CENTERIMAGE | WS_TABSTOP\r
+    COMBOBOX        IDC_MINIMIZED_PRIORITY,207,29,76,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Pause emulation",IDC_MINIMIZED_PAUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,50,69,10\r
+    CONTROL         "Disable sound",IDC_MINIMIZED_NOSOUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,63,79,10\r
+END\r
+\r
+IDD_DISK DIALOGEX 0, 0, 300, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_CONTROL | DS_CENTER | DS_CENTERMOUSE | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    CONTROL         "",IDC_DISKLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,6,292,196\r
+    PUSHBUTTON      "Remove floppy disk image",IDC_DISKLISTREMOVE,156,223,101,15\r
+    COMBOBOX        IDC_DISKTEXT,3,205,293,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Insert floppy disk image",IDC_DISKLISTINSERT,41,223,101,15\r
+END\r
+\r
+IDD_PANEL DIALOGEX 0, 0, 420, 278\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+EXSTYLE WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT\r
+CAPTION "WinUAE Properties"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "",IDC_PANEL_FRAME,112,4,303,247,NOT WS_VISIBLE\r
+    CONTROL         "",IDC_PANELTREE,"SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_NOSCROLL | WS_BORDER | WS_HSCROLL | WS_TABSTOP,5,5,101,248,WS_EX_CLIENTEDGE\r
+    GROUPBOX        "",IDC_PANEL_FRAME_OUTER,110,2,307,251\r
+    PUSHBUTTON      "Reset",IDC_RESETAMIGA,6,259,47,14\r
+    PUSHBUTTON      "Quit",IDC_QUITEMU,57,259,47,14\r
+    DEFPUSHBUTTON   "OK",IDOK,260,259,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,313,259,50,14\r
+    PUSHBUTTON      "Help",IDHELP,366,259,50,14,WS_DISABLED\r
+    PUSHBUTTON      "Restart",IDC_RESTARTEMU,109,259,47,14,NOT WS_VISIBLE\r
+END\r
+\r
+IDD_PATHS DIALOGEX 0, 0, 300, 237\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    LTEXT           "System ROMs:",IDC_PATHS_ROML,14,9,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_ROM,14,22,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_ROMS,281,22,11,15\r
+    LTEXT           "Configuration files:",IDC_PATHS_CONFIGL,14,40,121,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_CONFIG,14,52,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_CONFIGS,281,52,11,15\r
+    LTEXT           "Screenshots:",IDC_PATHS_SCREENSHOTL,14,71,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_SCREENSHOT,14,83,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_SCREENSHOTS,281,83,11,15\r
+    LTEXT           "State files:",IDC_PATHS_STATEFILEL,14,102,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_SAVESTATE,14,114,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_SAVESTATES,281,114,11,15\r
+    LTEXT           "Videos:",IDC_PATHS_AVIOUTPUTL,14,132,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_AVIOUTPUT,14,144,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_AVIOUTPUTS,281,144,11,15\r
+    LTEXT           "Saveimages:",IDC_PATHS_SAVEIMAGEL,14,163,260,8,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PATHS_SAVEIMAGE,14,175,261,15,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_PATHS_SAVEIMAGES,281,175,11,15\r
+    PUSHBUTTON      "Reset to defaults",IDC_PATHS_DEFAULT,14,199,92,14\r
+    PUSHBUTTON      "Rescan ROMs",IDC_ROM_RESCAN,14,218,92,14\r
+    PUSHBUTTON      "Clear registry",IDC_RESETREGISTRY,112,218,77,14\r
+    COMBOBOX        IDC_PATHS_DEFAULTTYPE,112,199,163,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Clear disk history",IDC_RESETDISKHISTORY,198,218,77,14\r
+    CONTROL         "Cache Configuration files",IDC_PATHS_CONFIGCACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,40,117,10\r
+END\r
+\r
+IDD_QUICKSTART DIALOGEX 0, 0, 300, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    GROUPBOX        "Emulated Hardware",IDC_QUICKSTART_CONFIG,3,0,294,54\r
+    RTEXT           "Model:",IDC_STATIC,5,14,50,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_QUICKSTART_MODEL,59,12,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "Configuration:",IDC_STATIC,5,33,50,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_QUICKSTART_CONFIGURATION,59,31,233,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Compatibility vs Required CPU Power ",IDC_QUICKSTART_COMPA,3,56,294,33\r
+    RTEXT           "Best compatibility",IDC_STATIC,13,70,67,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_QUICKSTART_COMPATIBILITY,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,95,65,115,21\r
+    RTEXT           "Low compatibility",IDC_STATIC,215,70,63,10,SS_CENTERIMAGE\r
+    GROUPBOX        "Host Configuration",IDC_QUICKSTART_HOST,3,91,294,33\r
+    RTEXT           "Configuration:",IDC_STATIC,5,105,55,10,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_QUICKSTART_HOSTCONFIG,65,103,225,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    GROUPBOX        "Emulated Floppy Drives",IDC_QUICKSTART_DF,3,126,294,84\r
+    CONTROL         "Floppy drive DF0:",IDC_DF0QENABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,10,136,72,15\r
+    PUSHBUTTON      "Select disk image",IDC_DF0QQ,85,136,98,15\r
+    RTEXT           "Write-protected",IDC_STATIC,185,139,56,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF0WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,137,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT0Q,261,136,30,15\r
+    COMBOBOX        IDC_DF0TEXTQ,9,154,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Floppy drive DF1:",IDC_DF1QENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,172,71,15\r
+    PUSHBUTTON      "Select disk image",IDC_DF1QQ,85,172,98,15\r
+    RTEXT           "Write-protected",IDC_STATIC,185,175,55,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_DF1WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,246,173,10,15\r
+    PUSHBUTTON      "Eject",IDC_EJECT1Q,261,172,30,15\r
+    COMBOBOX        IDC_DF1TEXTQ,9,190,282,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Set configuration",IDC_QUICKSTART_SETCONFIG,9,219,72,15,NOT WS_VISIBLE\r
+    GROUPBOX        "Mode",IDC_STATIC,190,211,107,27,BS_LEFT\r
+    CONTROL         "Start in Quickstart mode",IDC_QUICKSTARTMODE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,197,222,94,10\r
+END\r
+\r
+IDD_FRONTEND DIALOGEX 0, 0, 420, 242\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "",IDC_FE_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,9,235,124\r
+    GROUPBOX        "",IDC_FE_INFO,249,140,160,95\r
+    GROUPBOX        "",IDC_FE_SCREENSHOT,249,7,160,128\r
+END\r
+\r
+IDD_PROGRESSBAR DIALOGEX 0, 0, 229, 58\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Processing..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    PUSHBUTTON      "Cancel",IDCANCEL,88,40,50,14\r
+    CONTROL         "",IDC_PROGRESSBAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,7,19,215,14\r
+    CTEXT           "x",IDC_PROGRESSBAR_TEXT,23,5,187,10,SS_CENTERIMAGE | WS_TABSTOP\r
+END\r
+\r
+IDD_STRINGBOX DIALOGEX 0, 0, 229, 58\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Enter text..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,48,39,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,151,39,50,14\r
+    EDITTEXT        IDC_STRINGBOXEDIT,7,17,214,14,ES_AUTOHSCROLL | ES_WANTRETURN\r
+END\r
+\r
+IDD_DEBUGGER DIALOGEX 0, 0, 454, 368\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_CONTROLPARENT\r
+CAPTION "WinUAE Debugger"\r
+FONT 8, "Courier New", 0, 0, 0x0\r
+BEGIN\r
+    EDITTEXT        IDC_DBG_OUTPUT1,1,255,370,86,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP\r
+    EDITTEXT        IDC_DBG_OUTPUT2,1,79,370,262,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP\r
+    LISTBOX         IDC_DBG_MEM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_DASM,1,92,370,249,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    EDITTEXT        IDC_DBG_MEMINPUT,1,79,36,12,ES_AUTOHSCROLL | ES_WANTRETURN\r
+    EDITTEXT        IDC_DBG_INPUT,1,342,354,12,ES_AUTOHSCROLL | ES_WANTRETURN\r
+    PUSHBUTTON      "?",IDC_DBG_HELP,356,342,15,12,NOT WS_TABSTOP\r
+    PUSHBUTTON      "Set to PC",IDC_DBG_MEMTOPC,38,79,45,12,NOT WS_TABSTOP\r
+    LISTBOX         IDC_DBG_DREG,1,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_AREG,54,1,52,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_AMEM,106,1,231,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_CCR,338,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_SP_VBR,338,44,115,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MMISC,396,1,57,42,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_PC,1,68,52,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_PREFETCH,54,68,283,10,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_FPREG,372,218,81,66,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_FPSR,372,285,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MISCCPU,372,320,81,34,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    CONTROL         "",IDC_DBG_STATUS,"msctls_statusbar32",0x103,0,355,453,12\r
+    LISTBOX         IDC_DBG_BRKPTS,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL\r
+    LISTBOX         IDC_DBG_MCUSTOM,372,79,81,138,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MISC,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL\r
+    LISTBOX         IDC_DBG_CUSTOM,1,79,370,262,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL\r
+    CONTROL         "Auto set",IDC_DBG_AUTOSET,"Button",BS_AUTOCHECKBOX,84,79,50,12\r
+    LISTBOX         IDC_DBG_DASM2,1,79,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+    LISTBOX         IDC_DBG_MEM2,1,167,370,87,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT\r
+END\r
+\r
+IDD_DBGMEMINPUT DIALOGEX 0, 0, 150, 58\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Enter address..."\r
+FONT 8, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,15,39,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,75,39,50,14\r
+    EDITTEXT        IDC_DBG_MEMINPUT2,20,12,100,14,ES_AUTOHSCROLL | ES_WANTRETURN\r
+    CTEXT           "Enter address",IDC_DBG_ADDRINPUTTXT,20,1,100,10,SS_CENTERIMAGE | WS_TABSTOP\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_APPICON             ICON                    "winuae.ico"\r
+IDI_FLOPPY              ICON                    "35floppy.ico"\r
+IDI_ABOUT               ICON                    "amigainfo.ico"\r
+IDI_HARDDISK            ICON                    "Drive.ico"\r
+IDI_CPU                 ICON                    "cpu.ico"\r
+IDI_PORTS               ICON                    "joystick.ico"\r
+IDI_INPUT               ICON                    "joystick.ico"\r
+IDI_MISC1               ICON                    "misc.ico"\r
+IDI_MISC2               ICON                    "misc.ico"\r
+IDI_MOVE_UP             ICON                    "move_up.ico"\r
+IDI_MOVE_DOWN           ICON                    "move_dow.ico"\r
+IDI_AVIOUTPUT           ICON                    "avioutput.ico"\r
+IDI_DISK                ICON                    "Drive.ico"\r
+IDI_CONFIGFILE          ICON                    "file.ico"\r
+IDI_FOLDER              ICON                    "folder.ico"\r
+IDI_SOUND               ICON                    "sound.ico"\r
+IDI_DISPLAY             ICON                    "screen.ico"\r
+IDI_ROOT                ICON                    "root.ico"\r
+IDI_MEMORY              ICON                    "chip.ico"\r
+IDI_QUICKSTART          ICON                    "quickstart.ico"\r
+IDI_PATHS               ICON                    "paths.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION 1,5,1,0\r
+ PRODUCTVERSION 1,5,1,0\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x40004L\r
+ FILETYPE 0x1L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "FileDescription", "WinUAE"\r
+            VALUE "FileVersion", "1.5.1"\r
+            VALUE "InternalName", "WinUAE"\r
+            VALUE "LegalCopyright", "© 1996-2008 under the GNU Public License (GPL)"\r
+            VALUE "OriginalFilename", "WinUAE.exe"\r
+            VALUE "ProductName", "WinUAE"\r
+            VALUE "ProductVersion", "1.5.1"\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Cursor\r
+//\r
+\r
+IDC_MYHAND              CURSOR                  "H_arrow.cur"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDM_SYSTRAY MENU \r
+BEGIN\r
+    POPUP "Menu"\r
+    BEGIN\r
+        MENUITEM "Configuration",               ID_ST_CONFIGURATION\r
+        POPUP "Floppy drives"\r
+        BEGIN\r
+            MENUITEM "Eject all drives",            ID_ST_EJECTALL\r
+            MENUITEM "DF0:",                        ID_ST_DF0\r
+            MENUITEM "DF1:",                        ID_ST_DF1\r
+            MENUITEM "DF2:",                        ID_ST_DF2\r
+            MENUITEM "DF3:",                        ID_ST_DF3\r
+        END\r
+        MENUITEM "Reset",                       ID_ST_RESET\r
+        MENUITEM "Help",                        ID_ST_HELP\r
+        MENUITEM "Quit WinUAE",                 ID_ST_QUIT\r
+    END\r
+END\r
+\r
+IDM_DBGCONTEXTMENU MENU \r
+BEGIN\r
+    POPUP "Inactive"\r
+    BEGIN\r
+        POPUP "Copy"\r
+        BEGIN\r
+            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE\r
+            MENUITEM "Copy all",                    ID_DBG_COPYLB\r
+        END\r
+    END\r
+    POPUP "Memory"\r
+    BEGIN\r
+        POPUP "Copy"\r
+        BEGIN\r
+            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE\r
+            MENUITEM "Copy all",                    ID_DBG_COPYLB\r
+        END\r
+        POPUP "Set top address"\r
+        BEGIN\r
+            MENUITEM "Set to A0",                   ID_DBG_SETTOA0\r
+            MENUITEM "Set to A1",                   ID_DBG_SETTOA1\r
+            MENUITEM "Set to A2",                   ID_DBG_SETTOA2\r
+            MENUITEM "Set to A3",                   ID_DBG_SETTOA3\r
+            MENUITEM "Set to A4",                   ID_DBG_SETTOA4\r
+            MENUITEM "Set to A5",                   ID_DBG_SETTOA5\r
+            MENUITEM "Set to A6",                   ID_DBG_SETTOA6\r
+            MENUITEM "Set to A7",                   ID_DBG_SETTOA7\r
+            MENUITEM "Enter address",               ID_DBG_ENTERADDR\r
+        END\r
+    END\r
+    POPUP "Disassembly"\r
+    BEGIN\r
+        POPUP "Copy"\r
+        BEGIN\r
+            MENUITEM "Copy line",                   ID_DBG_COPYLBLINE\r
+            MENUITEM "Copy all",                    ID_DBG_COPYLB\r
+        END\r
+        POPUP "Breakpoints"\r
+        BEGIN\r
+            MENUITEM "Toggle breakpoint",           ID_DBG_TOGGLEBP\r
+            MENUITEM "Clear all breakpoints",       ID_DBG_DELETEBPS\r
+        END\r
+        POPUP "Set top address"\r
+        BEGIN\r
+            MENUITEM "Set to PC",                   ID_DBG_SETTOPC\r
+            MENUITEM "Enter address",               ID_DBG_ENTERADDR\r
+        END\r
+    END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// WAVE\r
+//\r
+\r
+IDR_DRIVE_STARTUP_A500_1 WAVE                    "drive_startup.wav"\r
+IDR_DRIVE_CLICK_A500_1  WAVE                    "drive_click.wav"\r
+IDR_DRIVE_SPIN_A500_1   WAVE                    "drive_spin.wav"\r
+IDR_DRIVE_SNATCH_A500_1 WAVE                    "drive_snatch.wav"\r
+IDR_DRIVE_SPINND_A500_1 WAVE                    "drive_spinnd.wav"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Bitmap\r
+//\r
+\r
+IDB_XARCADE             BITMAP                  "xarcade-winuae.bmp"\r
+IDB_LCD160X43           BITMAP                  "lcd.bmp"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_KICKSTART           "ROM"\r
+    IDS_DISK                "Disk swapper"\r
+    IDS_DISPLAY             "Display"\r
+    IDS_HARDDISK            "Hard drives"\r
+    IDS_FLOPPY              "Floppy drives"\r
+    IDS_ABOUT               "About"\r
+    IDS_LOADSAVE            "Configurations"\r
+    IDS_AVIOUTPUT           "Output"\r
+    IDS_PORTS               "Game & I/O ports"\r
+    IDS_MISC1               "Misc"\r
+    IDS_MEMORY              "RAM"\r
+    IDS_CPU                 "CPU and FPU"\r
+    IDS_CHIPSET             "Chipset"\r
+    IDS_INPUT               "Input"\r
+    IDS_FILTER              "Filter"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_MISC2               "Priority"\r
+    IDS_PATHS               "Paths"\r
+    IDS_QUICKSTART          "Quickstart"\r
+    IDS_FRONTEND            "Frontend"\r
+    IDS_CHIPSET2            "Adv. Chipset"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_EXTTEXT             "Floppy disk image files"\r
+    IDS_EXTACTUAL           "ADF"\r
+    IDS_SOUND               "Sound"\r
+    IDS_CDROM               "CD-ROM"\r
+    IDS_FRAMERATE           "Every %1Frame"\r
+    IDS_SECOND              "second "\r
+    IDS_THIRD               "third "\r
+    IDS_FOURTH              "fourth "\r
+    IDS_FIFTH               "fifth "\r
+    IDS_SIXTH               "sixth "\r
+    IDS_SEVENTH             "seventh "\r
+    IDS_EIGHTH              "eighth "\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NINTH               "ninth "\r
+    IDS_TENTH               "tenth "\r
+    IDS_SELECTADF           "Select a floppy disk image file..."\r
+    IDS_ADF                 "Floppy disk image files"\r
+    IDS_CHOOSEBLANK         "Choose a blank floppy disk image file..."\r
+    IDS_SELECTHDF           "Select a hard disk image file..."\r
+    IDS_HDF                 "Hard disk image files"\r
+    IDS_SELECTUAE           "Select a WinUAE configuration file..."\r
+    IDS_UAE                 "WinUAE configuration files"\r
+    IDS_SELECTROM           "Select a system ROM file..."\r
+    IDS_ROM                 "System ROM files"\r
+    IDS_SELECTKEY           "Select a system ROM key file..."\r
+    IDS_KEY                 "System ROM key files"\r
+    IDS_SELECTINFO          "Select information for your configuration..."\r
+    IDS_NONE                "none"\r
+    IDS_VOLUME              "Volume"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_SELECTFILESYSROOT   "Please select the root directory of the file system..."\r
+    IDS_DEFAULTMIDIOUT      "Default MIDI-Out Device"\r
+    IDS_CONTRIBUTORS1       "Bernd Schmidt - The Grand-Master\nSam Jordan - Custom-chip, floppy-DMA, etc.\nMathias Ortmann - Original WinUAE Main Guy, BSD Socket support\nBrian King - Picasso96 Support, Integrated GUI for WinUAE, previous WinUAE Main Guy\nToni Wilen - Core updates, WinUAE Main Guy\nGustavo Goedert/Peter Remmers/Michael Sontheimer/Tomi Hakala/Tim Gunn/Nemo Pohle - DOS Port Stuff\nSamuel Devulder/Olaf Barthel/Sam Jordan - Amiga Ports\nKrister Bergman - XFree86 and OS/2 Port\nA. Blanchard/Ernesto Corvi - MacOS Port\nChristian Bauer - BeOS Port\nIan Stephenson - NextStep Port\nPeter Teichmann - Acorn/RiscOS Port\nStefan Reinauer - ZorroII/III AutoConfig, Serial Support\nChristian Schmitt/Chris Hames - Serial Support\nHerman ten Brugge - 68020/68881 Emulation Code\nTauno Taipaleenmaki - Various UAE-Control/UAE-Library Support\nBrett Eden/Tim Gunn/Paolo Besser/Nemo Pohle - Various Docs and Web-Sites\nGeorg Veichtlbauer - Help File coordinator, German GUI\nFulvio Leonardi - Italian translator for WinUAE\n"\r
+    IDS_CONTRIBUTORS2       "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nPéter Tóth /Balázs Rátkai/Iván Herczeg/András Arató - Hungarian translation.\nKarsten Bock, Gavin Fance, Dirk Trowe, Christoph Meier and Christian Schindler - Freezer cartridge hardware support."\r
+    IDS_INVALIDPRTPORT      "The printer you have in this configuration is not valid on this machine.\n"\r
+    IDS_RESTOREUSS          "Restore a WinUAE snapshot file"\r
+    IDS_USS                 "WinUAE snapshot files"\r
+    IDS_WRONGOSVERSION      "WinUAE is no longer supported on Windows NT.  Please upgrade to either Windows 2000 or Windows XP or a later version."\r
+    IDS_SELECTFLASH         "Select a flash or battery-backed RAM file..."\r
+    IDS_FLASH               "WinUAE flash or battery-backed RAM file"\r
+    IDS_INPUTHOSTWIDGET     "Input source"\r
+    IDS_INPUTAMIGAEVENT     "Input target"\r
+    IDS_INPUTAUTOFIRE       "Autofire"\r
+    IDS_SAVEUSS             "Save a WinUAE snapshot file"\r
+    IDS_MIDIOVERFLOW        "Sysexbuffer overflow. Should not happen. Please report this to\nberndroesch1@compuserve.de"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_PATH                "Path"\r
+    IDS_RW                  "R/W"\r
+    IDS_SECTORS             "Sectors"\r
+    IDS_SURFACES            "Bill Panagouleas - Hardware support\nSpecial thanks to Alexander Kneer and Tobias Abt (The Picasso96 Team)\nSteven Weiser  - Postscript printing emulation idea and testing.\nHungarian translation - Péter Tóth , Balázs Rátkai , Iván Herczeg , András Arató"\r
+    IDS_RESERVED            "Reserved"\r
+    IDS_BLOCKSIZE           "Block size"\r
+    IDS_NAME                "Name"\r
+    IDS_DESCRIPTION         "Description"\r
+    IDS_COULDNOTLOADCONFIG  "Could not load the selected configuration!\n"\r
+    IDS_NOHELP              "Online help is disabled because the HTML Help functionality is not installed on this system. HTML Help is available from http://www.microsoft.com/downloads/.\n"\r
+    IDS_MUSTSELECTCONFIG    "You must select a configuration or enter a name before selecting Load...\n"\r
+    IDS_INVALIDCOMPORT      "The serial port you have in this configuration is not valid on this machine.\n"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_HFDSIZE             "Size"\r
+    IDS_DEVICE              "Device"\r
+    IDS_BOOTPRI             "BootPri"\r
+    IDS_FLOPPY_COMPATIBLE   " (compatible)"\r
+    IDS_FLOPPY_TURBO        "Turbo"\r
+    IDS_YES                 "yes"\r
+    IDS_NO                  "no"\r
+    IDS_PRI_ABOVENORMAL     "Above Normal"\r
+    IDS_PRI_NORMAL          "Normal"\r
+    IDS_PRI_BELOWNORMAL     "Below Normal"\r
+    IDS_PRI_LOW             "Low"\r
+    IDS_OLDRTGLIBRARY       "The installed LIBS:Picasso96/rtg.library (%d.%d) should be updated.\nA newer version is included in the ""Amiga Programs"" directory\n of the WinUAE distribution archive.\n\nNewer library version fixes graphics problems and increases performance."\r
+    IDS_DEFAULT_AF2005      "Amiga Forever 2005+"\r
+    IDS_DEFAULT_AF          "Amiga Forever"\r
+    IDS_DEFAULT_WINUAE      "WinUAE default (old)"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_SOUND_STEREO2       "Cloned Stereo (4 Channels)"\r
+    IDS_INPUT_CUSTOMEVENT   "<Custom event>"\r
+    IDS_DEFAULT_NEWWINUAE   "WinUAE default (new)"\r
+    IDS_SOUND_CLONED51      "Cloned Stereo (5.1)"\r
+    IDS_SOUND_51            "5.1 Channels"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_UNSUPPORTEDPIXELFORMAT \r
+                            "Error: unsupported pixel format. Please use a different screen mode.\n"\r
+    IDS_MUSTENTERNAME       "You must select a configuration or enter a name before selecting Save...\n"\r
+    IDS_MUSTSELECTCONFIGFORDELETE \r
+                            "You must select a configuration or enter a name before selecting Delete...\n"\r
+    IDS_DELETECONFIGCONFIRMATION \r
+                            "Are you sure you want to Delete this configuration?\n"\r
+    IDS_DELETECONFIGTITLE   "Confirm Delete"\r
+    IDS_MUSTSELECTPATH      "You must select a path!"\r
+    IDS_SETTINGSERROR       "Settings error"\r
+    IDS_MUSTSELECTNAME      "You must select a name for the volume!"\r
+    IDS_MUSTSELECTFILE      "You must select a file!"\r
+    IDS_FAILEDHARDFILECREATION "Failed to create hard disk image file..."\r
+    IDS_CREATIONERROR       "Creation error"\r
+    IDS_ERRORTITLE          "WinUAE message"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_INP                 "WinUAE Input Recording"\r
+    IDS_RESTOREINP          "Playback a WinUAE input recording"\r
+    IDS_SAVEINP             "Record a WinUAE input recording"\r
+    IDS_SCREEN_WINDOWED     "Windowed"\r
+    IDS_SCREEN_FULLSCREEN   "Fullscreen"\r
+    IDS_SCREEN_FULLWINDOW   "Full-window"\r
+    IDS_SCREEN_VSYNC        "VSync"\r
+    IDS_SOUND_MONO          "Mono"\r
+    IDS_SOUND_MIXED         "Mixed"\r
+    IDS_SOUND_STEREO        "Stereo"\r
+    IDS_SOUND_INTERPOL_DISABLED "Disabled"\r
+    IDS_SOUND_FILTER_OFF    "Always off"\r
+    IDS_SOUND_FILTER_EMULATED "Emulated (A500)"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_SOUND_FILTER_EMULATED_E "Emulated (A1200)"\r
+    IDS_INPUT_COMPATIBILITY "Compatibility mode"\r
+    IDS_INPUT_CUSTOM        "Configuration #%d"\r
+    IDS_INPUT_COPY_DEFAULT  "Default"\r
+    IDS_INPUT_COPY_CUSTOM   "Config #%d"\r
+    IDS_3D_NO_FILTER        "Point (%d-bit)"\r
+    IDS_3D_BILINEAR         "Bilinear (%d-bit)"\r
+    IDS_VSYNC_DEFAULT       "Default"\r
+    IDS_DRIVESOUND_NONE     "No sound"\r
+    IDS_DRIVESOUND_DEFAULT_A500 "A500 (WinUAE built-in)"\r
+    IDS_AVIOUTPUT_NOCODEC   "no codec selected"\r
+    IDS_DISK_IMAGENAME      "Disk image"\r
+    IDS_DISK_DRIVENAME      "Drive"\r
+    IDS_AGA8BIT             "AGA emulation requires a 16-bit or higher display depth.\nSwitching from 8-bit to 16-bit."\r
+    IDS_UNSUPPORTEDSCREENMODE \r
+                            "The selected screen mode can't be displayed in a window, because %s\nSwitching to full-screen display."\r
+    IDS_UNSUPPORTEDSCREENMODE_1 \r
+                            "the desktop is running in an unknown color mode."\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_UNSUPPORTEDSCREENMODE_2 \r
+                            "the desktop is running in 8-bit color depth, which WinUAE can't use in windowed mode."\r
+    IDS_UNSUPPORTEDSCREENMODE_3 \r
+                            "the desktop is too small for the specified window size."\r
+    IDS_UNSUPPORTEDSCREENMODE_4 \r
+                            "you selected an RTG (Picasso96) display with unsupported color depth."\r
+    IDS_FLOPPYTYPE35DD      "3.5"" DD"\r
+    IDS_FLOPPYTYPE35HD      "3.5"" HD"\r
+    IDS_FLOPPYTYPE525SD     "5.25"" SD"\r
+    IDS_FLOPPYTYPEDISABLED  "Disabled"\r
+    IDS_STMENUNOFLOPPY      "No floppy disk inserted"\r
+    IDS_TREEVIEW_HARDWARE   "Hardware"\r
+    IDS_TREEVIEW_HOST       "Host"\r
+    IDS_TREEVIEW_MISC       "Miscellaneous"\r
+    IDS_TREEVIEW_SETTINGS   "Settings"\r
+    IDS_WINUAETITLE_MMB     "[Mouse active - press ALT+TAB or middle mouse button to cancel]"\r
+    IDS_WINUAETITLE_NORMAL  "[Mouse active - press ALT+TAB to cancel]"\r
+    IDS_STARTEMULATION      "Start"\r
+    IDS_TREEVIEW_ABOUT      "About"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NOHARDDRIVES        "No hard disks detected that were either empty or RDB-partitioned."\r
+    IDS_DEFAULT_HOST        "Default Configuration"\r
+    IDS_SOUND_4CHANNEL      "4 Channels"\r
+    IDS_HF_FS_CUSTOM        "Custom"\r
+    IDS_SELECTFS            "Select file system handler (FastFileSystem, SmartFilesystem, etc.)"\r
+    IDS_KEYJOY              "Keyboard Layout A (Numeric keypad, 0 and 5 = Fire)\nKeyboard Layout B (Cursor keys, Right CTRL and ALT = Fire)\nKeyboard Layout C (W=Up S=Down A=Left D=Right, Left ALT = Fire)\nX-Arcade (Left)\nX-Arcade (Right)"\r
+    IDS_STATEFILE_UNCOMPRESSED "Uncompressed"\r
+    IDS_STATEFILE_RAMDUMP   "RAM dump"\r
+    IDS_STATEFILE_WAVE      "Wave audio dump"\r
+    IDS_SOUND_SWAP_PAULA    "Paula only"\r
+    IDS_SOUND_SWAP_AHI      "AHI only"\r
+    IDS_SOUND_SWAP_BOTH     "Both"\r
+    IDS_SOUND_FILTER_ON_AGA "Always on (A500)"\r
+    IDS_SOUND_FILTER_ON_A500 "Always on (A1200)"\r
+    IDS_DRIVESOUND_PC_FLOPPY "PC floppy drive %c"\r
+    IDS_FLOPPYTYPE35DDESCOM "3.5"" ESCOM"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NUMSG_NEEDEXT2      "The software uses a non-standard floppy disk format. You may need to use a custom floppy disk image file instead of a standard one. This message will not appear again."\r
+    IDS_NUMSG_NOROMKEY      "Could not find system ROM key file."\r
+    IDS_NUMSG_KSROMCRCERROR "System ROM checksum incorrect. The system ROM image file may be corrupt."\r
+    IDS_NUMSG_KSROMREADERROR "Error while reading system ROM."\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_NUMSG_NOEXTROM      "No extended ROM found."\r
+    IDS_NUMSG_MODRIP_NOTFOUND "No music modules or packed data found."\r
+    IDS_NUMSG_MODRIP_FINISHED "Scan finished."\r
+    IDS_NUMSG_MODRIP_SAVE   "Module/packed data found\n%s\nStart address %08.8X, Size %d bytes\nWould you like to save it?"\r
+    IDS_NUMSG_KS68020       "The selected system ROM requires a 68020 with 32-bit addressing or 68030 or higher CPU."\r
+    IDS_NUMSG_ROMNEED       "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."\r
+    IDS_NUMSG_STATEHD       "WARNING: Current configuration is not fully compatible with state saves.\nThis message will not appear again."\r
+    IDS_NUMSG_NOCAPS        "Selected disk image needs the SPS plugin\nwhich is available from\nhttp//www.softpres.org/"\r
+    IDS_NUMSG_OLDCAPS       "You need an updated SPS plugin\nwhich is available from\nhttp//www.softpres.org/"\r
+    IDS_IMGCHK_BOOTBLOCKCRCERROR \r
+                            "The selected floppy disk image is not bootable (boot block checksum error)"\r
+    IDS_IMGCHK_BOOTBLOCKNO  "The selected floppy disk image is not bootable (no boot block)"\r
+    IDS_IMGCHK_DAMAGED      "The selected floppy disk image is damaged or unformatted"\r
+    IDS_IMGCHK_KS2          "The selected floppy disk image requires a 2.04 or later system ROM.\nThe configuration has been updated."\r
+    IDS_IMGCHK_KS3          "The selected floppy disk image requires a 3.0 or later system ROM.\nThe configuration has been updated."\r
+    IDS_ROMSCANEND          "Scan of ROMs finished"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_ROM_AVAILABLE       "available"\r
+    IDS_ROM_UNAVAILABLE     "unavailable"\r
+    IDS_HARDDRIVESAFETYWARNING1 \r
+                            "Warning: The drive safety check is active. Selected drive is not empty and non-RDB partitioned."\r
+    IDS_NUMSG_KS68EC020     "The selected system ROM requires a 68020 with 24-bit addressing or higher CPU."\r
+    IDS_ROMSCANNOROMS       "No supported system ROMs detected."\r
+    IDS_NUMSG_KICKREP       "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement."\r
+    IDS_NUMSG_KICKREPNO     "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality."\r
+    IDS_NUMSG_NOROM         "Could not load system ROM, trying system ROM replacement."\r
+    IDS_HDCLONE_OK          "Hard drive image file created succesfully."\r
+    IDS_HDCLONE_FAIL        "Hard drive image file creation failed.\nError code %d:%d."\r
+    IDS_NUMSG_KS68030       "The selected system ROM requires a 68030 CPU."\r
+    IDS_NUMSG_EXPROMNEED    "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs."\r
+    IDS_HARDDRIVESAFETYWARNING2 \r
+                            "Warning: The drive safety check has been disabled, and non-empty and non-RDB partitioned hard disk(s) were detected."\r
+    IDS_SB_FAVORITENAME     "Enter name..."\r
+    IDS_SB_CUSTOMEVENT      "Enter custom event string.."\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_QS_MODELS           "A500\nA500+\nA600\nA1000\nA1200\nA3000\nA4000\nCD32\nCDTV\nArcadia Multi Select system\nExpanded WinUAE example configuration"\r
+    IDS_QS_MODEL_A500       "1.3 ROM, OCS, 512 KB Chip + 512 KB Slow RAM (most common)\nThis configuration is capable of running most games and demos produced for first-generation hardware. Only few exceptions need a different configuration (e.g. the oldest games tend to be incompatible with this configuration).\n1.3 ROM, ECS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nLater hardware revision of the A500. Nearly 100% compatible with the previous configuration.\n1.3 ROM, ECS Agnus, 1 MB Chip RAM\nFew newer games and demos require this configuration.\n1.3 ROM, OCS Agnus, 512 KB Chip RAM\nVery old (e.g. pre-1988) games and demos may require this configuration.\n1.2 ROM, OCS Agnus, 512 KB Chip RAM\nAs available for the A1000, and installed on the first A500 and A2000 series. Some very old programs only work correctly with this configuration. Note: This system ROM version can only boot from floppy disk (no hard disk boot support).\n1.2 ROM, OCS Agnus, 512 KB Chip RAM + 512 KB Slow RAM\nThis configuration adds expansion memory to the first A500 produced. Try this if your game does not work with newer configurations, but works with the previous one. It could add some features to the game, including faster loading times. Note: This system ROM version can only boot from floppy disk (no hard disk boot support)."\r
+    IDS_QS_MODEL_A500P      "Basic non-expanded configuration\nThe A500+ adds an ECS Agnus chip, 1 MB of Chip RAM and a 2.0 ROM to the A500. Many A500 games and demos don't work properly on an A500+.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"\r
+    IDS_QS_MODEL_A600       "Basic non-expanded configuration\nThe A600 is smaller than the A500+ and has an updated 2.0 ROM.\n2 MB Chip RAM expanded configuration\n\n4 MB Fast RAM expanded configuration\n"\r
+    IDS_QS_MODEL_A1000      "512 KB Chip RAM\nThe A1000 was the first model produced, with a configuration equivalent to that of an A500 with OCS chipset. You normally don't need to use this configuration, unless you are nostalgic and would like to hear the short A1000 boot tune\n""ICS"" Denise without EHB support\nVery first A1000 models had Denise without EHB capability.\n256 KB Chip RAM\n Unexpanded A1000. All later A1000 models were sold with a 256 KB RAM expansion built-in."\r
+    IDS_QS_MODEL_A1200      "Basic non-expanded configuration\nUse this configuration to run most AGA demos and games\n4 MB Fast RAM expanded configuration\nSome newer AGA games and demos need an expanded A1200 to run."\r
+    IDS_QS_MODEL_CD32       "CD32\nThe CD32 was one the first 32-bit consoles on the market. It is basically an A1200 with a built-in CD-ROM drive. Insert your CD32 or CDTV CD-ROM into a free CD-ROM drive before starting the emulation.\nCD32 + MPEG Full Motion Video Cartridge (not emulated yet)\n"\r
+    IDS_QS_MODEL_CDTV       "CDTV\nThe CDTV was the first model with a built-in CD-ROM drive. Looking like a black CD player, it featured a configuration equivalent to that of an A500 with 1 MB RAM and an ECS chipset.\nFloppy drive and 64KB SRAM card expanded CDTV\n"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDS_QS_MODEL_UAE        "High-end expanded configuration"\r
+    IDS_QS_MODEL_ARCADIA    "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and  Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel."\r
+    IDS_QS_MODEL_A3000      "1.4 ROM, 2MB Chip + 8MB Fast\n\n2.04 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n"\r
+    IDS_QS_MODEL_A4000      "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n"\r
+    IDS_QS_MODEL_A4000T     "A4000T (test)\nA4000T"\r
+END\r
+\r
+#endif    // English (U.S.) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Finnish resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE \r
+BEGIN\r
+    "resource.\0"\r
+END\r
+\r
+3 TEXTINCLUDE \r
+BEGIN\r
+    "\r\0"\r
+END\r
+\r
+2 TEXTINCLUDE \r
+BEGIN\r
+    "#include ""afxres.h""\r\0"\r
+END\r
+\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+#endif    // Finnish resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif    // not APSTUDIO_INVOKED\r
+\r
index 0fd9889237ab6ae099da8efe61694cc85be112ac..b4a0fa1b06cff9212ba6c3e46566b0c50e5b3b34 100755 (executable)
@@ -953,7 +953,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
 
                            drive = 'A' + i;
                            sprintf (drvname, "%c:\\", drive);
-                           type = GetDriveType(drvname);
+                           type = GetDriveType (drvname);
                            if (wParam == DBT_DEVICEARRIVAL)
                                inserted = 1;
                            else
@@ -1133,7 +1133,7 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam,
        return AmigaWindowProc (hWnd, message, wParam, lParam);
 
     case WM_DISPLAYCHANGE:
-       if (isfullscreen() <= 0 && !currprefs.gfx_filter && (wParam + 7) / 8 != DirectDraw_GetBytesPerPixel())
+       if (isfullscreen() <= 0 && !currprefs.gfx_filter && (wParam + 7) / 8 != DirectDraw_GetBytesPerPixel ())
            WIN32GFX_DisplayChangeRequested();
        break;
 
@@ -1437,7 +1437,7 @@ int WIN32_CleanupLibraries (void)
 
     if (hUIDLL)
        FreeLibrary (hUIDLL);
-
+    CoUninitialize ();
     return 1;
 }
 
@@ -1649,6 +1649,7 @@ static int WIN32_InitLibraries( void )
 {
     LARGE_INTEGER freq;
 
+    CoInitialize (0);
     /* Determine our processor speed and capabilities */
     if (!init_mmtimer ()) {
        pre_gui_message ("MMTimer initialization failed, exiting..");
@@ -2036,17 +2037,17 @@ int target_parse_option (struct uae_prefs *p, char *option, char *value)
        int v1, v2;
        char *s;
        
-       p->win32_rtgscaleaspectratio = -1;
+       p->gfx_filter_aspect = -1;
        v1 = atol (tmpbuf);
        s = strchr (tmpbuf, ':');
        if (s) {
            v2 = atol (s + 1);
            if (v1 < 0 || v2 < 0)
-               p->win32_rtgscaleaspectratio = -1;
+               p->gfx_filter_aspect = -1;
            else if (v1 == 0 || v2 == 0)
-               p->win32_rtgscaleaspectratio = 0;
+               p->gfx_filter_aspect = 0;
            else
-               p->win32_rtgscaleaspectratio = (v1 << 8) | v2;
+               p->gfx_filter_aspect = (v1 << 8) | v2;
        }
        return 1;
     }
@@ -3207,7 +3208,7 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
        devmode.dmSize = sizeof (DEVMODE);
        if (EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &devmode)) {
            default_freq = devmode.dmDisplayFrequency;
-           if(default_freq >= 70)
+           if (default_freq >= 70)
                default_freq = 70;
            else
                default_freq = 60;
@@ -3230,7 +3231,7 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
        }
     }
 
-    closeIPC();
+    closeIPC ();
     write_disk_history ();
     timeend ();
 #ifdef AVIOUTPUT
index 930476988db1d9b8b82339e559b6e9fd41c8ada7..d9cb29d70d0938c898da925ba1c91fc2a8499d26 100755 (executable)
@@ -15,9 +15,9 @@
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEBETA 5
+#define WINUAEBETA 6
 #define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2008, 7, 13)
+#define WINUAEDATE MAKEBD(2008, 7, 17)
 #define WINUAEEXTRA ""
 #define WINUAEREV ""
 
index 867b2c6e5df3a5a720ab915dd492738ecc1d49a0..f8383106d6376fdb99ddb9225bcc0fd6cf7a3afc 100755 (executable)
@@ -84,10 +84,14 @@ void getfilterrect2 (RECT *sr, RECT *dr, int dst_width, int dst_height, int aw,
     else
         ymult = ymult + ymult * currprefs.gfx_filter_vert_zoom / 2000;
 
-    if (currprefs.gfx_filter_horiz_zoom_mult <= 0 && currprefs.gfx_filter_vert_zoom_mult <= 0 && currprefs.gfx_filter_aspect) {
-       int mult = xmult > ymult ? xmult : ymult;
-       xmult = mult;
-       ymult = mult;
+    if (currprefs.gfx_filter_aspect > 0) {
+       int srcratio, dstratio;
+       dstratio = (currprefs.gfx_filter_aspect >> 8) * 256 / (currprefs.gfx_filter_aspect & 0xff);
+       srcratio = dst_width * 256 / dst_height;
+       if (srcratio > dstratio)
+           xmult = xmult * srcratio / dstratio;
+       else
+           ymult = ymult * dstratio / srcratio;
     }
 
     xs = dst_width - dst_width * xmult / 1000;
index 585ab75cd363dd8bcb7f4d2e4a212fe9b15ce8fb..9d6480a7a14ba436b5f5681c6cc482d85e4e3bf1 100755 (executable)
@@ -259,7 +259,6 @@ static int set_ddraw_2 (void)
        goto oops;
 
     if (dxfullscreen)  {
-       int rounds = 3;
        for (;;) {
            HRESULT olderr;
            write_log ("set_ddraw: trying %dx%d, bits=%d, refreshrate=%d\n", width, height, bits, freq);
@@ -268,6 +267,7 @@ static int set_ddraw_2 (void)
                break;
            olderr = ddrval;
            write_log ("set_ddraw: failed, trying without forced refresh rate\n");
+           DirectDraw_SetCooperativeLevel (hAmigaWnd, dxfullscreen, TRUE);
            ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0);
            if (SUCCEEDED (ddrval))
                break;
index 22144c3e2cc07440061bb68002abb6ca562b2115..79918e5a9c65cf791ab011125f5cce8c16e44733 100755 (executable)
@@ -234,6 +234,52 @@ void exit_gui (int ok)
     SendMessage (guiDlg, WM_COMMAND, ok ? IDOK : IDCANCEL, 0);
 }
 
+static int CALLBACK BrowseForFolderCallback (HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData)
+{
+    char szPath[MAX_PATH];
+    switch(uMsg)
+    {
+       case BFFM_INITIALIZED:
+       SendMessage (hwnd, BFFM_SETSELECTION, TRUE, pData);
+       break;
+       case BFFM_SELCHANGED: 
+       if (SHGetPathFromIDList ((LPITEMIDLIST)lp ,szPath))
+           SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szPath);   
+       break;
+    }
+    return 0;
+}
+
+int DirectorySelection (HWND hDlg, int flag, char *path)
+{
+    BROWSEINFO bi;
+    LPITEMIDLIST pidlBrowse;
+    char buf[MAX_DPATH], fullpath[MAX_DPATH];
+    int ret = 0;
+
+    buf[0] = 0;
+    memset (&bi, 0, sizeof bi);
+    bi.hwndOwner = hDlg;
+    bi.pidlRoot = NULL;
+    bi.pszDisplayName = buf;
+    bi.lpszTitle = NULL;
+    bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
+    if (path[0] && GetFullPathName (path, sizeof fullpath, fullpath, NULL)) {
+       bi.lpfn = BrowseForFolderCallback;
+       bi.lParam = (LPARAM)fullpath;
+    }
+    // Browse for a folder and return its PIDL.
+    pidlBrowse = SHBrowseForFolder (&bi);
+    if (pidlBrowse != NULL) {
+       if (SHGetPathFromIDList (pidlBrowse, buf)) {
+           strcpy (path, buf);
+           ret = 1;
+       }
+       CoTaskMemFree (pidlBrowse);
+    }
+    return ret;
+}
+
 static int getcbn (HWND hDlg, int v, char *out, int len)
 {
     LRESULT val = SendDlgItemMessage (hDlg, v, CB_GETCURSEL, 0, 0L);
@@ -288,12 +334,13 @@ static void writefavoritepaths (int num, char **values, char **paths)
 }
 
 
-static int askinputcustom (HWND hDlg, char *custom, int maxlen);
-static void addfavoritepath (HWND hDlg, int num, char **values, char **paths)
+static int askinputcustom (HWND hDlg, char *custom, int maxlen, DWORD titleid);
+static int addfavoritepath (HWND hDlg, int num, char **values, char **paths)
 {
     char name[MAX_DPATH];
+
     if (num >= MAXFAVORITES)
-       return;
+       return 0;
     if (!stored_path[0])
         GetModuleFileName (NULL, stored_path, MAX_DPATH);
     while (stored_path[0]) {
@@ -312,15 +359,16 @@ static void addfavoritepath (HWND hDlg, int num, char **values, char **paths)
        }
        s[0] = 0;
     }
-    if (!askinputcustom (hDlg, stored_path, sizeof stored_path))
-       return;
+    if (!DirectorySelection (hDlg, 0, stored_path))
+       return 0;
     strcpy (name, stored_path);
-    if (askinputcustom (hDlg, name, sizeof name)) {
+    if (askinputcustom (hDlg, name, sizeof name, IDS_SB_FAVORITENAME)) {
        values[num] = my_strdup (name);
        paths[num] = my_strdup (stored_path);
        num++;
        writefavoritepaths (num, values, paths);
     }
+    return 1;
 }
 static void removefavoritepath (int idx, int num, char **values, char **paths)
 {
@@ -340,7 +388,7 @@ static void removefavoritepath (int idx, int num, char **values, char **paths)
 static void addeditmenu (HMENU menu, char **items)
 {
     int i;
-    HMENU emenu = CreatePopupMenu();
+    HMENU emenu = CreatePopupMenu ();
     char newpath[MAX_DPATH];
 
     MENUITEMINFO mii = { 0 };
@@ -474,7 +522,10 @@ static char *favoritepopup (HWND hwnd)
        if (ret <= idx)
            break;
        if (ret == 1000) {
-           addfavoritepath (hwnd, idx, values, paths);
+           if (!addfavoritepath (hwnd, idx, values, paths)) {
+               ret = 0;
+               break;
+           }
        } else if (ret > 1000) {
            removefavoritepath (ret - 1001, idx, values, paths);
        }
@@ -1228,32 +1279,6 @@ static void gui_to_prefs (void)
     updatewinfsmode (&changed_prefs);
 }
 
-int DirectorySelection(HWND hDlg, int flag, char *path)
-{
-    BROWSEINFO bi;
-    LPITEMIDLIST pidlBrowse;
-    char buf[MAX_DPATH];
-
-    buf[0] = 0;
-    bi.hwndOwner = hDlg;
-    bi.pidlRoot = NULL;
-    bi.pszDisplayName = buf;
-    bi.lpszTitle = "Select folder";
-    bi.ulFlags = 0;
-    bi.lpfn = NULL;
-    bi.lParam = 0;
-
-    // Browse for a folder and return its PIDL.
-    pidlBrowse = SHBrowseForFolder(&bi);
-    if (pidlBrowse != NULL) {
-       if (SHGetPathFromIDList(pidlBrowse, buf)) {
-           strcpy (path, buf);
-           return 1;
-       }
-    }
-    return 0;
-}
-
 // Common routine for popping up a file-requester
 // flag - 0 for floppy loading, 1 for floppy creation, 2 for loading hdf, 3 for saving hdf
 // flag - 4 for loading .uae config-files, 5 for saving .uae config-files
@@ -6957,25 +6982,14 @@ static void volumeselectfile (HWND hDlg)
 }
 static void volumeselectdir (HWND hDlg, int newdir)
 {
-    BROWSEINFO browse_info;
-    LPITEMIDLIST browse;
     char szTitle[MAX_DPATH];
     char directory_path[MAX_DPATH];
 
     strcpy (directory_path, current_fsvdlg.rootdir);
     if (!newdir) {
        WIN32GUI_LoadUIString(IDS_SELECTFILESYSROOT, szTitle, MAX_DPATH);
-       browse_info.hwndOwner = hDlg;
-       browse_info.pidlRoot = NULL;
-       browse_info.pszDisplayName = directory_path;
-       browse_info.lpszTitle = "";
-       browse_info.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;
-       browse_info.lpfn = NULL;
-       browse_info.iImage = 0;
-       if ((browse = SHBrowseForFolder (&browse_info)) != NULL) {
-           SHGetPathFromIDList (browse, directory_path);
+       if (DirectorySelection (hDlg, 0, directory_path))
            newdir = 1;
-       }
     }
     if (newdir) {
         SetDlgItemText (hDlg, IDC_PATH_NAME, directory_path);
@@ -7254,7 +7268,7 @@ static INT_PTR CALLBACK HardfileSettingsProc (HWND hDlg, UINT msg, WPARAM wParam
        return TRUE;
 
     case WM_CONTEXTMENU:
-        if (GetDlgCtrlID((HWND)wParam) == IDC_SELECTOR) {
+        if (GetDlgCtrlID ((HWND)wParam) == IDC_SELECTOR) {
            char *s = favoritepopup (hDlg);
            if (s) {
                char path[MAX_DPATH];
@@ -7262,7 +7276,7 @@ static INT_PTR CALLBACK HardfileSettingsProc (HWND hDlg, UINT msg, WPARAM wParam
                xfree (s);
                hardfileselecthdf (hDlg, path);
            }
-       } else if (GetDlgCtrlID((HWND)wParam) == IDC_FILESYS_SELECTOR) {
+       } else if (GetDlgCtrlID ((HWND)wParam) == IDC_FILESYS_SELECTOR) {
            char *s = favoritepopup (hDlg);
            if (s) {
                char path[MAX_DPATH];
@@ -7270,7 +7284,7 @@ static INT_PTR CALLBACK HardfileSettingsProc (HWND hDlg, UINT msg, WPARAM wParam
                xfree (s);
                DiskSelection (hDlg, IDC_PATH_FILESYS, 12, &workprefs, path);
            }
-       } else if (GetDlgCtrlID((HWND)wParam) == IDC_HF_CREATE) {
+       } else if (GetDlgCtrlID ((HWND)wParam) == IDC_HF_CREATE) {
            char *s = favoritepopup (hDlg);
            if (s) {
                char path[MAX_DPATH];
@@ -9099,7 +9113,7 @@ static INT_PTR CALLBACK StringBoxDialogProc (HWND hDlg, UINT msg, WPARAM wParam,
     return FALSE;
 }
 
-static int askinputcustom (HWND hDlg, char *custom, int maxlen)
+static int askinputcustom (HWND hDlg, char *custom, int maxlen, DWORD titleid)
 {
     HWND hwnd;
     char txt[MAX_DPATH];
@@ -9108,6 +9122,11 @@ static int askinputcustom (HWND hDlg, char *custom, int maxlen)
     hwnd = CustomCreateDialog (IDD_STRINGBOX, hDlg, StringBoxDialogProc);
     if (hwnd == NULL)
        return 0;
+    if (titleid != 0) {
+       LoadString (hUIDLL, titleid, txt, MAX_DPATH);
+       SetWindowText (hwnd, txt);
+    }
+    txt[0] = 0;
     SendMessage (GetDlgItem (hwnd, IDC_STRINGBOXEDIT), WM_SETTEXT, 0, (LPARAM)custom);
     SetFocus (GetDlgItem (hwnd, IDC_STRINGBOXEDIT));
     while (stringboxdialogactive == 1) {
@@ -9249,7 +9268,7 @@ static void doinputcustom (HWND hDlg, int newcustom)
     inputdevice_get_mapped_name (input_selected_device, input_selected_widget,
        &flags, 0, custom1, input_selected_sub_num);
     if (strlen(custom1) > 0 || newcustom) {
-       if (askinputcustom (hDlg, custom1, sizeof custom1)) {
+       if (askinputcustom (hDlg, custom1, sizeof custom1, IDS_SB_CUSTOMEVENT)) {
            inputdevice_set_mapping (input_selected_device, input_selected_widget,
                0, custom1, (flags & IDEV_MAPPED_AUTOFIRE_SET) ? 1 : 0, input_selected_sub_num);
        }
@@ -9517,6 +9536,7 @@ static void enable_for_hw3ddlg (HWND hDlg)
     ew (hDlg, IDC_FILTERXTRA, vv2);
     ew (hDlg, IDC_FILTERDEFAULT, v);
     ew (hDlg, IDC_FILTERFILTER, vv);
+    ew (hDlg, IDC_FILTERKEEPASPECT, vv && !vv2);
     ew (hDlg, IDC_FILTERASPECT, vv && !vv2);
     ew (hDlg, IDC_FILTERAUTORES, vv && !vv2);
 
@@ -9574,7 +9594,7 @@ static int *filtervars[] = {
        &workprefs.gfx_xcenter, &workprefs.gfx_ycenter,
        &workprefs.gfx_filter_luminance, &workprefs.gfx_filter_contrast, &workprefs.gfx_filter_saturation,
        &workprefs.gfx_filter_gamma, &workprefs.gfx_filter_blur, &workprefs.gfx_filter_noise,
-       &workprefs.gfx_filter_aspect,
+       &workprefs.gfx_filter_keep_aspect, &workprefs.gfx_filter_aspect,
        NULL
     };
 
@@ -9595,7 +9615,13 @@ static void values_to_hw3ddlg (HWND hDlg)
     struct uae_filter *uf;
     UAEREG *fkey;
 
-    CheckDlgButton (hDlg, IDC_FILTERASPECT, workprefs.gfx_filter_aspect);
+    CheckDlgButton (hDlg, IDC_FILTERKEEPASPECT, workprefs.gfx_filter_keep_aspect);
+    SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_SETCURSEL,
+       (workprefs.gfx_filter_aspect == 0) ? 0 :
+       (workprefs.gfx_filter_aspect == 4 * 256 + 3) ? 1 :
+       (workprefs.gfx_filter_aspect == 15 * 256 + 9) ? 2 :
+       (workprefs.gfx_filter_aspect == 16 * 256 + 9) ? 3 :
+       (workprefs.gfx_filter_aspect == 16 * 256 + 10) ? 4 : 0, 0);
     CheckDlgButton (hDlg, IDC_FILTERAUTORES, workprefs.gfx_autoresolution);
 
     SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETRANGE, TRUE, MAKELONG (-999, +999));
@@ -9911,6 +9937,12 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
     #endif
            pages[HW3D_ID] = hDlg;
            currentpage = HW3D_ID;
+           SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_RESETCONTENT, 0, 0);
+           SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_ADDSTRING, 0, (LPARAM)"Disabled");
+           SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_ADDSTRING, 0, (LPARAM)"4:3");
+           SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_ADDSTRING, 0, (LPARAM)"15:9");
+           SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_ADDSTRING, 0, (LPARAM)"16:9");
+           SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_ADDSTRING, 0, (LPARAM)"16:10");
            enable_for_hw3ddlg (hDlg);
 
        case WM_USER:
@@ -9947,8 +9979,8 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
                case IDC_FILTERAUTORES:
                workprefs.gfx_autoresolution = IsDlgButtonChecked (hDlg, IDC_FILTERAUTORES);
                break;
-               case IDC_FILTERASPECT:
-               currprefs.gfx_filter_aspect = workprefs.gfx_filter_aspect = IsDlgButtonChecked (hDlg, IDC_FILTERASPECT);
+               case IDC_FILTERKEEPASPECT:
+               currprefs.gfx_filter_keep_aspect = workprefs.gfx_filter_keep_aspect = IsDlgButtonChecked (hDlg, IDC_FILTERKEEPASPECT);
                updatedisplayarea ();
                WIN32GFX_WindowMove ();
                break;
@@ -9978,12 +10010,32 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
                        updatedisplayarea ();
                        WIN32GFX_WindowMove ();
                        break;
-
                        case IDC_FILTERVZMULT:
                        currprefs.gfx_filter_vert_zoom_mult = workprefs.gfx_filter_vert_zoom_mult = getfiltermult (hDlg, IDC_FILTERVZMULT);
                        updatedisplayarea ();
                        WIN32GFX_WindowMove ();
                        break;
+                       case IDC_FILTERASPECT:
+                       {
+                           int v = SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_GETCURSEL, 0, 0L);
+                           int v2 = 0;
+                           if (v != CB_ERR) {
+                               if (v == 0)
+                                   v2 = 0;
+                               if (v == 1)
+                                   v2 = 4 * 256 + 3;
+                               if (v == 2)
+                                   v2 = 15 * 256 + 9;
+                               if (v == 3)
+                                   v2 = 16 * 256 + 9;
+                               if (v == 4)
+                                   v2 = 16 * 256 + 10;
+                           }
+                           currprefs.gfx_filter_aspect = workprefs.gfx_filter_aspect = v2;
+                           updatedisplayarea ();
+                           WIN32GFX_WindowMove ();
+                       }
+                       break;
                    }
                }
                break;
@@ -10001,13 +10053,13 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
            recursive++;
            if (h == hz) {
                currprefs.gfx_filter_horiz_zoom = workprefs.gfx_filter_horiz_zoom = (int)SendMessage (hz, TBM_GETPOS, 0, 0);
-               if (workprefs.gfx_filter_aspect) {
+               if (workprefs.gfx_filter_keep_aspect) {
                    currprefs.gfx_filter_vert_zoom = workprefs.gfx_filter_vert_zoom = currprefs.gfx_filter_horiz_zoom;
                    SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPOS, TRUE, workprefs.gfx_filter_vert_zoom);
                }
            } else if (h == vz) {
                currprefs.gfx_filter_vert_zoom = workprefs.gfx_filter_vert_zoom = (int)SendMessage (vz, TBM_GETPOS, 0, 0);
-               if (workprefs.gfx_filter_aspect) {
+               if (workprefs.gfx_filter_keep_aspect) {
                    currprefs.gfx_filter_horiz_zoom = workprefs.gfx_filter_horiz_zoom = currprefs.gfx_filter_vert_zoom;
                    SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPOS, TRUE, workprefs.gfx_filter_horiz_zoom);
                }
index 974372e21b416ef375331f3e00baabcb50eab73c..c0e7c7f8646b30df539b9601eea604708c61cdc9 100755 (executable)
@@ -52,7 +52,7 @@
                                AdditionalOptions=""
                                Optimization="0"
                                AdditionalIncludeDirectories="..\..\include,..\..,..\,..\resources,..\osdep,..\sounddep,..\..\prowizard\include,..\tun"
-                               PreprocessorDefinitions="WINVER=0x0500,_DEBUG,WIN32_IE=0x0500;WIN32"
+                               PreprocessorDefinitions="WINVER=0x0500,_DEBUG,WIN32_IE=0x0501;WIN32"
                                GeneratePreprocessedFile="0"
                                KeepComments="false"
                                ExceptionHandling="0"
                                OmitFramePointers="true"
                                WholeProgramOptimization="false"
                                AdditionalIncludeDirectories="..\..\include,..\..,..\,..\resources,..\osdep,..\sounddep,..\..\prowizard\include"
-                               PreprocessorDefinitions="WINVER=0x0500;NDEBUG;_WIN32_IE=0x0500;WIN32"
+                               PreprocessorDefinitions="WINVER=0x0500;NDEBUG;_WIN32_IE=0x0501;WIN32"
                                StringPooling="true"
                                ExceptionHandling="0"
                                BasicRuntimeChecks="0"
                                OmitFramePointers="true"
                                WholeProgramOptimization="true"
                                AdditionalIncludeDirectories="..\..\include,..\..,..\,..\resources,..\osdep,..\sounddep,..\..\prowizard\include"
-                               PreprocessorDefinitions="WINVER=0x0500;NDEBUG;_WIN32_IE=0x0500;WIN32"
+                               PreprocessorDefinitions="WINVER=0x0500;NDEBUG;_WIN32_IE=0x0501;WIN32"
                                StringPooling="true"
                                ExceptionHandling="0"
                                BasicRuntimeChecks="0"
index 05b16a6d7ee4fd864ddce56149d7067ae1ea5ea4..d4e4446a9d05704c219f069ddcc4a3741d07c71b 100755 (executable)
@@ -1,7 +1,27 @@
 
+Beta 6:
+
+- RAM limit update in previous beta wasn't working..
+- ddfstrt >= ddfstop "feature" emulated. OCS = display ends at "hard
+  stop". ECS/AGA = starts and ends immediately = not much to see.
+  Scroll text in intro "Latest News" by Abandon is now visible,
+  OCS-only, scroll text missing on ECS Amigas (except small graphics
+  garbage on left border)
+- uaescsi.device and uaehf.device read/write command parameter
+  validation improved (previously length = 0 was considered valid)
+- experimental rawkeyboard mode added, add -rawkeyboard command line
+  parameter to enable it (also disables directinput keyboard mode)
+  Normally not needed but may help if some keys are not working in
+  directinput mode. Windows XP or newer only.
+- added BIF_NEWDIALOGSTYLE to path selection dialogs
+- path selection dialogs autoselect old directory
+- added path selection dialog to "favorite path" feature (right click
+  on disk image select buttons)
+- filter aspect ratio selection added
+
 Beta 5:
 
-- avi recording crash fixed if only audio recording was enabled
+- avi recording crash if only audio recording was enabled
 - native dll support fixed
 - do not enable second Z3 board if RAM limit reached (=decrease Z3 size)
   and Z3 size is smaller than 256M (4M+2M combination for example is
@@ -12,8 +32,8 @@ Beta 5:
   of directsound sound buffer causing glitches in some cases (which may
   or may have never happened)
 - SuperEagle, Super2xSaI and 2xSaI 32-bit color support added
-- disable filter if filter size multiplier is really too big for
-  configured display size (instead of overflowing buffers..)
+- disable filter if filter size multiplier is too big for configured
+  display size (instead of overflowing buffers..)
 - resolution and doubling setting change on the fly updates filter
   centering
 - added -ddsoftwarecolorkey command line option. Workaround for buggy
index fc2e6cb3ac1b3196b0ab5f252206b5f44aaa8d7c..1c316763ddd5a4e9caeaafffab75bd60cead7865 100755 (executable)
@@ -449,8 +449,10 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
     switch (command)
     {
        case CMD_READ:
-       if ((io_offset & bmask) || (io_length & bmask))
+       if ((io_offset & bmask) || bmask == 0 || io_data == 0)
            goto bad_command;
+       if ((io_length & bmask) || io_length == 0)
+           goto bad_len;
        if (dev->drivetype == INQ_ROMD)
            io_error = command_cd_read (pdev->mode, dev, io_data, io_offset, io_length, &io_actual);
        else
@@ -459,8 +461,10 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
        case TD_READ64:
        case NSCMD_TD_READ64:
        io_offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32);
-       if ((io_offset64 & bmask) || (io_length & bmask))
+       if ((io_offset64 & bmask) || bmask == 0 || io_data == 0)
            goto bad_command;
+       if ((io_length & bmask) || io_length == 0)
+           goto bad_len;
        if (dev->drivetype == INQ_ROMD)
            io_error = command_cd_read (pdev->mode, dev, io_data, io_offset64, io_length, &io_actual);
        else
@@ -470,8 +474,10 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
        case CMD_WRITE:
        if (dev->di.write_protected || dev->drivetype == INQ_ROMD) {
            io_error = 28; /* writeprotect */
-       } else if ((io_offset & bmask) || (io_length & bmask)) {
+       } else if ((io_offset & bmask) || bmask == 0 || io_data == 0) {
            goto bad_command;
+       } else if ((io_length & bmask) || io_length == 0) {
+           goto bad_len;
        } else {
            io_error = command_write (pdev->mode, dev, io_data, io_offset, io_length, &io_actual);
        }
@@ -481,8 +487,10 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
        io_offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32);
        if (dev->di.write_protected || dev->drivetype == INQ_ROMD) {
            io_error = 28; /* writeprotect */
-       } else if ((io_offset64 & bmask) || (io_length & bmask)) {
+       } else if ((io_offset64 & bmask) || bmask == 0 || io_data == 0) {
            goto bad_command;
+       } else if ((io_length & bmask) || io_length == 0) {
+           goto bad_len;
        } else {
            io_error = command_write (pdev->mode, dev, io_data, io_offset64, io_length, &io_actual);
        }
@@ -491,8 +499,10 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
        case CMD_FORMAT:
        if (dev->di.write_protected || dev->drivetype == INQ_ROMD) {
            io_error = 28; /* writeprotect */
-       } else if ((io_offset & bmask) || (io_length & bmask)) {
+       } else if ((io_offset & bmask) || bmask == 0 || io_data == 0) {
            goto bad_command;
+       } else if ((io_length & bmask) || io_length == 0) {
+           goto bad_len;
        } else {
            io_error = command_write (pdev->mode, dev, io_data, io_offset, io_length, &io_actual);
        }
@@ -502,8 +512,10 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
        io_offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32);
        if (dev->di.write_protected || dev->drivetype == INQ_ROMD) {
            io_error = 28; /* writeprotect */
-       } else if ((io_offset64 & bmask) || (io_length & bmask)) {
+       } else if ((io_offset64 & bmask) || bmask == 0 || io_data == 0) {
            goto bad_command;
+       } else if ((io_length & bmask) || io_length == 0) {
+           goto bad_len;
        } else {
            io_error = command_write (pdev->mode, dev, io_data, io_offset64, io_length, &io_actual);
        }
@@ -578,6 +590,9 @@ static int dev_do_io (struct devstruct *dev, uaecptr request)
        default:
        io_error = IOERR_NOCMD;
        break;
+       bad_len:
+       io_error = IOERR_BADLENGTH;
+       break;
        bad_command:
        io_error = IOERR_BADADDRESS;
        break;