--- /dev/null
+/*
+* UAE - The Un*x Amiga Emulator
+*
+* Custom chip emulation
+*
+* Copyright 1995-2002 Bernd Schmidt
+* Copyright 1995 Alessandro Bissacco
+* Copyright 2000-2009 Toni Wilen
+*/
+
+#include "sysconfig.h"
+#include "sysdeps.h"
+
+#include <ctype.h>
+#include <assert.h>
+
+#include "options.h"
+#include "uae.h"
+#include "gensound.h"
+#include "audio.h"
+#include "sounddep/sound.h"
+#include "events.h"
+#include "memory.h"
+#include "custom.h"
+#include "newcpu.h"
+#include "cia.h"
+#include "disk.h"
+#include "blitter.h"
+#include "xwin.h"
+#include "inputdevice.h"
+#include "keybuf.h"
+#include "serial.h"
+#include "autoconf.h"
+#include "traps.h"
+#include "gui.h"
+#include "picasso96.h"
+#include "drawing.h"
+#include "savestate.h"
+#include "ar.h"
+#ifdef AVIOUTPUT
+#include "avioutput.h"
+#endif
+#include "debug.h"
+#include "akiko.h"
+#include "cdtv.h"
+#if defined(ENFORCER)
+#include "enforcer.h"
+#endif
+#include "gayle.h"
+#include "gfxfilter.h"
+#include "a2091.h"
+#include "a2065.h"
+#include "ncr_scsi.h"
+
+#define CUSTOM_DEBUG 0
+#define SPRITE_DEBUG 0
+#define SPRITE_DEBUG_MINY 0x0
+#define SPRITE_DEBUG_MAXY 0x100
+#define SPR0_HPOS 0x15
+#define MAX_SPRITES 8
+#define SPRITE_COLLISIONS
+#define SPEEDUP
+#define AUTOSCALE_SPRITES 1
+
+#define SPRBORDER 0
+
+STATIC_INLINE int nocustom (void)
+{
+ if (picasso_on && currprefs.picasso96_nocustom)
+ return 1;
+ return 0;
+}
+
+void uae_abort (const TCHAR *format,...)
+{
+ static int nomore;
+ va_list parms;
+ TCHAR buffer[1000];
+
+ va_start (parms, format);
+ _vsntprintf (buffer, sizeof (buffer) - 1, format, parms );
+ va_end (parms);
+ if (nomore) {
+ write_log (L"%s\n", buffer);
+ return;
+ }
+ gui_message (buffer);
+ nomore = 1;
+}
+
+#if 0
+void customhack_put (struct customhack *ch, uae_u16 v, int hpos)
+{
+ ch->v = v;
+ ch->vpos = vpos;
+ ch->hpos = hpos;
+}
+
+uae_u16 customhack_get (struct customhack *ch, int hpos)
+{
+ if (ch->vpos == vpos && ch->hpos == hpos) {
+ ch->vpos = -1;
+ return 0xffff;
+ }
+ return ch->v;
+}
+#endif
+
+uae_u16 last_custom_value1;
+
+static unsigned int n_consecutive_skipped = 0;
+static unsigned int total_skipped = 0;
+
+STATIC_INLINE void sync_copper (int hpos);
+
+
+/* Events */
+
+unsigned long int event_cycles, nextevent, is_lastline, currcycle;
+long cycles_to_next_event;
+long max_cycles_to_next_event;
+long cycles_to_hsync_event;
+
+static int rpt_did_reset;
+struct ev eventtab[ev_max];
+struct ev2 eventtab2[ev2_max];
+
+volatile frame_time_t vsynctime, vsyncmintime;
+
+#ifdef JIT
+extern uae_u8* compiled_code;
+#endif
+
+int vpos;
+int hack_vpos;
+static int hack_vpos2, hack_vpos2vpos;
+static int lof, lol;
+static int next_lineno, prev_lineno;
+static enum nln_how nextline_how;
+static int lof_changed = 0;
+static int scandoubled_line;
+
+/* Stupid genlock-detection prevention hack.
+* We should stop calling vsync_handler() and
+* hstop_handler() completely but it is not
+* worth the trouble..
+*/
+static int vpos_previous, hpos_previous;
+static int vpos_lpen, hpos_lpen, lightpen_triggered;
+int lightpen_x, lightpen_y, lightpen_cx, lightpen_cy;
+
+static uae_u32 sprtaba[256],sprtabb[256];
+static uae_u32 sprite_ab_merge[256];
+/* Tables for collision detection. */
+static uae_u32 sprclx[16], clxmask[16];
+
+/* AGA T genlock bit in color registers */
+static uae_u8 color_regs_aga_genlock[256];
+
+/*
+* Hardware registers of all sorts.
+*/
+
+static int REGPARAM3 custom_wput_1 (int, uaecptr, uae_u32, int) REGPARAM;
+
+static uae_u16 cregs[256];
+
+uae_u16 intena, intreq, intreqr;
+uae_u16 dmacon;
+uae_u16 adkcon; /* used by audio code */
+
+static uae_u32 cop1lc, cop2lc, copcon;
+
+int maxhpos = MAXHPOS_PAL;
+int maxhpos_short = MAXHPOS_PAL;
+int maxvpos = MAXVPOS_PAL;
+int maxvpos_max = MAXVPOS_PAL;
+int minfirstline = VBLANK_ENDLINE_PAL;
+int vblank_hz = VBLANK_HZ_PAL, fake_vblank_hz, vblank_skip, doublescan;
+frame_time_t syncbase;
+static int fmode;
+uae_u16 beamcon0, new_beamcon0;
+uae_u16 vtotal = MAXVPOS_PAL, htotal = MAXHPOS_PAL;
+static uae_u16 hsstop, hbstrt, hbstop, vsstop, vbstrt, vbstop, hsstrt, vsstrt, hcenter;
+static int ciavsyncmode;
+
+#define HSYNCTIME (maxhpos * CYCLE_UNIT);
+
+/* This is but an educated guess. It seems to be correct, but this stuff
+* isn't documented well. */
+struct sprite {
+ uaecptr pt;
+ int xpos;
+ int vstart;
+ int vstop;
+ int dblscan; /* AGA SSCAN2 */
+ int armed;
+ int dmastate;
+ int dmacycle;
+ int ptxhpos;
+};
+
+static struct sprite spr[MAX_SPRITES];
+
+uaecptr sprite_0;
+int sprite_0_width, sprite_0_height, sprite_0_doubled;
+uae_u32 sprite_0_colors[4];
+static uae_u8 magic_sprite_mask = 0xff;
+
+static int sprite_vblank_endline = VBLANK_SPRITE_PAL;
+
+static unsigned int sprctl[MAX_SPRITES], sprpos[MAX_SPRITES];
+#ifdef AGA
+static uae_u16 sprdata[MAX_SPRITES][4], sprdatb[MAX_SPRITES][4];
+#else
+static uae_u16 sprdata[MAX_SPRITES][1], sprdatb[MAX_SPRITES][1];
+#endif
+static int sprite_last_drawn_at[MAX_SPRITES];
+static int last_sprite_point, nr_armed;
+static int sprite_width, sprres;
+int sprite_buffer_res;
+
+#ifdef CPUEMU_12
+uae_u8 cycle_line[256];
+#endif
+
+static uae_u16 bplxdat[8];
+static int bpl1dat_written, bpl1dat_early;
+static uae_s16 bpl1mod, bpl2mod;
+static uaecptr prevbpl[2][MAXVPOS][8];
+static uaecptr bplpt[8], bplptx[8];
+/* Used as a debugging aid, to offset any bitplane temporarily. */
+int bpl_off[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+/*static int blitcount[256]; blitter debug */
+
+static struct color_entry current_colors;
+static unsigned int bplcon0, bplcon1, bplcon2, bplcon3, bplcon4;
+static unsigned int bplcon0d, bplcon0dd, bplcon0_res, bplcon0_planes, bplcon0_planes_limit;
+static unsigned int diwstrt, diwstop, diwhigh;
+static int diwhigh_written;
+static unsigned int ddfstrt, ddfstop, ddfstrt_old_hpos;
+static int ddf_change, badmode, diw_change;
+static int fmode;
+static int bplcon1_hpos;
+
+/* The display and data fetch windows */
+
+enum diw_states
+{
+ DIW_waiting_start, DIW_waiting_stop
+};
+
+static int plffirstline, plflastline;
+int plffirstline_total, plflastline_total;
+static int plfstrt_start, plfstrt, plfstop;
+static int sprite_minx, sprite_maxx;
+static int first_bpl_vpos;
+static int last_diw_pix_hpos, last_ddf_pix_hpos;
+static int last_decide_line_hpos, last_sprite_decide_line_hpos;
+static int last_fetch_hpos, last_sprite_hpos;
+static int diwfirstword, diwlastword;
+static int plfleft_real;
+static enum diw_states diwstate, hdiwstate, ddfstate;
+int first_planes_vpos, last_planes_vpos;
+int diwfirstword_total, diwlastword_total;
+int ddffirstword_total, ddflastword_total;
+int firstword_bplcon1;
+
+static int last_copper_hpos;
+static int copper_access;
+
+/* Sprite collisions */
+static unsigned int clxdat, clxcon, clxcon2, clxcon_bpl_enable, clxcon_bpl_match;
+
+enum copper_states {
+ COP_stop,
+ COP_read1,
+ COP_read2,
+ COP_bltwait,
+ COP_wait_in2,
+ COP_skip_in2,
+ COP_wait1,
+ COP_wait,
+ COP_skip1,
+ COP_strobe_delay1,
+ COP_strobe_delay2,
+ COP_strobe_extra, // just to skip current cycle when CPU wrote to COPJMP
+ COP_start_delay
+};
+
+struct copper {
+ /* The current instruction words. */
+ unsigned int i1, i2;
+ unsigned int saved_i1, saved_i2;
+ enum copper_states state, state_prev;
+ /* Instruction pointer. */
+ uaecptr ip, saved_ip;
+ int hpos, vpos;
+ unsigned int ignore_next;
+ int vcmp, hcmp;
+
+ int strobe; /* COPJMP1 / COPJMP2 accessed */
+ int last_write, last_write_hpos;
+ int moveaddr, movedata, movedelay;
+};
+
+static struct copper cop_state;
+static int copper_enabled_thisline;
+static int cop_min_waittime;
+/*
+* Statistics
+*/
+
+/* Used also by bebox.cpp */
+unsigned long int frametime = 0, lastframetime = 0, timeframes = 0;
+unsigned long hsync_counter = 0, vsync_counter = 0, ciavsync_counter = 0;
+unsigned long int idletime;
+int bogusframe;
+
+/* Recording of custom chip register changes. */
+static int current_change_set;
+
+#ifdef OS_WITHOUT_MEMORY_MANAGEMENT
+/* sam: Those arrays uses around 7Mb of BSS... That seems */
+/* too much for AmigaDOS (uae crashes as soon as one loads */
+/* it. So I use a different strategy here (realloc the */
+/* arrays when needed. That strategy might be usefull for */
+/* computer with low memory. */
+struct sprite_entry *sprite_entries[2];
+struct color_change *color_changes[2];
+static int max_sprite_entry = 400;
+static int delta_sprite_entry = 0;
+static int max_color_change = 400;
+static int delta_color_change = 0;
+#else
+static struct sprite_entry sprite_entries[2][MAX_SPR_PIXELS / 16];
+static struct color_change color_changes[2][MAX_REG_CHANGE];
+#endif
+
+struct decision line_decisions[2 * (MAXVPOS + 1) + 1];
+static struct draw_info line_drawinfo[2][2 * (MAXVPOS + 1) + 1];
+#define COLOR_TABLE_SIZE (MAXVPOS + 1) * 2
+static struct color_entry color_tables[2][COLOR_TABLE_SIZE];
+
+static int next_sprite_entry = 0;
+static int prev_next_sprite_entry;
+static int next_sprite_forced = 1;
+
+struct sprite_entry *curr_sprite_entries, *prev_sprite_entries;
+struct color_change *curr_color_changes, *prev_color_changes;
+struct draw_info *curr_drawinfo, *prev_drawinfo;
+struct color_entry *curr_color_tables, *prev_color_tables;
+
+static int next_color_change;
+static int next_color_entry, remembered_color_entry;
+static int color_src_match, color_dest_match, color_compare_result;
+
+static uae_u32 thisline_changed;
+
+#ifdef SMART_UPDATE
+#define MARK_LINE_CHANGED do { thisline_changed = 1; } while (0)
+#else
+#define MARK_LINE_CHANGED do { ; } while (0)
+#endif
+
+static struct decision thisline_decision;
+static int fetch_cycle, fetch_modulo_cycle;
+
+enum plfstate
+{
+ plf_idle,
+ plf_start,
+ plf_active,
+ plf_passed_stop,
+ plf_passed_stop2,
+ plf_end
+} plf_state;
+
+enum fetchstate {
+ fetch_not_started,
+ fetch_started,
+ fetch_was_plane0
+} fetch_state;
+
+/*
+* helper functions
+*/
+
+STATIC_INLINE int ecsshres(void)
+{
+ return bplcon0_res == RES_SUPERHIRES && (currprefs.chipset_mask & CSMASK_ECS_DENISE) && !(currprefs.chipset_mask & CSMASK_AGA);
+}
+
+STATIC_INLINE int nodraw (void)
+{
+ return !currprefs.cpu_cycle_exact && framecnt != 0;
+}
+
+static int doflickerfix (void)
+{
+ return currprefs.gfx_linedbl && doublescan < 0;
+}
+
+uae_u32 get_copper_address (int copno)
+{
+ switch (copno) {
+ case 1: return cop1lc;
+ case 2: return cop2lc;
+ case -1: return cop_state.ip;
+ default: return 0;
+ }
+}
+
+int rpt_available = 0;
+
+void reset_frame_rate_hack (void)
+{
+ if (currprefs.m68k_speed != -1)
+ return;
+
+ if (! rpt_available) {
+ currprefs.m68k_speed = 0;
+ return;
+ }
+
+ rpt_did_reset = 1;
+ is_lastline = 0;
+ vsyncmintime = read_processor_time () + vsynctime;
+ write_log (L"Resetting frame rate hack\n");
+}
+
+STATIC_INLINE void setclr (uae_u16 *p, uae_u16 val)
+{
+ if (val & 0x8000)
+ *p |= val & 0x7FFF;
+ else
+ *p &= ~val;
+}
+
+STATIC_INLINE alloc_cycle (int hpos, int type)
+{
+#ifdef CPUEMU_12
+#if 0
+ if (cycle_line[hpos])
+ write_log (L"hpos=%d, old=%d, new=%d\n", hpos, cycle_line[hpos], type);
+ if ((type == CYCLE_CPU || type == CYCLE_COPPER) && (hpos & 1))
+ write_log (L"odd %d cycle %d\n", hpos);
+ if (!(hpos & 1) && (type == CYCLE_SPRITE || type == CYCLE_REFRESH || type == CYCLE_MISC))
+ write_log (L"even %d cycle %d\n", type, hpos);
+#endif
+ cycle_line[hpos] = type;
+#endif
+}
+STATIC_INLINE alloc_cycle_maybe (int hpos, int type)
+{
+ if (cycle_line[hpos] == 0)
+ alloc_cycle (hpos, type);
+}
+
+void alloc_cycle_ext(int hpos, int type)
+{
+ alloc_cycle (hpos, type);
+}
+
+static void hsyncdelay (void)
+{
+#if 0
+ static int prevhpos;
+ while (current_hpos () == prevhpos)
+ do_cycles(CYCLE_UNIT);
+ prevhpos = current_hpos();
+#endif
+}
+
+static void update_mirrors (void)
+{
+ aga_mode = (currprefs.chipset_mask & CSMASK_AGA) ? 1 : 0;
+ direct_rgb = aga_mode;
+}
+
+STATIC_INLINE uae_u8 *pfield_xlateptr (uaecptr plpt, int bytecount)
+{
+ if (!chipmem_bank.check (plpt, bytecount)) {
+ static int count = 0;
+ if (!count)
+ count++, write_log (L"Warning: Bad playfield pointer\n");
+ return NULL;
+ }
+ return chipmem_bank.xlateaddr (plpt);
+}
+
+STATIC_INLINE void docols (struct color_entry *colentry)
+{
+ int i;
+
+#ifdef AGA
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ for (i = 0; i < 256; i++) {
+ int v = color_reg_get (colentry, i);
+ if (v < 0 || v > 16777215)
+ continue;
+ colentry->acolors[i] = getxcolor (v);
+ }
+ } else {
+#endif
+ for (i = 0; i < 32; i++) {
+ int v = color_reg_get (colentry, i);
+ if (v < 0 || v > 4095)
+ continue;
+ colentry->acolors[i] = getxcolor (v);
+ }
+#ifdef AGA
+ }
+#endif
+}
+
+extern struct color_entry colors_for_drawing;
+
+void notice_new_xcolors (void)
+{
+ int i;
+
+ update_mirrors ();
+ docols (¤t_colors);
+ docols (&colors_for_drawing);
+ for (i = 0; i < (MAXVPOS + 1) * 2; i++) {
+ docols (color_tables[0] + i);
+ docols (color_tables[1] + i);
+ }
+}
+
+static void do_sprites (int currhp);
+
+static void remember_ctable (void)
+{
+ if (remembered_color_entry == -1) {
+ /* The colors changed since we last recorded a color map. Record a
+ * new one. */
+ color_reg_cpy (curr_color_tables + next_color_entry, ¤t_colors);
+ remembered_color_entry = next_color_entry++;
+ }
+ thisline_decision.ctable = remembered_color_entry;
+ if (color_src_match == -1 || color_dest_match != remembered_color_entry
+ || line_decisions[next_lineno].ctable != color_src_match)
+ {
+ /* The remembered comparison didn't help us - need to compare again. */
+ int oldctable = line_decisions[next_lineno].ctable;
+ int changed = 0;
+
+ if (oldctable == -1) {
+ changed = 1;
+ color_src_match = color_dest_match = -1;
+ } else {
+ color_compare_result = color_reg_cmp (&prev_color_tables[oldctable], ¤t_colors) != 0;
+ if (color_compare_result)
+ changed = 1;
+ color_src_match = oldctable;
+ color_dest_match = remembered_color_entry;
+ }
+ thisline_changed |= changed;
+ } else {
+ /* We know the result of the comparison */
+ if (color_compare_result)
+ thisline_changed = 1;
+ }
+}
+
+static void remember_ctable_for_border (void)
+{
+ remember_ctable ();
+}
+
+/* Called to determine the state of the horizontal display window state
+* machine at the current position. It might have changed since we last
+* checked. */
+static void decide_diw (int hpos)
+{
+ /* Last hpos = hpos + 0.5, eg. normal PAL end hpos is 227.5 * 2 = 455 */
+ int pix_hpos = coord_diw_to_window_x (hpos == maxhpos ? hpos * 2 + 1 : hpos * 2);
+ if (hdiwstate == DIW_waiting_start && thisline_decision.diwfirstword == -1
+ && pix_hpos >= diwfirstword && last_diw_pix_hpos < diwfirstword)
+ {
+ thisline_decision.diwfirstword = diwfirstword < 0 ? 0 : diwfirstword;
+ hdiwstate = DIW_waiting_stop;
+ }
+ if (hdiwstate == DIW_waiting_stop && thisline_decision.diwlastword == -1
+ && pix_hpos >= diwlastword && last_diw_pix_hpos < diwlastword)
+ {
+ thisline_decision.diwlastword = diwlastword < 0 ? 0 : diwlastword;
+ hdiwstate = DIW_waiting_start;
+ }
+ last_diw_pix_hpos = pix_hpos;
+}
+
+static int fetchmode;
+static int real_bitplane_number[3][3][9];
+
+/* Disable bitplane DMA if planes > available DMA slots. This is needed
+e.g. by the Sanity WOC demo (at the "Party Effect"). */
+STATIC_INLINE int GET_PLANES_LIMIT (uae_u16 bc0)
+{
+ int res = GET_RES_AGNUS (bc0);
+ int planes = GET_PLANES (bc0);
+ return real_bitplane_number[fetchmode][res][planes];
+}
+
+/* The HRM says 0xD8, but that can't work... */
+#define HARD_DDF_STOP 0xd4
+#define HARD_DDF_START 0x18
+
+static void add_modulos (void)
+{
+ int m1, m2;
+
+ if (fmode & 0x4000) {
+ if (((diwstrt >> 8) ^ vpos) & 1)
+ m1 = m2 = bpl2mod;
+ else
+ m1 = m2 = bpl1mod;
+ } else {
+ m1 = bpl1mod;
+ m2 = bpl2mod;
+ }
+
+ switch (bplcon0_planes_limit) {
+#ifdef AGA
+ case 8: bplpt[7] += m2; bplptx[7] += m2;
+ case 7: bplpt[6] += m1; bplptx[6] += m1;
+#endif
+ case 6: bplpt[5] += m2; bplptx[5] += m2;
+ case 5: bplpt[4] += m1; bplptx[4] += m1;
+ case 4: bplpt[3] += m2; bplptx[3] += m2;
+ case 3: bplpt[2] += m1; bplptx[2] += m1;
+ case 2: bplpt[1] += m2; bplptx[1] += m2;
+ case 1: bplpt[0] += m1; bplptx[0] += m1;
+ }
+}
+
+static void finish_playfield_line (void)
+{
+ /* The latter condition might be able to happen in interlaced frames. */
+ if (vpos >= minfirstline && (thisframe_first_drawn_line == -1 || vpos < thisframe_first_drawn_line))
+ thisframe_first_drawn_line = vpos;
+ thisframe_last_drawn_line = vpos;
+
+#ifdef SMART_UPDATE
+ if (line_decisions[next_lineno].plflinelen != thisline_decision.plflinelen
+ || line_decisions[next_lineno].plfleft != thisline_decision.plfleft
+ || line_decisions[next_lineno].bplcon0 != thisline_decision.bplcon0
+ || line_decisions[next_lineno].bplcon2 != thisline_decision.bplcon2
+#ifdef ECS_DENISE
+ || line_decisions[next_lineno].bplcon3 != thisline_decision.bplcon3
+#endif
+#ifdef AGA
+ || line_decisions[next_lineno].bplcon4 != thisline_decision.bplcon4
+#endif
+ )
+#endif /* SMART_UPDATE */
+ thisline_changed = 1;
+}
+
+/* The fetch unit mainly controls ddf stop. It's the number of cycles that
+are contained in an indivisible block during which ddf is active. E.g.
+if DDF starts at 0x30, and fetchunit is 8, then possible DDF stops are
+0x30 + n * 8. */
+static int fetchunit, fetchunit_mask;
+/* The delay before fetching the same bitplane again. Can be larger than
+the number of bitplanes; in that case there are additional empty cycles
+with no data fetch (this happens for high fetchmodes and low
+resolutions). */
+static int fetchstart, fetchstart_shift, fetchstart_mask;
+/* fm_maxplane holds the maximum number of planes possible with the current
+fetch mode. This selects the cycle diagram:
+8 planes: 73516240
+4 planes: 3120
+2 planes: 10. */
+static int fm_maxplane, fm_maxplane_shift;
+
+/* The corresponding values, by fetchmode and display resolution. */
+static const int fetchunits[] = { 8,8,8,0, 16,8,8,0, 32,16,8,0 };
+static const int fetchstarts[] = { 3,2,1,0, 4,3,2,0, 5,4,3,0 };
+static const int fm_maxplanes[] = { 3,2,1,0, 3,3,2,0, 3,3,3,0 };
+
+static int cycle_diagram_table[3][3][9][32];
+static int cycle_diagram_free_cycles[3][3][9];
+static int cycle_diagram_total_cycles[3][3][9];
+static int *curr_diagram;
+static const int cycle_sequences[3 * 8] = { 2,1,2,1,2,1,2,1, 4,2,3,1,4,2,3,1, 8,4,6,2,7,3,5,1 };
+
+static void debug_cycle_diagram (void)
+{
+ int fm, res, planes, cycle, v;
+ TCHAR aa;
+
+ for (fm = 0; fm <= 2; fm++) {
+ write_log (L"FMODE %d\n=======\n", fm);
+ for (res = 0; res <= 2; res++) {
+ for (planes = 0; planes <= 8; planes++) {
+ write_log (L"%d: ",planes);
+ for (cycle = 0; cycle < 32; cycle++) {
+ v=cycle_diagram_table[fm][res][planes][cycle];
+ if (v==0) aa='-'; else if(v>0) aa='1'; else aa='X';
+ write_log (L"%c",aa);
+ }
+ write_log (L" %d:%d\n",
+ cycle_diagram_free_cycles[fm][res][planes], cycle_diagram_total_cycles[fm][res][planes]);
+ }
+ write_log (L"\n");
+ }
+ }
+ fm=0;
+}
+
+static void create_cycle_diagram_table (void)
+{
+ int fm, res, cycle, planes, rplanes, v;
+ int fetch_start, max_planes, freecycles;
+ const int *cycle_sequence;
+
+ for (fm = 0; fm <= 2; fm++) {
+ for (res = 0; res <= 2; res++) {
+ max_planes = fm_maxplanes[fm * 4 + res];
+ fetch_start = 1 << fetchstarts[fm * 4 + res];
+ cycle_sequence = &cycle_sequences[(max_planes - 1) * 8];
+ max_planes = 1 << max_planes;
+ for (planes = 0; planes <= 8; planes++) {
+ freecycles = 0;
+ for (cycle = 0; cycle < 32; cycle++)
+ cycle_diagram_table[fm][res][planes][cycle] = -1;
+ if (planes <= max_planes) {
+ for (cycle = 0; cycle < fetch_start; cycle++) {
+ if (cycle < max_planes && planes >= cycle_sequence[cycle & 7]) {
+ v = cycle_sequence[cycle & 7];
+ } else {
+ v = 0;
+ freecycles++;
+ }
+ cycle_diagram_table[fm][res][planes][cycle] = v;
+ }
+ }
+ cycle_diagram_free_cycles[fm][res][planes] = freecycles;
+ cycle_diagram_total_cycles[fm][res][planes] = fetch_start;
+ rplanes = planes;
+ if (rplanes > max_planes)
+ rplanes = 0;
+ if (rplanes == 7 && fm == 0 && res == 0 && !(currprefs.chipset_mask & CSMASK_AGA))
+ rplanes = 4;
+ real_bitplane_number[fm][res][planes] = rplanes;
+ }
+ }
+ }
+#if 0
+ debug_cycle_diagram ();
+#endif
+}
+
+
+/* Used by the copper. */
+static int estimated_last_fetch_cycle;
+static int cycle_diagram_shift;
+
+static void estimate_last_fetch_cycle (int hpos)
+{
+ int fetchunit = fetchunits[fetchmode * 4 + bplcon0_res];
+
+ if (plf_state < plf_passed_stop) {
+ int stop = plfstop < hpos || plfstop > HARD_DDF_STOP ? HARD_DDF_STOP : plfstop;
+ /* We know that fetching is up-to-date up until hpos, so we can use fetch_cycle. */
+ int fetch_cycle_at_stop = fetch_cycle + (stop - hpos);
+ int starting_last_block_at = (fetch_cycle_at_stop + fetchunit - 1) & ~(fetchunit - 1);
+
+ estimated_last_fetch_cycle = hpos + (starting_last_block_at - fetch_cycle) + fetchunit;
+ } else {
+ int starting_last_block_at = (fetch_cycle + fetchunit - 1) & ~(fetchunit - 1);
+ if (plf_state == plf_passed_stop2)
+ starting_last_block_at -= fetchunit;
+
+ estimated_last_fetch_cycle = hpos + (starting_last_block_at - fetch_cycle) + fetchunit;
+ }
+}
+
+static uae_u32 outword[MAX_PLANES];
+static int out_nbits, out_offs;
+static uae_u32 todisplay[MAX_PLANES][4];
+static uae_u32 fetched[MAX_PLANES];
+#ifdef AGA
+static uae_u32 fetched_aga0[MAX_PLANES];
+static uae_u32 fetched_aga1[MAX_PLANES];
+#endif
+
+/* Expansions from bplcon0/bplcon1. */
+static int toscr_res, toscr_nr_planes, toscr_nr_planes2, fetchwidth;
+static int toscr_delay1, toscr_delay2;
+
+/* The number of bits left from the last fetched words.
+This is an optimization - conceptually, we have to make sure the result is
+the same as if toscr is called in each clock cycle. However, to speed this
+up, we accumulate display data; this variable keeps track of how much.
+Thus, once we do call toscr_nbits (which happens at least every 16 bits),
+we can do more work at once. */
+static int toscr_nbits;
+
+/* undocumented bitplane delay hardware feature */
+static int delayoffset;
+
+STATIC_INLINE void compute_delay_offset (void)
+{
+ delayoffset = (16 << fetchmode) - (((plfstrt - HARD_DDF_START) & fetchstart_mask) << 1);
+#if 0
+ /* maybe we can finally get rid of this stupid table.. */
+ if (tmp == 4)
+ delayoffset = 4; // Loons Docs
+ else if (tmp == 8)
+ delayoffset = 8;
+ else if (tmp == 12) // Loons Docs
+ delayoffset = 4;
+ else if (tmp == 16) /* Overkill AGA */
+ delayoffset = 48;
+ else if (tmp == 24) /* AB 2 */
+ delayoffset = 8;
+ else if (tmp == 32)
+ delayoffset = 32;
+ else if (tmp == 48) /* Pinball Illusions AGA, ingame */
+ delayoffset = 16;
+ else /* what about 40 and 56? */
+ delayoffset = 0;
+ //write_log (L"%d:%d ", vpos, delayoffset);
+#endif
+}
+
+static void record_color_change2 (int hpos, int regno, unsigned long value)
+{
+ curr_color_changes[next_color_change].linepos = hpos * 2;
+ curr_color_changes[next_color_change].regno = regno;
+ curr_color_changes[next_color_change++].value = value;
+ curr_color_changes[next_color_change].regno = -1;
+}
+
+static int isehb (uae_u16 bplcon0, uae_u16 bplcon2)
+{
+ int bplehb;
+ if (currprefs.chipset_mask & CSMASK_AGA)
+ bplehb = (bplcon0 & 0x7010) == 0x6000;
+ else if (currprefs.chipset_mask & CSMASK_ECS_DENISE)
+ bplehb = ((bplcon0 & 0xFC00) == 0x6000 || (bplcon0 & 0xFC00) == 0x7000);
+ else
+ bplehb = ((bplcon0 & 0xFC00) == 0x6000 || (bplcon0 & 0xFC00) == 0x7000) && !currprefs.cs_denisenoehb;
+ return bplehb;
+}
+
+// OCS/ECS, lores, 7 planes = 4 "real" planes + BPL5DAT and BPL6DAT as 5th and 6th plane
+STATIC_INLINE int isocs7planes (void)
+{
+ return !(currprefs.chipset_mask & CSMASK_AGA) && bplcon0_res == 0 && bplcon0_planes == 7;
+}
+
+int is_bitplane_dma (int hpos)
+{
+ if (fetch_state == fetch_not_started || hpos < plfstrt)
+ return 0;
+ if ((plf_state == plf_end && hpos >= thisline_decision.plfright)
+ || hpos >= estimated_last_fetch_cycle)
+ return 0;
+ return curr_diagram[(hpos - cycle_diagram_shift) & fetchstart_mask];
+}
+
+STATIC_INLINE int is_bitplane_dma_inline (int hpos)
+{
+ if (fetch_state == fetch_not_started || hpos < plfstrt)
+ return 0;
+ if ((plf_state == plf_end && hpos >= thisline_decision.plfright)
+ || hpos >= estimated_last_fetch_cycle)
+ return 0;
+ return curr_diagram[(hpos - cycle_diagram_shift) & fetchstart_mask];
+}
+
+static void update_denise (int hpos)
+{
+ toscr_res = GET_RES_DENISE (bplcon0d);
+ if (bplcon0dd != bplcon0d) {
+ record_color_change2 (hpos, 0x100 + 0x1000, bplcon0d);
+ bplcon0dd = bplcon0d;
+ }
+ toscr_nr_planes = GET_PLANES (bplcon0d);
+ if (isocs7planes ()) {
+ if (toscr_nr_planes2 < 6)
+ toscr_nr_planes2 = 6;
+ } else {
+ toscr_nr_planes2 = toscr_nr_planes;
+ }
+}
+
+static int bpldmasetuphpos;
+static int bpldmasetupphase;
+
+/* set currently active Agnus bitplane DMA sequence */
+static void setup_fmodes (int hpos)
+{
+ switch (fmode & 3)
+ {
+ case 0:
+ fetchmode = 0;
+ break;
+ case 1:
+ case 2:
+ fetchmode = 1;
+ break;
+ case 3:
+ fetchmode = 2;
+ break;
+ }
+ badmode = GET_RES_AGNUS (bplcon0) != GET_RES_DENISE (bplcon0);
+ bplcon0_res = GET_RES_AGNUS (bplcon0);
+ bplcon0_planes = GET_PLANES (bplcon0);
+ bplcon0_planes_limit = GET_PLANES_LIMIT (bplcon0);
+ fetchunit = fetchunits[fetchmode * 4 + bplcon0_res];
+ fetchunit_mask = fetchunit - 1;
+ fetchstart_shift = fetchstarts[fetchmode * 4 + bplcon0_res];
+ fetchstart = 1 << fetchstart_shift;
+ fetchstart_mask = fetchstart - 1;
+ fm_maxplane_shift = fm_maxplanes[fetchmode * 4 + bplcon0_res];
+ fm_maxplane = 1 << fm_maxplane_shift;
+ fetch_modulo_cycle = fetchunit - fetchstart;
+ if (is_bitplane_dma (hpos - 1))
+ cycle_line[hpos - 1] = 1;
+ curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit];
+ estimate_last_fetch_cycle (hpos);
+ if (bpldmasetuphpos >= 0 && debug_dma)
+ record_dma_event (DMA_EVENT_BPLFETCHUPDATE, hpos, vpos);
+ bpldmasetuphpos = -1;
+ bpldmasetupphase = 0;
+ ddf_change = vpos;
+}
+
+static void BPLCON0_Denise (int hpos, uae_u16 v);
+
+// writing to BPLCON0 adds 4 cycle delay before Agnus bitplane DMA sequence changes
+// (Note that Denise sees the change after 1 cycle)
+// AGA needs extra cycle in some specific situations (Brian The Lion "dialog") but not
+// in all situations (Superstardust weapon panel)
+#define BPLCON_AGNUS_DELAY (4 + (bplcon0_planes == 8 ? 1 : 0))
+#define BPLCON_DENISE_DELAY 1
+
+static void maybe_setup_fmodes (int hpos)
+{
+ switch (bpldmasetupphase)
+ {
+ case 0:
+ BPLCON0_Denise (hpos, bplcon0);
+ bpldmasetupphase++;
+ bpldmasetuphpos += BPLCON_AGNUS_DELAY - BPLCON_DENISE_DELAY;
+ break;
+ case 1:
+ setup_fmodes (hpos);
+ break;
+ }
+}
+
+STATIC_INLINE maybe_check (int hpos)
+{
+ if (bpldmasetuphpos > 0 && hpos >= bpldmasetuphpos)
+ maybe_setup_fmodes (hpos);
+}
+
+static void bpldmainitdelay (int hpos)
+{
+ int hposa;
+
+ hposa = hpos + BPLCON_AGNUS_DELAY;
+ ddf_change = vpos;
+ if (hposa < 0x14) {
+ BPLCON0_Denise (hpos, bplcon0);
+ setup_fmodes (hpos);
+ return;
+ }
+ if (bpldmasetuphpos < 0) {
+ bpldmasetupphase = 0;
+ bpldmasetuphpos = hpos + BPLCON_DENISE_DELAY;
+ }
+}
+
+/* Expand bplcon0/bplcon1 into the toscr_xxx variables. */
+static void compute_toscr_delay_1 (int bplcon1)
+{
+ int delay1 = (bplcon1 & 0x0f) | ((bplcon1 & 0x0c00) >> 6);
+ int delay2 = ((bplcon1 >> 4) & 0x0f) | (((bplcon1 >> 4) & 0x0c00) >> 6);
+ int shdelay1 = (bplcon1 >> 12) & 3;
+ int shdelay2 = (bplcon1 >> 8) & 3;
+ int delaymask;
+ int fetchwidth = 16 << fetchmode;
+
+ delay1 += delayoffset;
+ delay2 += delayoffset;
+ delaymask = (fetchwidth - 1) >> toscr_res;
+ toscr_delay1 = (delay1 & delaymask) << toscr_res;
+ toscr_delay1 |= shdelay1 >> (RES_MAX - toscr_res);
+ toscr_delay2 = (delay2 & delaymask) << toscr_res;
+ toscr_delay2 |= shdelay2 >> (RES_MAX - toscr_res);
+}
+
+static void compute_toscr_delay (int hpos, int bplcon1)
+{
+ update_denise (hpos);
+ compute_toscr_delay_1 (bplcon1);
+}
+
+STATIC_INLINE void clear_fetchbuffer (uae_u32 *ptr, int nwords)
+{
+ int i;
+
+ if (! thisline_changed) {
+ for (i = 0; i < nwords; i++) {
+ if (ptr[i]) {
+ thisline_changed = 1;
+ break;
+ }
+ }
+ }
+ memset (ptr, 0, nwords * 4);
+}
+
+static void update_toscr_planes (void)
+{
+ if (toscr_nr_planes2 > thisline_decision.nr_planes) {
+ int j;
+ for (j = thisline_decision.nr_planes; j < toscr_nr_planes2; j++)
+ clear_fetchbuffer ((uae_u32 *)(line_data[next_lineno] + 2 * MAX_WORDS_PER_LINE * j), out_offs);
+ thisline_decision.nr_planes = toscr_nr_planes2;
+ }
+}
+
+STATIC_INLINE void maybe_first_bpl1dat (int hpos)
+{
+ if (thisline_decision.plfleft != -1) {
+ // early bpl1day crap fix (Sequential engine animation)
+ if (plfleft_real == -1) {
+ int i;
+ for (i = 0; i < thisline_decision.nr_planes; i++) {
+ todisplay[i][0] = 0;
+#ifdef AGA
+ todisplay[i][1] = 0;
+ todisplay[i][2] = 0;
+ todisplay[i][3] = 0;
+#endif
+ }
+ plfleft_real = hpos;
+ bpl1dat_early = 1;
+ }
+ } else {
+ plfleft_real = thisline_decision.plfleft = hpos;
+ compute_delay_offset ();
+ }
+}
+
+STATIC_INLINE void fetch (int nr, int fm, int hpos)
+{
+ if (nr < bplcon0_planes_limit) {
+ uaecptr p = bplpt[nr] + bpl_off[nr];
+ bplpt[nr] += 2 << fm;
+ bplptx[nr] += 2 << fm;
+ if (nr == 0)
+ bpl1dat_written = 1;
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma (0x110 + nr * 2, chipmem_agnus_wget (p), p, hpos, vpos, DMARECORD_BITPLANE);
+#endif
+ switch (fm)
+ {
+ case 0:
+ fetched[nr] = bplxdat[nr] = last_custom_value1 = chipmem_agnus_wget (p);
+ break;
+#ifdef AGA
+ case 1:
+ fetched_aga0[nr] = chipmem_lget (p);
+ last_custom_value1 = (uae_u16)fetched_aga0[nr];
+ break;
+ case 2:
+ fetched_aga1[nr] = chipmem_lget (p);
+ fetched_aga0[nr] = chipmem_lget (p + 4);
+ last_custom_value1 = (uae_u16)fetched_aga0[nr];
+ break;
+#endif
+ }
+ if (plf_state == plf_passed_stop2 && fetch_cycle >= (fetch_cycle & ~fetchunit_mask) + fetch_modulo_cycle) {
+ int mod;
+ if (fmode & 0x4000) {
+ if (((diwstrt >> 8) ^ vpos) & 1)
+ mod = bpl2mod;
+ else
+ mod = bpl1mod;
+ } else if (nr & 1)
+ mod = bpl2mod;
+ else
+ mod = bpl1mod;
+ bplpt[nr] += mod;
+ bplptx[nr] += mod;
+ }
+ } else {
+ // use whatever left in BPLxDAT if no DMA
+ // normally useless but "7-planes" feature won't work without this
+ fetched[nr] = bplxdat[nr];
+ }
+}
+
+STATIC_INLINE void toscr_3_ecs (int nbits)
+{
+ int delay1 = toscr_delay1;
+ int delay2 = toscr_delay2;
+ int i;
+ uae_u32 mask = 0xFFFF >> (16 - nbits);
+
+ for (i = 0; i < toscr_nr_planes2; i += 2) {
+ outword[i] <<= nbits;
+ outword[i] |= (todisplay[i][0] >> (16 - nbits + delay1)) & mask;
+ todisplay[i][0] <<= nbits;
+ }
+ for (i = 1; i < toscr_nr_planes2; i += 2) {
+ outword[i] <<= nbits;
+ outword[i] |= (todisplay[i][0] >> (16 - nbits + delay2)) & mask;
+ todisplay[i][0] <<= nbits;
+ }
+}
+
+STATIC_INLINE void shift32plus (uae_u32 *p, int n)
+{
+ uae_u32 t = p[1];
+ t <<= n;
+ t |= p[0] >> (32 - n);
+ p[1] = t;
+}
+
+#ifdef AGA
+STATIC_INLINE void aga_shift (uae_u32 *p, int n, int fm)
+{
+ if (fm == 2) {
+ shift32plus (p + 2, n);
+ shift32plus (p + 1, n);
+ }
+ shift32plus (p + 0, n);
+ p[0] <<= n;
+}
+
+STATIC_INLINE void toscr_3_aga (int nbits, int fm)
+{
+ int delay1 = toscr_delay1;
+ int delay2 = toscr_delay2;
+ int i;
+ uae_u32 mask = 0xFFFF >> (16 - nbits);
+
+ {
+ int offs = (16 << fm) - nbits + delay1;
+ int off1 = offs >> 5;
+ if (off1 == 3)
+ off1 = 2;
+ offs -= off1 * 32;
+ for (i = 0; i < toscr_nr_planes2; i += 2) {
+ uae_u32 t0 = todisplay[i][off1];
+ uae_u32 t1 = todisplay[i][off1 + 1];
+ uae_u64 t = (((uae_u64)t1) << 32) | t0;
+ outword[i] <<= nbits;
+ outword[i] |= (t >> offs) & mask;
+ aga_shift (todisplay[i], nbits, fm);
+ }
+ }
+ {
+ int offs = (16 << fm) - nbits + delay2;
+ int off1 = offs >> 5;
+ if (off1 == 3)
+ off1 = 2;
+ offs -= off1 * 32;
+ for (i = 1; i < toscr_nr_planes2; i += 2) {
+ uae_u32 t0 = todisplay[i][off1];
+ uae_u32 t1 = todisplay[i][off1 + 1];
+ uae_u64 t = (((uae_u64)t1) << 32) | t0;
+ outword[i] <<= nbits;
+ outword[i] |= (t >> offs) & mask;
+ aga_shift (todisplay[i], nbits, fm);
+ }
+ }
+}
+
+#endif
+
+static void toscr_2_0 (int nbits) { toscr_3_ecs (nbits); }
+#ifdef AGA
+static void toscr_2_1 (int nbits) { toscr_3_aga (nbits, 1); }
+static void toscr_2_2 (int nbits) { toscr_3_aga (nbits, 2); }
+#endif
+
+STATIC_INLINE void toscr_1 (int nbits, int fm)
+{
+ switch (fm) {
+ case 0:
+ toscr_2_0 (nbits);
+ break;
+#ifdef AGA
+ case 1:
+ toscr_2_1 (nbits);
+ break;
+ case 2:
+ toscr_2_2 (nbits);
+ break;
+#endif
+ }
+ out_nbits += nbits;
+ if (out_nbits == 32) {
+ int i;
+ uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4;
+ for (i = 0; i < thisline_decision.nr_planes; i++) {
+ uae_u32 *dataptr32 = (uae_u32 *)dataptr;
+ if (*dataptr32 != outword[i]) {
+ thisline_changed = 1;
+ *dataptr32 = outword[i];
+ }
+ outword[i] = 0;
+ dataptr += MAX_WORDS_PER_LINE * 2;
+ }
+ out_offs++;
+ out_nbits = 0;
+ }
+}
+
+static void toscr_fm0 (int);
+static void toscr_fm1 (int);
+static void toscr_fm2 (int);
+
+STATIC_INLINE void toscr (int nbits, int fm)
+{
+ switch (fm) {
+ case 0: toscr_fm0 (nbits); break;
+#ifdef AGA
+ case 1: toscr_fm1 (nbits); break;
+ case 2: toscr_fm2 (nbits); break;
+#endif
+ }
+}
+
+STATIC_INLINE void toscr_0 (int nbits, int fm)
+{
+ int t;
+
+ if (nbits > 16) {
+ toscr (16, fm);
+ nbits -= 16;
+ }
+
+ t = 32 - out_nbits;
+ if (t < nbits) {
+ toscr_1 (t, fm);
+ nbits -= t;
+ }
+ toscr_1 (nbits, fm);
+}
+
+static void toscr_fm0 (int nbits) { toscr_0 (nbits, 0); }
+static void toscr_fm1 (int nbits) { toscr_0 (nbits, 1); }
+static void toscr_fm2 (int nbits) { toscr_0 (nbits, 2); }
+
+static int flush_plane_data (int fm)
+{
+ int i = 0;
+
+ if (out_nbits <= 16) {
+ i += 16;
+ toscr_1 (16, fm);
+ }
+ if (out_nbits != 0) {
+ i += 32 - out_nbits;
+ toscr_1 (32 - out_nbits, fm);
+ }
+ i += 32;
+
+ toscr_1 (16, fm);
+ toscr_1 (16, fm);
+
+ if (fm == 2) {
+ /* flush AGA full 64-bit shift register */
+ i += 32;
+ toscr_1 (16, fm);
+ toscr_1 (16, fm);
+ }
+
+ if (bpl1dat_early) {
+ // clear possible crap in right border if
+ // bpl1dat was written "out of sync"
+ toscr_1 (16, fm);
+ toscr_1 (16, fm);
+ }
+
+ return i >> (1 + toscr_res);
+}
+
+STATIC_INLINE void flush_display (int fm)
+{
+ if (toscr_nbits > 0 && thisline_decision.plfleft != -1)
+ toscr (toscr_nbits, fm);
+ toscr_nbits = 0;
+}
+
+STATIC_INLINE void fetch_start (int hpos)
+{
+ fetch_state = fetch_started;
+}
+
+
+/* Called when all planes have been fetched, i.e. when a new block
+of data is available to be displayed. The data in fetched[] is
+moved into todisplay[]. */
+STATIC_INLINE void beginning_of_plane_block (int hpos, int fm)
+{
+ int i;
+ int oleft = thisline_decision.plfleft;
+ static uae_u16 bplcon1t, bplcon1t2;
+
+ flush_display (fm);
+
+ if (fm == 0)
+ for (i = 0; i < MAX_PLANES; i++) {
+ todisplay[i][0] |= fetched[i];
+ }
+#ifdef AGA
+ else
+ for (i = 0; i < MAX_PLANES; i++) {
+ if (fm == 2)
+ todisplay[i][1] = fetched_aga1[i];
+ todisplay[i][0] = fetched_aga0[i];
+ }
+#endif
+
+ update_denise (hpos);
+ maybe_first_bpl1dat (hpos);
+
+ bplcon1t2 = bplcon1t;
+ bplcon1t = bplcon1;
+ // writing to BPLCON1 1 cycle after BPL1DAT access will
+ // not (except first BPL1DAT write) affect the display
+ // until next display block
+ if (bplcon1_hpos != hpos || oleft < 0)
+ bplcon1t2 = bplcon1t;
+ compute_toscr_delay (hpos, bplcon1t2);
+}
+
+#ifdef SPEEDUP
+
+/* The usual inlining tricks - don't touch unless you know what you are doing. */
+STATIC_INLINE void long_fetch_ecs (int plane, int nwords, int weird_number_of_bits, int dma)
+{
+ uae_u16 *real_pt = (uae_u16 *)pfield_xlateptr (bplpt[plane] + bpl_off[plane], nwords * 2);
+ int delay = (plane & 1) ? toscr_delay2 : toscr_delay1;
+ int tmp_nbits = out_nbits;
+ uae_u32 shiftbuffer = todisplay[plane][0];
+ uae_u32 outval = outword[plane];
+ uae_u32 fetchval = fetched[plane];
+ uae_u32 *dataptr = (uae_u32 *)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs);
+
+ if (dma) {
+ bplpt[plane] += nwords * 2;
+ bplptx[plane] += nwords * 2;
+ }
+
+ if (real_pt == 0)
+ /* @@@ Don't do this, fall back on chipmem_wget instead. */
+ return;
+
+ while (nwords > 0) {
+ int bits_left = 32 - tmp_nbits;
+ uae_u32 t;
+
+ shiftbuffer |= fetchval;
+
+ t = (shiftbuffer >> delay) & 0xFFFF;
+
+ if (weird_number_of_bits && bits_left < 16) {
+ outval <<= bits_left;
+ outval |= t >> (16 - bits_left);
+ thisline_changed |= *dataptr ^ outval;
+ *dataptr++ = outval;
+
+ outval = t;
+ tmp_nbits = 16 - bits_left;
+ shiftbuffer <<= 16;
+ } else {
+ outval = (outval << 16) | t;
+ shiftbuffer <<= 16;
+ tmp_nbits += 16;
+ if (tmp_nbits == 32) {
+ thisline_changed |= *dataptr ^ outval;
+ *dataptr++ = outval;
+ tmp_nbits = 0;
+ }
+ }
+ nwords--;
+ if (dma) {
+ fetchval = do_get_mem_word (real_pt);
+ real_pt++;
+ }
+ }
+ fetched[plane] = fetchval;
+ todisplay[plane][0] = shiftbuffer;
+ outword[plane] = outval;
+}
+
+#ifdef AGA
+STATIC_INLINE void long_fetch_aga (int plane, int nwords, int weird_number_of_bits, int fm, int dma)
+{
+ uae_u32 *real_pt = (uae_u32 *)pfield_xlateptr (bplpt[plane] + bpl_off[plane], nwords * 2);
+ int delay = (plane & 1) ? toscr_delay2 : toscr_delay1;
+ int tmp_nbits = out_nbits;
+ uae_u32 *shiftbuffer = todisplay[plane];
+ uae_u32 outval = outword[plane];
+ uae_u32 fetchval0 = fetched_aga0[plane];
+ uae_u32 fetchval1 = fetched_aga1[plane];
+ uae_u32 *dataptr = (uae_u32 *)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs);
+ int offs = (16 << fm) - 16 + delay;
+ int off1 = offs >> 5;
+ if (off1 == 3)
+ off1 = 2;
+ offs -= off1 * 32;
+
+ if (dma) {
+ bplpt[plane] += nwords * 2;
+ bplptx[plane] += nwords * 2;
+ }
+
+ if (real_pt == 0)
+ /* @@@ Don't do this, fall back on chipmem_wget instead. */
+ return;
+
+ while (nwords > 0) {
+ int i;
+
+ shiftbuffer[0] = fetchval0;
+ if (fm == 2)
+ shiftbuffer[1] = fetchval1;
+
+ for (i = 0; i < (1 << fm); i++) {
+ int bits_left = 32 - tmp_nbits;
+
+ uae_u32 t0 = shiftbuffer[off1];
+ uae_u32 t1 = shiftbuffer[off1 + 1];
+ uae_u64 t = (((uae_u64)t1) << 32) | t0;
+
+ t0 = (uae_u32)((t >> offs) & 0xFFFF);
+
+ if (weird_number_of_bits && bits_left < 16) {
+ outval <<= bits_left;
+ outval |= t0 >> (16 - bits_left);
+
+ thisline_changed |= *dataptr ^ outval;
+ *dataptr++ = outval;
+
+ outval = t0;
+ tmp_nbits = 16 - bits_left;
+ aga_shift (shiftbuffer, 16, fm);
+ } else {
+ outval = (outval << 16) | t0;
+ aga_shift (shiftbuffer, 16, fm);
+ tmp_nbits += 16;
+ if (tmp_nbits == 32) {
+ thisline_changed |= *dataptr ^ outval;
+ *dataptr++ = outval;
+ tmp_nbits = 0;
+ }
+ }
+ }
+
+ nwords -= 1 << fm;
+
+ if (dma) {
+ if (fm == 1)
+ fetchval0 = do_get_mem_long (real_pt);
+ else {
+ fetchval1 = do_get_mem_long (real_pt);
+ fetchval0 = do_get_mem_long (real_pt + 1);
+ }
+ real_pt += fm;
+ }
+ }
+ fetched_aga0[plane] = fetchval0;
+ fetched_aga1[plane] = fetchval1;
+ outword[plane] = outval;
+}
+#endif
+
+static void long_fetch_ecs_0 (int hpos, int nwords, int dma) { long_fetch_ecs (hpos, nwords, 0, dma); }
+static void long_fetch_ecs_1 (int hpos, int nwords, int dma) { long_fetch_ecs (hpos, nwords, 1, dma); }
+#ifdef AGA
+static void long_fetch_aga_1_0 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 0, 1, dma); }
+static void long_fetch_aga_1_1 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 1, 1, dma); }
+static void long_fetch_aga_2_0 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 0, 2, dma); }
+static void long_fetch_aga_2_1 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 1, 2, dma); }
+#endif
+
+static void do_long_fetch (int hpos, int nwords, int dma, int fm)
+{
+ int i;
+
+ flush_display (fm);
+ switch (fm) {
+ case 0:
+ if (out_nbits & 15) {
+ for (i = 0; i < toscr_nr_planes; i++)
+ long_fetch_ecs_1 (i, nwords, dma);
+ } else {
+ for (i = 0; i < toscr_nr_planes; i++)
+ long_fetch_ecs_0 (i, nwords, dma);
+ }
+ break;
+#ifdef AGA
+ case 1:
+ if (out_nbits & 15) {
+ for (i = 0; i < toscr_nr_planes; i++)
+ long_fetch_aga_1_1 (i, nwords, dma);
+ } else {
+ for (i = 0; i < toscr_nr_planes; i++)
+ long_fetch_aga_1_0 (i, nwords, dma);
+ }
+ break;
+ case 2:
+ if (out_nbits & 15) {
+ for (i = 0; i < toscr_nr_planes; i++)
+ long_fetch_aga_2_1 (i, nwords, dma);
+ } else {
+ for (i = 0; i < toscr_nr_planes; i++)
+ long_fetch_aga_2_0 (i, nwords, dma);
+ }
+ break;
+#endif
+ }
+
+ out_nbits += nwords * 16;
+ out_offs += out_nbits >> 5;
+ out_nbits &= 31;
+
+ if (dma && toscr_nr_planes > 0)
+ fetch_state = fetch_was_plane0;
+}
+
+#endif
+
+/* make sure fetch that goes beyond maxhpos is finished */
+static void finish_final_fetch (int pos, int fm)
+{
+ if (thisline_decision.plfleft == -1)
+ return;
+ if (plf_state == plf_end)
+ return;
+ plf_state = plf_end;
+ ddfstate = DIW_waiting_start;
+ pos += flush_plane_data (fm);
+ thisline_decision.plfright = pos;
+ thisline_decision.plflinelen = out_offs;
+ finish_playfield_line ();
+}
+
+STATIC_INLINE int one_fetch_cycle_0 (int pos, int ddfstop_to_test, int dma, int fm)
+{
+ if (plf_state < plf_passed_stop && pos == ddfstop_to_test)
+ plf_state = plf_passed_stop;
+
+ if ((fetch_cycle & fetchunit_mask) == 0) {
+ if (plf_state == plf_passed_stop2) {
+ finish_final_fetch (pos, fm);
+ return 1;
+ }
+ if (plf_state >= plf_passed_stop)
+ plf_state++;
+ }
+
+ maybe_check (pos);
+
+ if (dma) {
+ /* fetchstart_mask can be larger than fm_maxplane if FMODE > 0. This means
+ that the remaining cycles are idle; we'll fall through the whole switch
+ without doing anything. */
+ int cycle_start = fetch_cycle & fetchstart_mask;
+ switch (fm_maxplane) {
+ case 8:
+ switch (cycle_start) {
+ case 0: fetch (7, fm, pos); break;
+ case 1: fetch (3, fm, pos); break;
+ case 2: fetch (5, fm, pos); break;
+ case 3: fetch (1, fm, pos); break;
+ case 4: fetch (6, fm, pos); break;
+ case 5: fetch (2, fm, pos); break;
+ case 6: fetch (4, fm, pos); break;
+ case 7: fetch (0, fm, pos); break;
+ }
+ break;
+ case 4:
+ switch (cycle_start) {
+ case 0: fetch (3, fm, pos); break;
+ case 1: fetch (1, fm, pos); break;
+ case 2: fetch (2, fm, pos); break;
+ case 3: fetch (0, fm, pos); break;
+ }
+ break;
+ case 2:
+ switch (cycle_start) {
+ case 0: fetch (1, fm, pos); break;
+ case 1: fetch (0, fm, pos); break;
+ }
+ break;
+ }
+ }
+
+ if (bpl1dat_written) {
+ // do this here because if program plays with BPLCON0 during scanline
+ // it is possible that one DMA BPL1DAT write is completely missed
+ // and we must not draw anything at all in next dma block if this happens
+ // (Disposable Hero titlescreen)
+ fetch_state = fetch_was_plane0;
+ bpl1dat_written = 0;
+ }
+
+ fetch_cycle++;
+ toscr_nbits += 2 << toscr_res;
+
+ if (toscr_nbits > 16) {
+ uae_abort (L"toscr_nbits > 16 (%d)", toscr_nbits);
+ toscr_nbits = 0;
+ }
+ if (toscr_nbits == 16)
+ flush_display (fm);
+
+ return 0;
+}
+
+static int one_fetch_cycle_fm0 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 0); }
+static int one_fetch_cycle_fm1 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 1); }
+static int one_fetch_cycle_fm2 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 2); }
+
+STATIC_INLINE int one_fetch_cycle (int pos, int ddfstop_to_test, int dma, int fm)
+{
+ switch (fm) {
+ case 0: return one_fetch_cycle_fm0 (pos, ddfstop_to_test, dma);
+#ifdef AGA
+ case 1: return one_fetch_cycle_fm1 (pos, ddfstop_to_test, dma);
+ case 2: return one_fetch_cycle_fm2 (pos, ddfstop_to_test, dma);
+#endif
+ default: uae_abort (L"fm corrupt"); return 0;
+ }
+}
+
+STATIC_INLINE void update_fetch (int until, int fm)
+{
+ int pos;
+ int dma = dmaen (DMA_BITPLANE);
+
+ int ddfstop_to_test;
+
+ if (nodraw() || plf_state == plf_end)
+ return;
+
+ /* We need an explicit test against HARD_DDF_STOP here to guard against
+ programs that move the DDFSTOP before our current position before we
+ reach it. */
+ ddfstop_to_test = HARD_DDF_STOP;
+ if (ddfstop >= last_fetch_hpos && plfstop < ddfstop_to_test)
+ ddfstop_to_test = plfstop;
+
+ update_toscr_planes ();
+
+ pos = last_fetch_hpos;
+ cycle_diagram_shift = last_fetch_hpos - fetch_cycle;
+
+ /* First, a loop that prepares us for the speedup code. We want to enter
+ the SPEEDUP case with fetch_state == fetch_was_plane0, and then unroll
+ whole blocks, so that we end on the same fetch_state again. */
+ for (; ; pos++) {
+ if (pos == until) {
+ if (until >= maxhpos) {
+ finish_final_fetch (pos, fm);
+ return;
+ }
+ flush_display (fm);
+ return;
+ }
+
+ if (fetch_state == fetch_was_plane0)
+ break;
+
+ fetch_start (pos);
+ if (one_fetch_cycle (pos, ddfstop_to_test, dma, fm))
+ return;
+ }
+
+#ifdef SPEEDUP
+ /* Unrolled version of the for loop below. */
+ if (plf_state < plf_passed_stop && ddf_change != vpos && ddf_change + 1 != vpos
+ && dma
+ && (fetch_cycle & fetchstart_mask) == (fm_maxplane & fetchstart_mask)
+ && !badmode && !debug_dma
+# if 0
+ /* @@@ We handle this case, but the code would be simpler if we
+ * disallowed it - it may even be possible to guarantee that
+ * this condition never is false. Later. */
+ && (out_nbits & 15) == 0
+# endif
+ && toscr_nr_planes == thisline_decision.nr_planes)
+ {
+ int offs = (pos - fetch_cycle) & fetchunit_mask;
+ int ddf2 = ((ddfstop_to_test - offs + fetchunit - 1) & ~fetchunit_mask) + offs;
+ int ddf3 = ddf2 + fetchunit;
+ int stop = until < ddf2 ? until : until < ddf3 ? ddf2 : ddf3;
+ int count;
+
+ count = stop - pos;
+
+ if (count >= fetchstart) {
+ count &= ~fetchstart_mask;
+
+ if (thisline_decision.plfleft == -1) {
+ compute_delay_offset ();
+ compute_toscr_delay_1 (bplcon1);
+ }
+
+ do_long_fetch (pos, count >> (3 - toscr_res), dma, fm);
+
+ /* This must come _after_ do_long_fetch so as not to confuse flush_display
+ into thinking the first fetch has produced any output worth emitting to
+ the screen. But the calculation of delay_offset must happen _before_. */
+ maybe_first_bpl1dat (pos);
+
+ if (pos <= ddfstop_to_test && pos + count > ddfstop_to_test)
+ plf_state = plf_passed_stop;
+ if (pos <= ddfstop_to_test && pos + count > ddf2)
+ plf_state = plf_passed_stop2;
+ if (pos <= ddf2 && pos + count >= ddf2 + fm_maxplane)
+ add_modulos ();
+ pos += count;
+ fetch_cycle += count;
+ }
+ } else {
+#endif
+#ifdef SPEEDUP
+ }
+#endif
+ for (; pos < until; pos++) {
+ if (fetch_state == fetch_was_plane0) {
+ beginning_of_plane_block (pos, fm);
+ estimate_last_fetch_cycle (pos);
+ }
+ fetch_start (pos);
+
+ if (one_fetch_cycle (pos, ddfstop_to_test, dma, fm))
+ return;
+ }
+ if (until >= maxhpos) {
+ finish_final_fetch (pos, fm);
+ return;
+ }
+ flush_display (fm);
+}
+
+static void update_fetch_0 (int hpos) { update_fetch (hpos, 0); }
+static void update_fetch_1 (int hpos) { update_fetch (hpos, 1); }
+static void update_fetch_2 (int hpos) { update_fetch (hpos, 2); }
+
+STATIC_INLINE void decide_fetch (int hpos)
+{
+ if (hpos > last_fetch_hpos) {
+ if (fetch_state != fetch_not_started) {
+ switch (fetchmode) {
+ case 0: update_fetch_0 (hpos); break;
+#ifdef AGA
+ case 1: update_fetch_1 (hpos); break;
+ case 2: update_fetch_2 (hpos); break;
+#endif
+ default: uae_abort (L"fetchmode corrupt");
+ }
+ }
+ maybe_check (hpos);
+ last_fetch_hpos = hpos;
+ }
+}
+
+static void start_bpl_dma (int hpos, int hstart)
+{
+ if (first_bpl_vpos < 0)
+ first_bpl_vpos = vpos;
+
+ if (doflickerfix () && interlace_seen && !scandoubled_line) {
+ int i;
+ for (i = 0; i < 8; i++) {
+ prevbpl[lof][vpos][i] = bplptx[i];
+ if (!lof && (bplcon0 & 4))
+ bplpt[i] = prevbpl[1 - lof][vpos][i];
+ if (!(bplcon0 & 4) || interlace_seen < 0)
+ prevbpl[1 - lof][vpos][i] = prevbpl[lof][vpos][i] = 0;
+ }
+ }
+
+ fetch_start (hpos);
+ fetch_cycle = 0;
+ last_fetch_hpos = hstart;
+ cycle_diagram_shift = last_fetch_hpos;
+ out_nbits = 0;
+ out_offs = 0;
+ toscr_nbits = 0;
+ thisline_decision.bplres = bplcon0_res;
+
+ ddfstate = DIW_waiting_stop;
+ compute_toscr_delay (last_fetch_hpos, bplcon1);
+
+ /* If someone already wrote BPL1DAT, clear the area between that point and
+ the real fetch start. */
+ if (!nodraw ()) {
+ if (thisline_decision.plfleft != -1) {
+ out_nbits = (plfstrt - thisline_decision.plfleft) << (1 + toscr_res);
+ out_offs = out_nbits >> 5;
+ out_nbits &= 31;
+ }
+ update_toscr_planes ();
+ }
+}
+
+/* this may turn on datafetch if program turns dma on during the ddf */
+static void maybe_start_bpl_dma (int hpos)
+{
+ /* OCS: BPL DMA never restarts if DMA is turned on during DDF
+ * ECS/AGA: BPL DMA restarts but only if DMA was turned off
+ outside of DDF or during current line, otherwise display
+ processing jumps immediately to "DDFSTOP passed"-condition */
+ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ return;
+ if (fetch_state != fetch_not_started)
+ return;
+ if (diwstate != DIW_waiting_stop)
+ return;
+ if (hpos <= plfstrt)
+ return;
+ if (hpos > plfstop - fetchunit)
+ return;
+ if (ddfstate != DIW_waiting_start)
+ plf_state = plf_passed_stop;
+ start_bpl_dma (hpos, hpos);
+}
+
+/* This function is responsible for turning on datafetch if necessary. */
+STATIC_INLINE void decide_line (int hpos)
+{
+ /* Take care of the vertical DIW. */
+ if (vpos == plffirstline) {
+ diwstate = DIW_waiting_stop;
+ ddf_change = vpos;
+ }
+ if (vpos == plflastline) {
+ diwstate = DIW_waiting_start;
+ ddf_change = vpos;
+ }
+
+ if (hpos <= last_decide_line_hpos)
+ return;
+
+ if (fetch_state == fetch_not_started && diwstate == DIW_waiting_stop) {
+ int ok = 0;
+ if (last_decide_line_hpos < plfstrt_start && hpos >= plfstrt_start) {
+ if (plf_state == plf_idle)
+ plf_state = plf_start;
+ }
+ if (last_decide_line_hpos < plfstrt && hpos >= plfstrt) {
+ if (plf_state == plf_start)
+ plf_state = plf_active;
+ if (plf_state == plf_active)
+ ok = 1;
+ /* hack warning.. Writing to DDFSTRT when DMA should start must be ignored
+ * (correct fix would be emulate this delay for every custom register, but why bother..) */
+ if (hpos - 2 == ddfstrt_old_hpos)
+ ok = 0;
+ }
+ if (ok) {
+ if (dmaen (DMA_BITPLANE)) {
+ start_bpl_dma (hpos, plfstrt);
+ estimate_last_fetch_cycle (plfstrt);
+ }
+ last_decide_line_hpos = hpos;
+#ifndef CUSTOM_SIMPLE
+ do_sprites (plfstrt);
+#endif
+ return;
+ }
+ }
+
+#ifndef CUSTOM_SIMPLE
+ if (last_sprite_decide_line_hpos < SPR0_HPOS + 4 * MAX_SPRITES)
+ do_sprites (hpos);
+ last_sprite_decide_line_hpos = hpos;
+#endif
+
+ last_decide_line_hpos = hpos;
+}
+
+/* Called when a color is about to be changed (write to a color register),
+* but the new color has not been entered into the table yet. */
+static void record_color_change (int hpos, int regno, unsigned long value)
+{
+ if (regno < 0x1000 && nodraw ())
+ return;
+ /* Early positions don't appear on-screen. */
+ if (vpos < minfirstline)
+ return;
+
+ decide_diw (hpos);
+ decide_line (hpos);
+
+ if (thisline_decision.ctable == -1)
+ remember_ctable ();
+
+#ifdef OS_WITHOUT_MEMORY_MANAGEMENT
+ if (next_color_change >= max_color_change) {
+ ++delta_color_change;
+ return;
+ }
+#endif
+ if (regno < 0x1000 && hpos < HBLANK_OFFSET && !(beamcon0 & 0x80) && prev_lineno >= 0) {
+ struct draw_info *pdip = curr_drawinfo + prev_lineno;
+ int idx = pdip->last_color_change;
+ /* Move color changes in horizontal cycles 0 to HBLANK_OFFSET to end of previous line.
+ * Cycles 0 to HBLANK_OFFSET are visible in right border on real Amigas. (because of late hsync)
+ */
+ pdip->last_color_change++;
+ pdip->nr_color_changes++;
+ curr_color_changes[idx].linepos = (hpos + maxhpos) * 2;
+ curr_color_changes[idx].regno = regno;
+ curr_color_changes[idx].value = value;
+ curr_color_changes[idx + 1].regno = -1;
+ }
+ record_color_change2 (hpos, regno, value);
+}
+
+static void record_register_change (int hpos, int regno, unsigned long value)
+{
+ if (regno == 0x100) { // BPLCON0
+ if (value & 0x800)
+ thisline_decision.ham_seen = 1;
+ thisline_decision.ehb_seen = !! isehb (value, bplcon2);
+ } else if (regno == 0x104) { // BPLCON2
+ thisline_decision.ehb_seen = !! isehb (value, bplcon2);
+ }
+ record_color_change (hpos, regno + 0x1000, value);
+}
+
+typedef int sprbuf_res_t, cclockres_t, hwres_t, bplres_t;
+
+static int expand_sprres (uae_u16 con0, uae_u16 con3)
+{
+ int res;
+
+ switch ((con3 >> 6) & 3)
+ {
+ default:
+ res = RES_LORES;
+ break;
+#ifdef ECS_DENISE
+ case 0: /* ECS defaults (LORES,HIRES=LORES sprite,SHRES=HIRES sprite) */
+ if ((currprefs.chipset_mask & CSMASK_ECS_DENISE) && GET_RES_DENISE (con0) == RES_SUPERHIRES)
+ res = RES_HIRES;
+ else
+ res = RES_LORES;
+ break;
+#endif
+#ifdef AGA
+ case 1:
+ res = RES_LORES;
+ break;
+ case 2:
+ res = RES_HIRES;
+ break;
+ case 3:
+ res = RES_SUPERHIRES;
+ break;
+#endif
+ }
+ return res;
+}
+
+/* handle very rarely needed playfield collision (CLXDAT bit 0) */
+static void do_playfield_collisions (void)
+{
+ int bplres = bplcon0_res;
+ hwres_t ddf_left = thisline_decision.plfleft * 2 << bplres;
+ hwres_t hw_diwlast = coord_window_to_diw_x (thisline_decision.diwlastword);
+ hwres_t hw_diwfirst = coord_window_to_diw_x (thisline_decision.diwfirstword);
+ int i, collided, minpos, maxpos;
+#ifdef AGA
+ int planes = (currprefs.chipset_mask & CSMASK_AGA) ? 8 : 6;
+#else
+ int planes = 6;
+#endif
+
+ if (clxcon_bpl_enable == 0) {
+ clxdat |= 1;
+ return;
+ }
+ if (clxdat & 1)
+ return;
+
+ collided = 0;
+ minpos = thisline_decision.plfleft * 2;
+ if (minpos < hw_diwfirst)
+ minpos = hw_diwfirst;
+ maxpos = thisline_decision.plfright * 2;
+ if (maxpos > hw_diwlast)
+ maxpos = hw_diwlast;
+ for (i = minpos; i < maxpos && !collided; i+= 32) {
+ int offs = ((i << bplres) - ddf_left) >> 3;
+ int j;
+ uae_u32 total = 0xffffffff;
+ for (j = 0; j < planes; j++) {
+ int ena = (clxcon_bpl_enable >> j) & 1;
+ int match = (clxcon_bpl_match >> j) & 1;
+ uae_u32 t = 0xffffffff;
+ if (ena) {
+ if (j < thisline_decision.nr_planes) {
+ t = *(uae_u32 *)(line_data[next_lineno] + offs + 2 * j * MAX_WORDS_PER_LINE);
+ t ^= (match & 1) - 1;
+ } else {
+ t = (match & 1) - 1;
+ }
+ }
+ total &= t;
+ }
+ if (total) {
+ collided = 1;
+#if 0
+ {
+ int k;
+ for (k = 0; k < 1; k++) {
+ uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + offs + 2 * k * MAX_WORDS_PER_LINE);
+ *ldata ^= 0x5555555555;
+ }
+ }
+#endif
+
+ }
+ }
+ if (collided)
+ clxdat |= 1;
+}
+
+/* Sprite-to-sprite collisions are taken care of in record_sprite. This one does
+playfield/sprite collisions. */
+static void do_sprite_collisions (void)
+{
+ int nr_sprites = curr_drawinfo[next_lineno].nr_sprites;
+ int first = curr_drawinfo[next_lineno].first_sprite_entry;
+ int i;
+ unsigned int collision_mask = clxmask[clxcon >> 12];
+ int bplres = bplcon0_res;
+ hwres_t ddf_left = thisline_decision.plfleft * 2 << bplres;
+ hwres_t hw_diwlast = coord_window_to_diw_x (thisline_decision.diwlastword);
+ hwres_t hw_diwfirst = coord_window_to_diw_x (thisline_decision.diwfirstword);
+
+ if (clxcon_bpl_enable == 0) {
+ clxdat |= 0x1FE;
+ return;
+ }
+
+ for (i = 0; i < nr_sprites; i++) {
+ struct sprite_entry *e = curr_sprite_entries + first + i;
+ sprbuf_res_t j;
+ sprbuf_res_t minpos = e->pos;
+ sprbuf_res_t maxpos = e->max;
+ hwres_t minp1 = minpos >> sprite_buffer_res;
+ hwres_t maxp1 = maxpos >> sprite_buffer_res;
+
+ if (maxp1 > hw_diwlast)
+ maxpos = hw_diwlast << sprite_buffer_res;
+ if (maxp1 > thisline_decision.plfright * 2)
+ maxpos = thisline_decision.plfright * 2 << sprite_buffer_res;
+ if (minp1 < hw_diwfirst)
+ minpos = hw_diwfirst << sprite_buffer_res;
+ if (minp1 < thisline_decision.plfleft * 2)
+ minpos = thisline_decision.plfleft * 2 << sprite_buffer_res;
+
+ for (j = minpos; j < maxpos; j++) {
+ int sprpix = spixels[e->first_pixel + j - e->pos] & collision_mask;
+ int k, offs, match = 1;
+
+ if (sprpix == 0)
+ continue;
+
+ offs = ((j << bplres) >> sprite_buffer_res) - ddf_left;
+ sprpix = sprite_ab_merge[sprpix & 255] | (sprite_ab_merge[sprpix >> 8] << 2);
+ sprpix <<= 1;
+
+ /* Loop over number of playfields. */
+ for (k = 1; k >= 0; k--) {
+ int l;
+#ifdef AGA
+ int planes = (currprefs.chipset_mask & CSMASK_AGA) ? 8 : 6;
+#else
+ int planes = 6;
+#endif
+ if (bplcon0 & 0x400)
+ match = 1;
+ for (l = k; match && l < planes; l += 2) {
+ int t = 0;
+ if (l < thisline_decision.nr_planes) {
+ uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + 2 * l * MAX_WORDS_PER_LINE);
+ uae_u32 word = ldata[offs >> 5];
+ t = (word >> (31 - (offs & 31))) & 1;
+#if 0 /* debug: draw collision mask */
+ if (1) {
+ int m;
+ for (m = 0; m < 5; m++) {
+ ldata = (uae_u32 *)(line_data[next_lineno] + 2 * m * MAX_WORDS_PER_LINE);
+ ldata[(offs >> 5) + 1] |= 15 << (31 - (offs & 31));
+ }
+ }
+#endif
+ }
+ if (clxcon_bpl_enable & (1 << l)) {
+ if (t != ((clxcon_bpl_match >> l) & 1))
+ match = 0;
+ }
+ }
+ if (match) {
+#if 0 /* debug: mark lines where collisions are detected */
+ if (0) {
+ int l;
+ for (l = 0; l < 5; l++) {
+ uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + 2 * l * MAX_WORDS_PER_LINE);
+ ldata[(offs >> 5) + 1] |= 15 << (31 - (offs & 31));
+ }
+ }
+#endif
+ clxdat |= sprpix << (k * 4);
+ }
+ }
+ }
+ }
+#if 0
+ {
+ static int olx;
+ if (clxdat != olx)
+ write_log (L"%d: %04X\n", vpos, clxdat);
+ olx = clxdat;
+ }
+#endif
+}
+
+STATIC_INLINE void record_sprite_1 (int sprxp, uae_u16 *buf, uae_u32 datab, int num, int dbl,
+ unsigned int mask, int do_collisions, uae_u32 collision_mask)
+{
+ int j = 0;
+ while (datab) {
+ unsigned int col = 0;
+ unsigned coltmp = 0;
+
+ if ((sprxp >= sprite_minx && sprxp < sprite_maxx) || (bplcon3 & 2))
+ col = (datab & 3) << (2 * num);
+#if 0
+ if (sprxp == sprite_minx || sprxp == sprite_maxx - 1)
+ col ^= (rand () << 16) | rand ();
+#endif
+ if ((j & mask) == 0) {
+ unsigned int tmp = (*buf) | col;
+ *buf++ = tmp;
+ if (do_collisions)
+ coltmp |= tmp;
+ sprxp++;
+ }
+ if (dbl > 0) {
+ unsigned int tmp = (*buf) | col;
+ *buf++ = tmp;
+ if (do_collisions)
+ coltmp |= tmp;
+ sprxp++;
+ }
+ if (dbl > 1) {
+ unsigned int tmp;
+ tmp = (*buf) | col;
+ *buf++ = tmp;
+ if (do_collisions)
+ coltmp |= tmp;
+ tmp = (*buf) | col;
+ *buf++ = tmp;
+ if (do_collisions)
+ coltmp |= tmp;
+ sprxp++;
+ sprxp++;
+ }
+ j++;
+ datab >>= 2;
+ if (do_collisions) {
+ coltmp &= collision_mask;
+ if (coltmp) {
+ unsigned int shrunk_tmp = sprite_ab_merge[coltmp & 255] | (sprite_ab_merge[coltmp >> 8] << 2);
+ clxdat |= sprclx[shrunk_tmp];
+ }
+ }
+ }
+}
+
+/* DATAB contains the sprite data; 16 pixels in two-bit packets. Bits 0/1
+determine the color of the leftmost pixel, bits 2/3 the color of the next
+etc.
+This function assumes that for all sprites in a given line, SPRXP either
+stays equal or increases between successive calls.
+
+The data is recorded either in lores pixels (if OCS/ECS), or in hires or
+superhires pixels (if AGA). */
+
+static void record_sprite (int line, int num, int sprxp, uae_u16 *data, uae_u16 *datb, unsigned int ctl)
+{
+ struct sprite_entry *e = curr_sprite_entries + next_sprite_entry;
+ int i;
+ int word_offs;
+ uae_u32 collision_mask;
+ int width, dbl, half;
+ unsigned int mask = 0;
+ int attachment;
+
+ half = 0;
+ dbl = sprite_buffer_res - sprres;
+ if (dbl < 0) {
+ half = -dbl;
+ dbl = 0;
+ mask = 1 << half;
+ }
+ width = (sprite_width << sprite_buffer_res) >> sprres;
+ attachment = sprctl[num | 1] & 0x80;
+
+ /* Try to coalesce entries if they aren't too far apart */
+ if (!next_sprite_forced && e[-1].max + sprite_width >= sprxp) {
+ e--;
+ } else {
+ next_sprite_entry++;
+ e->pos = sprxp;
+ e->has_attached = 0;
+ }
+
+ if (sprxp < e->pos)
+ uae_abort (L"sprxp < e->pos");
+
+ e->max = sprxp + width;
+ e[1].first_pixel = e->first_pixel + ((e->max - e->pos + 3) & ~3);
+ next_sprite_forced = 0;
+
+ collision_mask = clxmask[clxcon >> 12];
+ word_offs = e->first_pixel + sprxp - e->pos;
+
+ for (i = 0; i < sprite_width; i += 16) {
+ unsigned int da = *data;
+ unsigned int db = *datb;
+ uae_u32 datab = ((sprtaba[da & 0xFF] << 16) | sprtaba[da >> 8]
+ | (sprtabb[db & 0xFF] << 16) | sprtabb[db >> 8]);
+ int off = (i << dbl) >> half;
+ uae_u16 *buf = spixels + word_offs + off;
+ if (currprefs.collision_level > 0 && collision_mask)
+ record_sprite_1 (sprxp + off, buf, datab, num, dbl, mask, 1, collision_mask);
+ else
+ record_sprite_1 (sprxp + off, buf, datab, num, dbl, mask, 0, collision_mask);
+ data++;
+ datb++;
+ }
+
+ /* We have 8 bits per pixel in spixstate, two for every sprite pair. The
+ low order bit records whether the attach bit was set for this pair. */
+ if (attachment && !ecsshres ()) {
+ uae_u32 state = 0x01010101 << (num & ~1);
+ uae_u8 *stb1 = spixstate.bytes + word_offs;
+ for (i = 0; i < width; i += 8) {
+ stb1[0] |= state;
+ stb1[1] |= state;
+ stb1[2] |= state;
+ stb1[3] |= state;
+ stb1[4] |= state;
+ stb1[5] |= state;
+ stb1[6] |= state;
+ stb1[7] |= state;
+ stb1 += 8;
+ }
+ e->has_attached = 1;
+ }
+}
+
+static void add_sprite (int *countp, int num, int sprxp, int posns[], int nrs[])
+{
+ int count = *countp;
+ int j, bestp;
+
+ /* Sort the sprites in order of ascending X position before recording them. */
+ for (bestp = 0; bestp < count; bestp++) {
+ if (posns[bestp] > sprxp)
+ break;
+ if (posns[bestp] == sprxp && nrs[bestp] < num)
+ break;
+ }
+ for (j = count; j > bestp; j--) {
+ posns[j] = posns[j - 1];
+ nrs[j] = nrs[j - 1];
+ }
+ posns[j] = sprxp;
+ nrs[j] = num;
+ count++;
+ *countp = count;
+}
+
+static int tospritexdiw (int diw)
+{
+ return coord_window_to_hw_x (diw - (DIW_DDF_OFFSET << lores_shift)) << sprite_buffer_res;
+}
+static int tospritexddf (int ddf)
+{
+ return (ddf * 2) << sprite_buffer_res;
+}
+static int fromspritexdiw (int ddf)
+{
+ return coord_hw_to_window_x (ddf >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift);
+}
+
+static void calcsprite (void)
+{
+ sprite_maxx = 0x7fff;
+ sprite_minx = 0;
+ if (thisline_decision.diwlastword >= 0)
+ sprite_maxx = tospritexdiw (thisline_decision.diwlastword);
+ if (thisline_decision.diwfirstword >= 0)
+ sprite_minx = tospritexdiw (thisline_decision.diwfirstword);
+ if (thisline_decision.plfleft >= 0) {
+ int min, max;
+ min = tospritexddf (thisline_decision.plfleft);
+ max = tospritexddf (thisline_decision.plfright);
+ if (min > sprite_minx && min < max) /* min < max = full line ddf */
+ sprite_minx = min;
+ /* sprites are visible from first BPL0DAT write to end of line
+ * (another undocumented feature)
+ */
+ }
+}
+
+static void decide_sprites (int hpos)
+{
+ int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2];
+ int count, i;
+ /* apparantly writes to custom registers happen in the 3/4th of cycle
+ * and sprite xpos comparator sees it immediately */
+ int point = hpos * 2 - 3;
+ int width = sprite_width;
+ int sscanmask = 0x100 << sprite_buffer_res;
+ int gotdata = 0;
+
+ if (thisline_decision.plfleft == -1 && !(bplcon3 & 2))
+ return;
+
+ if (nodraw () || hpos < 0x14 || nr_armed == 0 || point == last_sprite_point)
+ return;
+
+ decide_diw (hpos);
+ decide_line (hpos);
+ calcsprite ();
+
+ count = 0;
+ for (i = 0; i < MAX_SPRITES; i++) {
+ int sprxp = (fmode & 0x8000) ? (spr[i].xpos & ~sscanmask) : spr[i].xpos;
+ int hw_xp = sprxp >> sprite_buffer_res;
+
+ if (spr[i].xpos < 0)
+ continue;
+
+ if (!((debug_sprite_mask & magic_sprite_mask) & (1 << i)))
+ continue;
+
+ if (! spr[i].armed)
+ continue;
+
+ if (hw_xp > last_sprite_point && hw_xp <= point)
+ add_sprite (&count, i, sprxp, posns, nrs);
+
+ /* SSCAN2-bit is fun.. */
+ if ((fmode & 0x8000) && !(sprxp & sscanmask)) {
+ sprxp |= sscanmask;
+ hw_xp = sprxp >> sprite_buffer_res;
+ if (hw_xp > last_sprite_point && hw_xp <= point)
+ add_sprite (&count, MAX_SPRITES + i, sprxp, posns, nrs);
+ }
+ }
+
+ for (i = 0; i < count; i++) {
+ int nr = nrs[i] & (MAX_SPRITES - 1);
+ record_sprite (next_lineno, nr, posns[i], sprdata[nr], sprdatb[nr], sprctl[nr]);
+ /* get left and right sprite edge if brdsprt enabled */
+#if AUTOSCALE_SPRITES
+ if (dmaen (DMA_SPRITE) && (bplcon0 & 1) && (bplcon3 & 0x02) && !(bplcon3 & 0x20)) {
+ int j, jj;
+ for (j = 0, jj = 0; j < sprite_width; j+= 16, jj++) {
+ int nx = fromspritexdiw (posns[i] + j);
+ if (sprdata[nr][jj] || sprdatb[nr][jj]) {
+ if (diwfirstword_total > nx && nx >= (48 << currprefs.gfx_resolution))
+ diwfirstword_total = nx;
+ if (diwlastword_total < nx + 16 && nx <= (448 << currprefs.gfx_resolution))
+ diwlastword_total = nx + 16;
+ }
+ }
+ gotdata = 1;
+ }
+#endif
+ }
+ last_sprite_point = point;
+
+#if AUTOSCALE_SPRITES
+ /* get upper and lower sprite position if brdsprt enabled */
+ if (gotdata) {
+ if (vpos < first_planes_vpos)
+ first_planes_vpos = vpos;
+ if (vpos < plffirstline_total)
+ plffirstline_total = vpos;
+ if (vpos > last_planes_vpos)
+ last_planes_vpos = vpos;
+ if (vpos > plflastline_total)
+ plflastline_total = vpos;
+ }
+#endif
+}
+
+STATIC_INLINE int sprites_differ (struct draw_info *dip, struct draw_info *dip_old)
+{
+ struct sprite_entry *this_first = curr_sprite_entries + dip->first_sprite_entry;
+ struct sprite_entry *this_last = curr_sprite_entries + dip->last_sprite_entry;
+ struct sprite_entry *prev_first = prev_sprite_entries + dip_old->first_sprite_entry;
+ int npixels;
+ int i;
+
+ if (dip->nr_sprites != dip_old->nr_sprites)
+ return 1;
+
+ if (dip->nr_sprites == 0)
+ return 0;
+
+ for (i = 0; i < dip->nr_sprites; i++)
+ if (this_first[i].pos != prev_first[i].pos
+ || this_first[i].max != prev_first[i].max
+ || this_first[i].has_attached != prev_first[i].has_attached)
+ return 1;
+
+ npixels = this_last->first_pixel + (this_last->max - this_last->pos) - this_first->first_pixel;
+ if (memcmp (spixels + this_first->first_pixel, spixels + prev_first->first_pixel,
+ npixels * sizeof (uae_u16)) != 0)
+ return 1;
+ if (memcmp (spixstate.bytes + this_first->first_pixel, spixstate.bytes + prev_first->first_pixel, npixels) != 0)
+ return 1;
+ return 0;
+}
+
+STATIC_INLINE int color_changes_differ (struct draw_info *dip, struct draw_info *dip_old)
+{
+ if (dip->nr_color_changes != dip_old->nr_color_changes)
+ return 1;
+
+ if (dip->nr_color_changes == 0)
+ return 0;
+ if (memcmp (curr_color_changes + dip->first_color_change,
+ prev_color_changes + dip_old->first_color_change,
+ dip->nr_color_changes * sizeof *curr_color_changes) != 0)
+ return 1;
+ return 0;
+}
+
+/* End of a horizontal scan line. Finish off all decisions that were not
+* made yet. */
+static void finish_decisions (void)
+{
+ struct draw_info *dip;
+ struct draw_info *dip_old;
+ struct decision *dp;
+ int changed;
+ int hpos = maxhpos;
+
+ if (nodraw ())
+ return;
+
+ decide_diw (hpos);
+ decide_line (hpos);
+ decide_fetch (hpos);
+
+ if (thisline_decision.plfleft != -1 && thisline_decision.plflinelen == -1) {
+ if (fetch_state != fetch_not_started) {
+ write_log (L"fetch_state=%d plfleft=%d,len=%d,vpos=%d,hpos=%d\n",
+ fetch_state, thisline_decision.plfleft, thisline_decision.plflinelen,
+ vpos, hpos);
+ uae_abort (L"fetch_state != fetch_not_started");
+ }
+ thisline_decision.plfright = thisline_decision.plfleft;
+ thisline_decision.plflinelen = 0;
+ thisline_decision.bplres = RES_LORES;
+ }
+
+ /* Large DIWSTOP values can cause the stop position never to be
+ * reached, so the state machine always stays in the same state and
+ * there's a more-or-less full-screen DIW. */
+ if (hdiwstate == DIW_waiting_stop || thisline_decision.diwlastword > max_diwlastword)
+ thisline_decision.diwlastword = max_diwlastword;
+
+ if (thisline_decision.diwfirstword != line_decisions[next_lineno].diwfirstword)
+ MARK_LINE_CHANGED;
+ if (thisline_decision.diwlastword != line_decisions[next_lineno].diwlastword)
+ MARK_LINE_CHANGED;
+
+ dip = curr_drawinfo + next_lineno;
+ dip_old = prev_drawinfo + next_lineno;
+ dp = line_decisions + next_lineno;
+ changed = thisline_changed;
+ if (thisline_decision.plfleft != -1 && thisline_decision.nr_planes > 0)
+ record_diw_line (thisline_decision.plfleft, diwfirstword, diwlastword);
+
+ decide_sprites (hpos + 1);
+
+ dip->last_sprite_entry = next_sprite_entry;
+ dip->last_color_change = next_color_change;
+
+ if (thisline_decision.ctable == -1) {
+ if (thisline_decision.plfleft == -1)
+ remember_ctable_for_border ();
+ else
+ remember_ctable ();
+ }
+
+ dip->nr_color_changes = next_color_change - dip->first_color_change;
+ dip->nr_sprites = next_sprite_entry - dip->first_sprite_entry;
+
+ if (thisline_decision.plfleft != line_decisions[next_lineno].plfleft)
+ changed = 1;
+ if (! changed && color_changes_differ (dip, dip_old))
+ changed = 1;
+ if (!changed && thisline_decision.plfleft != -1 && sprites_differ (dip, dip_old))
+ changed = 1;
+
+ if (changed) {
+ thisline_changed = 1;
+ *dp = thisline_decision;
+ } else
+ /* The only one that may differ: */
+ dp->ctable = thisline_decision.ctable;
+
+ /* leave free space for possible extra color changes at the end of line */
+ next_color_change += (HBLANK_OFFSET + 1) / 2;
+}
+
+/* Set the state of all decisions to "undecided" for a new scanline. */
+static void reset_decisions (void)
+{
+ if (nodraw ())
+ return;
+
+ toscr_nr_planes = toscr_nr_planes2 = 0;
+ thisline_decision.bplres = bplcon0_res;
+ thisline_decision.nr_planes = 0;
+ bpl1dat_written = 0;
+ bpl1dat_early = 0;
+
+ plfleft_real = -1;
+ thisline_decision.plfleft = -1;
+ thisline_decision.plflinelen = -1;
+ thisline_decision.ham_seen = !! (bplcon0 & 0x800);
+ thisline_decision.ehb_seen = !! isehb (bplcon0, bplcon2);
+ thisline_decision.ham_at_start = !! (bplcon0 & 0x800);
+
+ /* decided_res shouldn't be touched before it's initialized by decide_line(). */
+ thisline_decision.diwfirstword = -1;
+ thisline_decision.diwlastword = -1;
+ if (hdiwstate == DIW_waiting_stop) {
+ thisline_decision.diwfirstword = 0;
+ if (thisline_decision.diwfirstword != line_decisions[next_lineno].diwfirstword)
+ MARK_LINE_CHANGED;
+ }
+ thisline_decision.ctable = -1;
+
+ thisline_changed = 0;
+ curr_drawinfo[next_lineno].first_color_change = next_color_change;
+ curr_drawinfo[next_lineno].first_sprite_entry = next_sprite_entry;
+ next_sprite_forced = 1;
+
+ last_sprite_point = 0;
+ fetch_state = fetch_not_started;
+ bplcon1_hpos = -1;
+ if (bpldmasetuphpos >= 0) {
+ // this can happen in "too fast" modes
+ BPLCON0_Denise (0, bplcon0);
+ setup_fmodes (0);
+ }
+ bpldmasetuphpos = -1;
+ bpldmasetupphase = 0;
+ ddfstrt_old_hpos = -1;
+
+ if (plf_state > plf_active)
+ plf_state = plf_idle;
+ if (plf_state == plf_active && !(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ plf_state = plf_idle;
+
+ memset (todisplay, 0, sizeof todisplay);
+ memset (fetched, 0, sizeof fetched);
+#ifdef AGA
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ memset (fetched_aga0, 0, sizeof fetched_aga0);
+ memset (fetched_aga1, 0, sizeof fetched_aga1);
+ }
+#endif
+ memset (outword, 0, sizeof outword);
+
+ last_decide_line_hpos = -1;
+ last_sprite_decide_line_hpos = -1;
+ last_diw_pix_hpos = -1;
+ last_ddf_pix_hpos = -1;
+ last_sprite_hpos = -1;
+ last_fetch_hpos = -1;
+
+ /* These are for comparison. */
+ thisline_decision.bplcon0 = bplcon0;
+ thisline_decision.bplcon2 = bplcon2;
+#ifdef ECS_DENISE
+ thisline_decision.bplcon3 = bplcon3;
+#endif
+#ifdef AGA
+ thisline_decision.bplcon4 = bplcon4;
+#endif
+}
+
+static int islinetoggle (void)
+{
+ int linetoggle = 0;
+ if (!(beamcon0 & 0x0800) && !(beamcon0 & 0x0020) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) {
+ linetoggle = 1; // NTSC and !LOLDIS -> LOL toggles every line
+ } else if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS) && currprefs.ntscmode) {
+ linetoggle = 1; // hardwired NTSC Agnus
+ }
+ return linetoggle;
+}
+
+static int isvsync (void)
+{
+ if (!currprefs.gfx_afullscreen || picasso_on || !currprefs.gfx_avsync)
+ return 0;
+ return currprefs.gfx_avsync;
+}
+
+int vsynctime_orig;
+
+void compute_vsynctime (void)
+{
+ fake_vblank_hz = 0;
+ if (currprefs.chipset_refreshrate) {
+ vblank_hz = currprefs.chipset_refreshrate;
+ if (isvsync ()) {
+ vblank_skip = 1;
+ if (!fake_vblank_hz && getvsyncrate (vblank_hz) != vblank_hz) {
+ vblank_hz = getvsyncrate (vblank_hz);
+ vblank_skip = -1;
+ }
+ }
+ }
+ if (!fake_vblank_hz)
+ fake_vblank_hz = vblank_hz;
+ if (currprefs.turbo_emulation)
+ vsynctime = vsynctime_orig = 1;
+ else
+ vsynctime = vsynctime_orig = syncbase / fake_vblank_hz;
+ if (!picasso_on) {
+#ifdef OPENGL
+ OGL_refresh ();
+#endif
+#ifdef D3D
+ D3D_refresh ();
+#endif
+ }
+ if (currprefs.produce_sound > 1)
+ update_sound (fake_vblank_hz, (bplcon0 & 4) ? -1 : lof, islinetoggle ());
+}
+
+
+static void dumpsync (void)
+{
+ static int cnt = 100;
+ if (cnt < 0)
+ return;
+ cnt--;
+ write_log (L"BEAMCON0=%04X VTOTAL=%04X HTOTAL=%04X\n", new_beamcon0, vtotal, htotal);
+ write_log (L"HSSTOP=%04X HBSTRT=%04X HBSTOP=%04X\n", hsstop, hbstrt, hbstop);
+ write_log (L"VSSTOP=%04X VBSTRT=%04X VBSTOP=%04X\n", vsstop, vbstrt, vbstop);
+ write_log (L"HSSTRT=%04X VSSTRT=%04X HCENTER=%04X\n", hsstrt, vsstrt, hcenter);
+}
+
+/* set PAL/NTSC or custom timing variables */
+void init_hz (void)
+{
+ int isntsc;
+ int odbl = doublescan, omaxvpos = maxvpos;
+ int hzc = 0;
+
+ if (vsync_switchmode (-1, 0) > 0)
+ currprefs.gfx_avsync = changed_prefs.gfx_avsync = vsync_switchmode (-1, 0);
+
+ if (!isvsync () && ((currprefs.chipset_refreshrate == 50 && !currprefs.ntscmode) ||
+ (currprefs.chipset_refreshrate == 60 && currprefs.ntscmode))) {
+ currprefs.chipset_refreshrate = changed_prefs.chipset_refreshrate = 0;
+ }
+
+ doublescan = 0;
+ if ((beamcon0 & 0xA0) != (new_beamcon0 & 0xA0))
+ hzc = 1;
+ if (beamcon0 != new_beamcon0) {
+ hack_vpos = 0;
+ write_log (L"BEAMCON0 %04x -> %04x\n", beamcon0, new_beamcon0);
+ }
+ if (beamcon0 & 0x80)
+ hack_vpos = -1;
+ beamcon0 = new_beamcon0;
+ isntsc = (beamcon0 & 0x20) ? 0 : 1;
+ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ isntsc = currprefs.ntscmode ? 1 : 0;
+ if (hack_vpos > 0) {
+ if (maxvpos == hack_vpos) {
+ hack_vpos = -1;
+ return;
+ }
+ maxvpos = hack_vpos;
+ vblank_hz = 15600 / hack_vpos;
+ hack_vpos = -1;
+ } else if (hack_vpos < 0) {
+ hack_vpos = 0;
+ }
+ if (hack_vpos == 0) {
+ if (!isntsc) {
+ maxvpos = MAXVPOS_PAL;
+ maxhpos = MAXHPOS_PAL;
+ minfirstline = VBLANK_ENDLINE_PAL;
+ vblank_hz = VBLANK_HZ_PAL;
+ sprite_vblank_endline = VBLANK_SPRITE_PAL;
+ } else {
+ maxvpos = MAXVPOS_NTSC;
+ maxhpos = MAXHPOS_NTSC;
+ minfirstline = VBLANK_ENDLINE_NTSC;
+ vblank_hz = VBLANK_HZ_NTSC;
+ sprite_vblank_endline = VBLANK_SPRITE_NTSC;
+ }
+ maxvpos_max = maxvpos;
+ }
+ if (beamcon0 & 0x80) {
+ if (vtotal >= MAXVPOS)
+ vtotal = MAXVPOS - 1;
+ maxvpos = vtotal + 1;
+ if (htotal >= MAXHPOS)
+ htotal = MAXHPOS - 1;
+ maxhpos = htotal + 1;
+ vblank_hz = 227 * 312 * 50 / (maxvpos * maxhpos);
+ minfirstline = vsstop;
+ if (minfirstline < 2)
+ minfirstline = 2;
+ if (minfirstline >= maxvpos)
+ minfirstline = maxvpos - 1;
+ sprite_vblank_endline = minfirstline - 2;
+ maxvpos_max = maxvpos;
+ doublescan = htotal <= 164 ? 1 : 0;
+ dumpsync ();
+ hzc = 1;
+ }
+ if (currprefs.gfx_scandoubler && doublescan == 0)
+ doublescan = -1;
+ if (doublescan != odbl || maxvpos != omaxvpos)
+ hzc = 1;
+ /* limit to sane values */
+ if (vblank_hz < 10)
+ vblank_hz = 10;
+ if (vblank_hz > 300)
+ vblank_hz = 300;
+ maxhpos_short = maxhpos;
+ eventtab[ev_hsync].oldcycles = get_cycles ();
+ eventtab[ev_hsync].evtime = get_cycles() + HSYNCTIME;
+ events_schedule ();
+ if (hzc) {
+ interlace_seen = (bplcon0 & 4) ? 1 : 0;
+ reset_drawing ();
+ }
+ if ((vblank_hz == 50 || vblank_hz == 60) && isvsync () == 2) {
+ if (getvsyncrate (currprefs.gfx_refreshrate) != vblank_hz)
+ vsync_switchmode (vblank_hz, currprefs.gfx_refreshrate);
+ }
+ if (isvsync ()) {
+ changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = abs (currprefs.gfx_refreshrate);
+ }
+
+ compute_vsynctime ();
+#ifdef OPENGL
+ OGL_refresh ();
+#endif
+#ifdef PICASSO96
+ init_hz_p96 ();
+#endif
+ inputdevice_tablet_strobe ();
+ write_log (L"%s mode%s%s V=%dHz H=%dHz (%dx%d)\n",
+ isntsc ? L"NTSC" : L"PAL",
+ (bplcon0 & 4) ? L" interlaced" : L"",
+ doublescan > 0 ? L" dblscan" : L"",
+ vblank_hz, vblank_hz * maxvpos,
+ maxhpos, maxvpos);
+
+}
+
+static void calcdiw (void)
+{
+ int hstrt = diwstrt & 0xFF;
+ int hstop = diwstop & 0xFF;
+ int vstrt = diwstrt >> 8;
+ int vstop = diwstop >> 8;
+
+ if (diwhigh_written) {
+ hstrt |= ((diwhigh >> 5) & 1) << 8;
+ hstop |= ((diwhigh >> 13) & 1) << 8;
+ vstrt |= (diwhigh & 7) << 8;
+ vstop |= ((diwhigh >> 8) & 7) << 8;
+ } else {
+ hstop += 0x100;
+ if ((vstop & 0x80) == 0)
+ vstop |= 0x100;
+ }
+
+ diwfirstword = coord_diw_to_window_x (hstrt);
+ diwlastword = coord_diw_to_window_x (hstop);
+ if (diwfirstword >= diwlastword) {
+ diwfirstword = 0;
+ diwlastword = max_diwlastword;
+ }
+ if (diwfirstword < 0)
+ diwfirstword = 0;
+
+ plffirstline = vstrt;
+ plflastline = vstop;
+
+ plfstrt = ddfstrt;
+ plfstop = ddfstop;
+ /* probably not the correct place.. should use plf_state instead */
+ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
+ /* ECS/AGA and ddfstop > maxhpos == always-on display */
+ if (plfstop > maxhpos)
+ plfstrt = 0;
+ if (plfstrt < HARD_DDF_START)
+ plfstrt = HARD_DDF_START;
+ plfstrt_start = plfstrt - 4;
+ } else {
+ /* OCS and ddfstrt >= ddfstop == ddfstop = max */
+ if (plfstrt >= plfstop && plfstrt >= HARD_DDF_START)
+ plfstop = 0xff;
+ plfstrt_start = HARD_DDF_START - 2;
+ }
+ diw_change = 2;
+}
+
+/* display mode changed (lores, doubling etc..), recalculate everything */
+void init_custom (void)
+{
+ update_mirrors();
+ create_cycle_diagram_table ();
+ reset_drawing ();
+ init_hz ();
+ calcdiw ();
+}
+
+static int timehack_alive = 0;
+
+static uae_u32 REGPARAM2 timehack_helper (TrapContext *context)
+{
+#ifdef HAVE_GETTIMEOFDAY
+ struct timeval tv;
+ if (m68k_dreg (regs, 0) == 0)
+ return timehack_alive;
+
+ timehack_alive = 10;
+
+ gettimeofday (&tv, NULL);
+ put_long (m68k_areg (regs, 0), tv.tv_sec - (((365 * 8 + 2) * 24) * 60 * 60));
+ put_long (m68k_areg (regs, 0) + 4, tv.tv_usec);
+ return 0;
+#else
+ return 2;
+#endif
+}
+
+/*
+* register functions
+*/
+STATIC_INLINE uae_u16 DENISEID (void)
+{
+ if (currprefs.cs_deniserev >= 0)
+ return currprefs.cs_deniserev;
+#ifdef AGA
+ if (currprefs.chipset_mask & CSMASK_AGA)
+ return 0xF8;
+#endif
+ if (currprefs.chipset_mask & CSMASK_ECS_DENISE)
+ return 0xFC;
+ return 0xffff;
+}
+STATIC_INLINE uae_u16 DMACONR (int hpos)
+{
+ decide_line (hpos);
+ decide_fetch (hpos);
+ decide_blitter (hpos);
+ dmacon &= ~(0x4000 | 0x2000);
+ dmacon |= (blit_interrupt || (!blit_interrupt && currprefs.cs_agnusbltbusybug && !blt_info.got_cycle) ? 0 : 0x4000)
+ | (blt_info.blitzero ? 0x2000 : 0);
+ return dmacon;
+}
+STATIC_INLINE uae_u16 INTENAR (void)
+{
+ return intena;
+}
+uae_u16 INTREQR (void)
+{
+ return intreqr;
+}
+STATIC_INLINE uae_u16 ADKCONR (void)
+{
+ return adkcon;
+}
+
+STATIC_INLINE int islightpentriggered (void)
+{
+ if (beamcon0 & 0x2000) // LPENDIS
+ return 0;
+ return lightpen_triggered > 0;
+}
+STATIC_INLINE int issyncstopped (void)
+{
+ return (bplcon0 & 2) && !currprefs.genlock;
+}
+
+STATIC_INLINE int GETVPOS (void)
+{
+ return islightpentriggered () ? vpos_lpen : (issyncstopped () ? vpos_previous : vpos);
+}
+STATIC_INLINE int GETHPOS (void)
+{
+ return islightpentriggered () ? hpos_lpen : (issyncstopped () ? hpos_previous : current_hpos ());
+}
+
+#define HPOS_OFFSET 3
+
+STATIC_INLINE uae_u16 VPOSR (void)
+{
+ unsigned int csbit = 0;
+ uae_u16 vp = GETVPOS ();
+ uae_u16 hp = GETHPOS ();
+
+ if (hp + HPOS_OFFSET >= maxhpos) {
+ vp++;
+ if (vp >= maxvpos + lof)
+ vp = 0;
+ }
+ vp = (vp >> 8) & 7;
+
+ if (currprefs.cs_agnusrev >= 0) {
+ csbit |= currprefs.cs_agnusrev << 8;
+ } else {
+#ifdef AGA
+ csbit |= (currprefs.chipset_mask & CSMASK_AGA) ? 0x2300 : 0;
+#endif
+ csbit |= (currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0x2000 : 0;
+ if (currprefs.chipmem_size > 1024 * 1024 && (currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ csbit |= 0x2100;
+ if (currprefs.ntscmode)
+ csbit |= 0x1000;
+ }
+
+ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ vp &= 1;
+ vp = vp | (lof ? 0x8000 : 0) | csbit;
+ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS)
+ vp |= lol ? 0x80 : 0;
+#if 0
+ if (M68K_GETPC < 0xf00000)
+ write_log (L"VPOSR %04x at %08x\n", vp, M68K_GETPC);
+#endif
+ if (currprefs.cpu_model >= 68020)
+ hsyncdelay ();
+ return vp;
+}
+
+static void VPOSW (uae_u16 v)
+{
+#if 0
+ if (M68K_GETPC < 0xf00000)
+ write_log (L"VPOSW %04X PC=%08x\n", v, M68K_GETPC);
+#endif
+ if (lof != ((v & 0x8000) ? 1 : 0))
+ lof_changed = 1;
+ lof = (v & 0x8000) ? 1 : 0;
+ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS)
+ lol = (v & 0x0080) ? 1 : 0;
+ hack_vpos2 = (vpos & 0xff);
+ if (v & 1)
+ hack_vpos2 |= 0x100;
+ hack_vpos2vpos = vpos;
+ if (hack_vpos2 > maxvpos)
+ hack_vpos2 = maxvpos;
+ // do not allow changing vpos backwards or vsync may never happen..
+ if (vpos < hack_vpos2)
+ vpos = hack_vpos2;
+}
+
+static void VHPOSW (uae_u16 v)
+{
+#if 0
+ if (M68K_GETPC < 0xf00000)
+ write_log (L"VHPOSW %04X PC=%08x\n", v, M68K_GETPC);
+#endif
+ v >>= 8;
+ if (hack_vpos2 & 0x100)
+ v |= 0x100;
+ else if (vpos & 0x100)
+ v |= 0x100;
+ hack_vpos2 = v;
+ hack_vpos2vpos = vpos;
+ if (hack_vpos2 > maxvpos)
+ hack_vpos2 = maxvpos;
+ if (vpos < hack_vpos2)
+ vpos = hack_vpos2;
+}
+
+STATIC_INLINE uae_u16 VHPOSR (void)
+{
+ uae_u16 vp = GETVPOS ();
+ uae_u16 hp = GETHPOS ();
+
+ hp += HPOS_OFFSET;
+ if (hp >= maxhpos) {
+ hp -= maxhpos;
+ vp++;
+ if (vp >= maxvpos + lof)
+ vp = 0;
+ }
+ hp += 1;
+ if (hp >= maxhpos)
+ hp -= maxhpos;
+
+ vp <<= 8;
+ vp |= hp;
+ if (currprefs.cpu_model >= 68020)
+ hsyncdelay ();
+#if 0
+ if (M68K_GETPC < 0xf00000 && (vpos >= maxhpos || vpos <= 1))
+ write_log (L"VPOS %04x %04x at %08x\n", VPOSR (), vp, M68K_GETPC);
+#endif
+ return vp;
+}
+
+static int test_copper_dangerous (unsigned int address)
+{
+ if ((address & 0x1fe) < ((copcon & 2) ? ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0 : 0x40) : 0x80)) {
+ cop_state.state = COP_stop;
+ copper_enabled_thisline = 0;
+ unset_special (SPCFLAG_COPPER);
+ return 1;
+ }
+ return 0;
+}
+
+static void immediate_copper (int num)
+{
+ int pos = 0;
+ int oldpos = 0;
+
+ cop_state.state = COP_stop;
+ cop_state.vpos = vpos;
+ cop_state.hpos = current_hpos () & ~1;
+ cop_state.ip = num == 1 ? cop1lc : cop2lc;
+
+ while (pos < (maxvpos << 5)) {
+ if (oldpos > pos)
+ pos = oldpos;
+ if (!dmaen(DMA_COPPER))
+ break;
+ if (cop_state.ip >= currprefs.chipmem_size)
+ break;
+ pos++;
+ oldpos = pos;
+ cop_state.i1 = chipmem_agnus_wget (cop_state.ip);
+ cop_state.i2 = chipmem_agnus_wget (cop_state.ip + 2);
+ cop_state.ip += 4;
+ if (!(cop_state.i1 & 1)) { // move
+ cop_state.i1 &= 0x1fe;
+ if (cop_state.i1 == 0x88) {
+ cop_state.ip = cop1lc;
+ continue;
+ }
+ if (cop_state.i1 == 0x8a) {
+ cop_state.ip = cop2lc;
+ continue;
+ }
+ if (test_copper_dangerous (cop_state.i1))
+ break;
+ custom_wput_1 (0, cop_state.i1, cop_state.i2, 0);
+ } else { // wait or skip
+ if ((cop_state.i1 >> 8) > ((pos >> 5) & 0xff))
+ pos = (((pos >> 5) & 0x100) | ((cop_state.i1 >> 8)) << 5) | ((cop_state.i1 & 0xff) >> 3);
+ if (cop_state.i1 >= 0xffdf && cop_state.i2 == 0xfffe)
+ break;
+ }
+ }
+ cop_state.state = COP_stop;
+ unset_special (SPCFLAG_COPPER);
+}
+
+STATIC_INLINE void COP1LCH (uae_u16 v)
+{
+ cop1lc = (cop1lc & 0xffff) | ((uae_u32)v << 16);
+}
+STATIC_INLINE void COP1LCL (uae_u16 v)
+{
+ cop1lc = (cop1lc & ~0xffff) | (v & 0xfffe);
+}
+STATIC_INLINE void COP2LCH (uae_u16 v)
+{
+ cop2lc = (cop2lc & 0xffff) | ((uae_u32)v << 16);
+}
+STATIC_INLINE void COP2LCL (uae_u16 v)
+{
+ cop2lc = (cop2lc & ~0xffff) | (v & 0xfffe);
+}
+
+static void compute_spcflag_copper (int hpos);
+
+// vblank = copper starts at hpos=2
+// normal COPJMP write: takes 2 more cycles
+static void COPJMP (int num, int vblank)
+{
+ int oldstrobe = cop_state.strobe;
+
+#if CUSTOM_DEBUG > 0
+ if (dmaen (DMA_COPPER) && (cop_state.saved_i1 != 0xffff || cop_state.saved_i2 != 0xfffe))
+ write_log (L"vblank without copper ending %08x (%08x %08x)\n", cop_state.ip, cop1lc, cop2lc);
+#endif
+
+ unset_special (SPCFLAG_COPPER);
+ cop_state.ignore_next = 0;
+ if (!oldstrobe)
+ cop_state.state_prev = cop_state.state;
+ cop_state.state = vblank ? COP_start_delay : (copper_access ? COP_strobe_delay1 : COP_strobe_extra);
+ cop_state.vpos = vpos;
+ cop_state.hpos = current_hpos () & ~1;
+ copper_enabled_thisline = 0;
+ cop_state.strobe = num;
+
+ if (nocustom ()) {
+ immediate_copper (num);
+ return;
+ }
+
+ if (dmaen (DMA_COPPER)) {
+ compute_spcflag_copper (current_hpos ());
+ } else if (oldstrobe > 0 && oldstrobe != num && cop_state.state_prev == COP_wait) {
+ /* dma disabled, copper idle and accessed both COPxJMPs -> copper stops! */
+ cop_state.state = COP_stop;
+ }
+}
+
+STATIC_INLINE void COPCON (uae_u16 a)
+{
+ copcon = a;
+}
+
+static void DMACON (int hpos, uae_u16 v)
+{
+ int oldcop, newcop;
+ uae_u16 changed;
+
+ uae_u16 oldcon = dmacon;
+
+ decide_line (hpos);
+ decide_fetch (hpos);
+ decide_blitter (hpos);
+
+ setclr (&dmacon, v);
+ dmacon &= 0x1FFF;
+
+ changed = dmacon ^ oldcon;
+
+ oldcop = (oldcon & DMA_COPPER) && (oldcon & DMA_MASTER);
+ newcop = (dmacon & DMA_COPPER) && (dmacon & DMA_MASTER);
+
+ if (oldcop != newcop) {
+ if (newcop && !oldcop) {
+ compute_spcflag_copper (hpos);
+ } else if (!newcop) {
+ copper_enabled_thisline = 0;
+ unset_special (SPCFLAG_COPPER);
+ }
+ }
+ if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done)
+ set_special (SPCFLAG_BLTNASTY);
+
+ if (dmaen (DMA_BLITTER) && bltstate == BLT_init)
+ bltstate = BLT_work;
+
+ if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER))
+ unset_special (SPCFLAG_BLTNASTY);
+
+ if (changed & (DMA_MASTER | 0x0f))
+ audio_hsync (hpos);
+
+ if (changed & (DMA_MASTER | DMA_BITPLANE)) {
+ ddf_change = vpos;
+ if (dmaen (DMA_BITPLANE))
+ maybe_start_bpl_dma (hpos);
+ }
+
+ events_schedule();
+}
+
+static int irq_nmi;
+
+void NMI_delayed (void)
+{
+ irq_nmi = 1;
+}
+
+int intlev (void)
+{
+ uae_u16 imask = intreq & intena;
+ if (irq_nmi) {
+ irq_nmi = 0;
+ return 7;
+ }
+ if (!(imask && (intena & 0x4000)))
+ return -1;
+ if (imask & (0x4000 | 0x2000)) // 13 14
+ return 6;
+ if (imask & (0x1000 | 0x0800)) // 11 12
+ return 5;
+ if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) // 7 8 9 10
+ return 4;
+ if (imask & (0x0040 | 0x0020 | 0x0010)) // 4 5 6
+ return 3;
+ if (imask & 0x0008) // 3
+ return 2;
+ if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2
+ return 1;
+ return -1;
+}
+
+STATIC_INLINE int use_eventmode (void)
+{
+ return currprefs.cpu_cycle_exact != 0;
+}
+
+STATIC_INLINE void INTENA (uae_u16 v)
+{
+ setclr (&intena,v);
+#if 0
+ if (v & 0x40)
+ write_log (L"INTENA %04X (%04X) %p\n", intena, v, M68K_GETPC);
+#endif
+ if (v & 0x8000) {
+ if (use_eventmode ())
+ prepare_interrupt ();
+ doint ();
+ }
+}
+
+void INTREQ_0 (uae_u16 v)
+{
+ intreqr = intreq;
+ /* data in intreq is immediately available (vsync only currently because there is something unknown..) */
+ setclr (&intreqr, v & (0x8000 | 0x20));
+
+ if (use_eventmode ())
+ prepare_interrupt ();
+ if (v & (0x80 | 0x100 | 0x200 | 0x400))
+ audio_update_irq (v);
+ setclr (&intreq, v);
+ intreqr = intreq;
+ doint ();
+}
+
+void INTREQ (uae_u16 data)
+{
+ INTREQ_0 (data);
+ serial_check_irq ();
+ rethink_cias ();
+#ifdef A2065
+ rethink_a2065 ();
+#endif
+#ifdef A2091
+ rethink_a2091 ();
+#endif
+#ifdef CDTV
+ rethink_cdtv ();
+#endif
+#ifdef CD32
+ rethink_akiko ();
+#endif
+ rethink_gayle ();
+}
+
+static void ADKCON (int hpos, uae_u16 v)
+{
+ if (currprefs.produce_sound > 0)
+ update_audio ();
+
+ setclr (&adkcon,v);
+ audio_update_adkmasks ();
+ DISK_update (hpos);
+ if ((v >> 11) & 1)
+ serial_uartbreak ((adkcon >> 11) & 1);
+}
+
+static void BEAMCON0 (uae_u16 v)
+{
+ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
+ if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE))
+ v &= 0x20;
+ if (v != new_beamcon0) {
+ new_beamcon0 = v;
+ if (v & ~0x20)
+ write_log (L"warning: %04X written to BEAMCON0 PC=%08X\n", v, M68K_GETPC);
+ }
+ }
+}
+
+#ifndef CUSTOM_SIMPLE
+
+static void varsync (void)
+{
+#ifdef PICASSO96
+ if (p96refresh_active)
+ {
+ extern int p96hack_vpos2;
+ static int p96hack_vpos_old;
+ if (p96hack_vpos_old == p96hack_vpos2) return;
+ vtotal = p96hack_vpos2;
+ p96hack_vpos_old = p96hack_vpos2;
+ hack_vpos = -1;
+ return;
+ }
+#endif
+ if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE))
+ return;
+ if (!(beamcon0 & 0x80))
+ return;
+ hack_vpos = -1;
+ dumpsync ();
+}
+#endif
+
+static void BPLxPTH (int hpos, uae_u16 v, int num)
+{
+ decide_line (hpos);
+ decide_fetch (hpos);
+ bplpt[num] = (bplpt[num] & 0x0000ffff) | ((uae_u32)v << 16);
+ bplptx[num] = (bplptx[num] & 0x0000ffff) | ((uae_u32)v << 16);
+ //write_log (L"%d:%d:BPL%dPTH %08X COP=%08x\n", hpos, vpos, num, bplpt[num], cop_state.ip);
+}
+static void BPLxPTL (int hpos, uae_u16 v, int num)
+{
+ decide_line (hpos);
+ decide_fetch (hpos);
+ bplpt[num] = (bplpt[num] & 0xffff0000) | (v & 0x0000fffe);
+ bplptx[num] = (bplptx[num] & 0xffff0000) | (v & 0x0000fffe);
+ //write_log (L"%d:%d:BPL%dPTL %08X COP=%08x\n", hpos, vpos, num, bplpt[num], cop_state.ip);
+}
+
+static void BPLCON0_Denise (int hpos, uae_u16 v)
+{
+ if (! (currprefs.chipset_mask & CSMASK_ECS_DENISE))
+ v &= ~0x00F1;
+ else if (! (currprefs.chipset_mask & CSMASK_AGA))
+ v &= ~0x00B1;
+ v &= ~(0x0200 | 0x0100 | 0x0080 | 0x0020);
+#if SPRBORDER
+ v |= 1;
+#endif
+
+ if (bplcon0d == v)
+ return;
+
+ bplcon0dd = -1;
+ // fake unused 0x0080 bit as an EHB bit (see below)
+ if (isehb (bplcon0d, bplcon2))
+ v |= 0x80;
+
+ record_register_change (hpos, 0x100, (bplcon0d & ~(0x800 | 0x400 | 0x80)) | (v & (0x0800 | 0x400 | 0x80)));
+
+ bplcon0d = v & ~0x80;
+
+#ifdef ECS_DENISE
+ if (currprefs.chipset_mask & CSMASK_ECS_DENISE) {
+ decide_sprites (hpos);
+ sprres = expand_sprres (v, bplcon3);
+ }
+#endif
+ if (thisline_decision.plfleft == -1)
+ update_denise (hpos);
+}
+
+static void BPLCON0 (int hpos, uae_u16 v)
+{
+ if (! (currprefs.chipset_mask & CSMASK_ECS_DENISE))
+ v &= ~0x00F1;
+ else if (! (currprefs.chipset_mask & CSMASK_AGA))
+ v &= ~0x00B1;
+ v &= ~(0x0200 | 0x0100 | 0x0080 | 0x0020);
+
+#if SPRBORDER
+ v |= 1;
+#endif
+ if (bplcon0 == v)
+ return;
+
+ if (!issyncstopped ()) {
+ vpos_previous = vpos;
+ hpos_previous = hpos;
+ }
+
+ bplcon0 = v;
+
+ bpldmainitdelay (hpos);
+
+ if (thisline_decision.plfleft == -1)
+ BPLCON0_Denise (hpos, v);
+}
+
+#if 0
+
+ddf_change = vpos;
+decide_line (hpos);
+decide_fetch (hpos);
+decide_blitter (hpos);
+
+bplcon0 = v;
+
+badmode = GET_RES_AGNUS (bplcon0) != GET_RES_DENISE (bplcon0);
+
+// fake unused 0x0080 bit as an EHB bit (see above)
+if (isehb (bplcon0, bplcon2))
+ v |= 0x80;
+
+BPLCON0_Denise (hpos, v);
+
+expand_fmodes ();
+
+record_register_change (hpos, 0x100, v);
+
+calcdiw ();
+estimate_last_fetch_cycle (hpos);
+
+}
+#endif
+
+STATIC_INLINE void BPLCON1 (int hpos, uae_u16 v)
+{
+ if (!(currprefs.chipset_mask & CSMASK_AGA))
+ v &= 0xff;
+ if (bplcon1 == v)
+ return;
+ ddf_change = vpos;
+ decide_line (hpos);
+ decide_fetch (hpos);
+ bplcon1_hpos = hpos;
+ bplcon1 = v;
+}
+
+STATIC_INLINE void BPLCON2 (int hpos, uae_u16 v)
+{
+ if (!(currprefs.chipset_mask & CSMASK_AGA))
+ v &= 0x7f;
+ if (bplcon2 == v)
+ return;
+ decide_line (hpos);
+ bplcon2 = v;
+ record_register_change (hpos, 0x104, v);
+}
+
+#ifdef ECS_DENISE
+STATIC_INLINE void BPLCON3 (int hpos, uae_u16 v)
+{
+ if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE))
+ return;
+ if (!(currprefs.chipset_mask & CSMASK_AGA)) {
+ v &= 0x003f;
+ v |= 0x0c00;
+ }
+#if SPRBORDER
+ v |= 2;
+#endif
+ if (bplcon3 == v)
+ return;
+ decide_line (hpos);
+ decide_sprites (hpos);
+ bplcon3 = v;
+ sprres = expand_sprres (bplcon0, bplcon3);
+ record_register_change (hpos, 0x106, v);
+}
+#endif
+#ifdef AGA
+STATIC_INLINE void BPLCON4 (int hpos, uae_u16 v)
+{
+ if (!(currprefs.chipset_mask & CSMASK_AGA))
+ return;
+ if (bplcon4 == v)
+ return;
+ decide_line (hpos);
+ bplcon4 = v;
+ record_register_change (hpos, 0x10c, v);
+}
+#endif
+
+static void BPL1MOD (int hpos, uae_u16 v)
+{
+ v &= ~1;
+ if ((uae_s16)bpl1mod == (uae_s16)v)
+ return;
+ decide_line (hpos);
+ decide_fetch (hpos);
+ bpl1mod = v;
+}
+
+static void BPL2MOD (int hpos, uae_u16 v)
+{
+ v &= ~1;
+ if ((uae_s16)bpl2mod == (uae_s16)v)
+ return;
+ decide_line (hpos);
+ decide_fetch (hpos);
+ bpl2mod = v;
+}
+
+/* needed in special OCS/ECS "7-plane" mode. */
+/* (in reality only BPL5DAT and BPL6DAT needed) */
+static void BPLxDAT (int hpos, int num, uae_u16 v)
+{
+ decide_line (hpos);
+ decide_fetch (hpos);
+ bplxdat[num] = v;
+ if (num == 0) {
+ bpl1dat_written = 1;
+ if (thisline_decision.plfleft == -1) {
+ thisline_decision.plfleft = hpos;
+ compute_delay_offset ();
+ }
+ }
+}
+
+static void DIWSTRT (int hpos, uae_u16 v)
+{
+ if (diwstrt == v && ! diwhigh_written)
+ return;
+ decide_line (hpos);
+ diwhigh_written = 0;
+ diwstrt = v;
+ calcdiw ();
+}
+
+static void DIWSTOP (int hpos, uae_u16 v)
+{
+ if (diwstop == v && ! diwhigh_written)
+ return;
+ decide_line (hpos);
+ diwhigh_written = 0;
+ diwstop = v;
+ calcdiw ();
+}
+
+static void DIWHIGH (int hpos, uae_u16 v)
+{
+ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ return;
+ v &= ~(0x8000 | 0x4000 | 0x0080 | 0x0040);
+ if (diwhigh_written && diwhigh == v)
+ return;
+ decide_line (hpos);
+ diwhigh_written = 1;
+ diwhigh = v;
+ calcdiw ();
+}
+
+static void DDFSTRT (int hpos, uae_u16 v)
+{
+ v &= 0xfe;
+ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ v &= 0xfc;
+ if (ddfstrt == v && hpos + 2 != ddfstrt)
+ return;
+ ddf_change = vpos;
+ decide_line (hpos);
+ ddfstrt_old_hpos = hpos;
+ ddfstrt = v;
+ calcdiw ();
+ if (ddfstop > 0xD4 && (ddfstrt & 4) == 4) {
+ static int last_warned;
+ last_warned = (last_warned + 1) & 4095;
+ if (last_warned == 0)
+ write_log (L"WARNING! Very strange DDF values (%x %x).\n", ddfstrt, ddfstop);
+ }
+}
+
+static void DDFSTOP (int hpos, uae_u16 v)
+{
+ v &= 0xfe;
+ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ v &= 0xfc;
+ if (ddfstop == v && hpos + 2 != ddfstop)
+ return;
+ ddf_change = vpos;
+ decide_line (hpos);
+ decide_fetch (hpos);
+ decide_blitter (hpos);
+ ddfstop = v;
+ calcdiw ();
+ if (fetch_state != fetch_not_started)
+ estimate_last_fetch_cycle (hpos);
+ if (ddfstop > 0xD4 && (ddfstrt & 4) == 4) {
+ static int last_warned;
+ if (last_warned == 0)
+ write_log (L"WARNING! Very strange DDF values (%x).\n", ddfstop);
+ last_warned = (last_warned + 1) & 4095;
+ }
+}
+
+static void FMODE (int hpos, uae_u16 v)
+{
+ if (! (currprefs.chipset_mask & CSMASK_AGA))
+ v = 0;
+ v &= 0xC00F;
+ if (fmode == v)
+ return;
+ ddf_change = vpos;
+ fmode = v;
+ sprite_width = GET_SPRITEWIDTH (fmode);
+ bpldmainitdelay (hpos);
+}
+
+static void FNULL (uae_u16 v)
+{
+
+}
+
+static void BLTADAT (int hpos, uae_u16 v)
+{
+ maybe_blit (hpos, 0);
+
+ blt_info.bltadat = v;
+}
+/*
+* "Loading data shifts it immediately" says the HRM. Well, that may
+* be true for BLTBDAT, but not for BLTADAT - it appears the A data must be
+* loaded for every word so that AFWM and ALWM can be applied.
+*/
+static void BLTBDAT (int hpos, uae_u16 v)
+{
+ maybe_blit (hpos, 0);
+
+ if (bltcon1 & 2)
+ blt_info.bltbhold = v << (bltcon1 >> 12);
+ else
+ blt_info.bltbhold = v >> (bltcon1 >> 12);
+ blt_info.bltbdat = v;
+}
+static void BLTCDAT (int hpos, uae_u16 v) { maybe_blit (hpos, 0); blt_info.bltcdat = v; reset_blit (0); }
+
+static void BLTAMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltamod = (uae_s16)(v & 0xFFFE); reset_blit (0); }
+static void BLTBMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltbmod = (uae_s16)(v & 0xFFFE); reset_blit (0); }
+static void BLTCMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltcmod = (uae_s16)(v & 0xFFFE); reset_blit (0); }
+static void BLTDMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltdmod = (uae_s16)(v & 0xFFFE); reset_blit (0); }
+
+static void BLTCON0 (int hpos, uae_u16 v) { maybe_blit (hpos, 2); bltcon0 = v; reset_blit (1); }
+/* The next category is "Most useless hardware register".
+* And the winner is... */
+static void BLTCON0L (int hpos, uae_u16 v)
+{
+ if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ return;
+ maybe_blit (hpos, 2); bltcon0 = (bltcon0 & 0xFF00) | (v & 0xFF);
+ reset_blit (1);
+}
+static void BLTCON1 (int hpos, uae_u16 v) { maybe_blit (hpos, 2); bltcon1 = v; reset_blit (2); }
+
+static void BLTAFWM (int hpos, uae_u16 v) { maybe_blit (hpos, 2); blt_info.bltafwm = v; reset_blit (0); }
+static void BLTALWM (int hpos, uae_u16 v) { maybe_blit (hpos, 2); blt_info.bltalwm = v; reset_blit (0); }
+
+static void BLTAPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltapt = (bltapt & 0xffff) | ((uae_u32)v << 16); }
+static void BLTAPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltapt = (bltapt & ~0xffff) | (v & 0xFFFE); }
+static void BLTBPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltbpt = (bltbpt & 0xffff) | ((uae_u32)v << 16); }
+static void BLTBPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltbpt = (bltbpt & ~0xffff) | (v & 0xFFFE); }
+static void BLTCPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltcpt = (bltcpt & 0xffff) | ((uae_u32)v << 16); }
+static void BLTCPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltcpt = (bltcpt & ~0xffff) | (v & 0xFFFE); }
+static void BLTDPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltdpt = (bltdpt & 0xffff) | ((uae_u32)v << 16); }
+static void BLTDPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltdpt = (bltdpt & ~0xffff) | (v & 0xFFFE); }
+
+static void BLTSIZE (int hpos, uae_u16 v)
+{
+ maybe_blit (hpos, 0);
+
+ blt_info.vblitsize = v >> 6;
+ blt_info.hblitsize = v & 0x3F;
+ if (!blt_info.vblitsize)
+ blt_info.vblitsize = 1024;
+ if (!blt_info.hblitsize)
+ blt_info.hblitsize = 64;
+ do_blitter (hpos, copper_access);
+}
+
+static void BLTSIZV (int hpos, uae_u16 v)
+{
+ if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ return;
+ maybe_blit (hpos, 0);
+ blt_info.vblitsize = v & 0x7FFF;
+}
+
+static void BLTSIZH (int hpos, uae_u16 v)
+{
+ if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS))
+ return;
+ maybe_blit (hpos, 0);
+ blt_info.hblitsize = v & 0x7FF;
+ if (!blt_info.vblitsize)
+ blt_info.vblitsize = 32768;
+ if (!blt_info.hblitsize)
+ blt_info.hblitsize = 0x800;
+ do_blitter (hpos, copper_access);
+}
+
+STATIC_INLINE void spr_arm (int num, int state)
+{
+ switch (state) {
+ case 0:
+ nr_armed -= spr[num].armed;
+ spr[num].armed = 0;
+ break;
+ default:
+ nr_armed += 1 - spr[num].armed;
+ spr[num].armed = 1;
+ break;
+ }
+}
+
+STATIC_INLINE void sprstartstop (struct sprite *s)
+{
+ if (vpos == s->vstart)
+ s->dmastate = 1;
+ if (vpos == s->vstop)
+ s->dmastate = 0;
+}
+
+STATIC_INLINE void SPRxCTLPOS (int num)
+{
+ int sprxp;
+ struct sprite *s = &spr[num];
+
+ sprstartstop (s);
+ sprxp = (sprpos[num] & 0xFF) * 2 + (sprctl[num] & 1);
+ sprxp <<= sprite_buffer_res;
+ /* Quite a bit salad in this register... */
+ if (0) {
+ }
+#ifdef AGA
+ else if (currprefs.chipset_mask & CSMASK_AGA) {
+ sprxp |= ((sprctl[num] >> 3) & 3) >> (RES_MAX - sprite_buffer_res);
+ s->dblscan = sprpos[num] & 0x80;
+ }
+#endif
+#ifdef ECS_DENISE
+ else if (currprefs.chipset_mask & CSMASK_ECS_DENISE) {
+ sprxp |= ((sprctl[num] >> 3) & 2) >> (RES_MAX - sprite_buffer_res);
+ }
+#endif
+ s->xpos = sprxp;
+ s->vstart = (sprpos[num] >> 8) | ((sprctl[num] << 6) & 0x100);
+ s->vstop = (sprctl[num] >> 8) | ((sprctl[num] << 7) & 0x100);
+ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
+ s->vstart |= (sprctl[num] << 3) & 0x200;
+ s->vstop |= (sprctl[num] << 4) & 0x200;
+ }
+ sprstartstop (s);
+}
+
+STATIC_INLINE void SPRxCTL_1 (uae_u16 v, int num, int hpos)
+{
+ struct sprite *s = &spr[num];
+ sprctl[num] = v;
+ spr_arm (num, 0);
+ SPRxCTLPOS (num);
+#if SPRITE_DEBUG > 0
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:SPR%dCTL %04X P=%06X VSTRT=%d VSTOP=%d HSTRT=%d D=%d A=%d CP=%x PC=%x\n",
+ vpos, hpos, num, v, s->pt, s->vstart, s->vstop, s->xpos, spr[num].dmastate, spr[num].armed, cop_state.ip, M68K_GETPC);
+ }
+#endif
+
+}
+STATIC_INLINE void SPRxPOS_1 (uae_u16 v, int num, int hpos)
+{
+ struct sprite *s = &spr[num];
+ sprpos[num] = v;
+ SPRxCTLPOS (num);
+#if SPRITE_DEBUG > 0
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:SPR%dPOS %04X P=%06X VSTRT=%d VSTOP=%d HSTRT=%d D=%d A=%d CP=%x PC=%x\n",
+ vpos, hpos, num, v, s->pt, s->vstart, s->vstop, s->xpos, spr[num].dmastate, spr[num].armed, cop_state.ip, M68K_GETPC);
+ }
+#endif
+}
+STATIC_INLINE void SPRxDATA_1 (uae_u16 v, int num, int hpos)
+{
+ sprdata[num][0] = v;
+#ifdef AGA
+ sprdata[num][1] = v;
+ sprdata[num][2] = v;
+ sprdata[num][3] = v;
+#endif
+ spr_arm (num, 1);
+#if SPRITE_DEBUG > 1
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:SPR%dDATA %04X P=%06X D=%d A=%d PC=%x\n",
+ vpos, hpos, num, v, spr[num].pt, spr[num].dmastate, spr[num].armed, M68K_GETPC);
+ }
+#endif
+}
+STATIC_INLINE void SPRxDATB_1 (uae_u16 v, int num, int hpos)
+{
+ sprdatb[num][0] = v;
+#ifdef AGA
+ sprdatb[num][1] = v;
+ sprdatb[num][2] = v;
+ sprdatb[num][3] = v;
+#endif
+#if SPRITE_DEBUG > 1
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:SPR%dDATB %04X P=%06X D=%d A=%d PC=%x\n",
+ vpos, hpos, num, v, spr[num].pt, spr[num].dmastate, spr[num].armed, M68K_GETPC);
+ }
+#endif
+}
+static void SPRxDATA (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxDATA_1 (v, num, hpos); }
+static void SPRxDATB (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxDATB_1 (v, num, hpos); }
+static void SPRxCTL (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxCTL_1 (v, num, hpos); }
+static void SPRxPOS (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxPOS_1 (v, num, hpos); }
+static void SPRxPTH (int hpos, uae_u16 v, int num)
+{
+ decide_sprites (hpos);
+ if (hpos - 1 != spr[num].ptxhpos) {
+ spr[num].pt &= 0xffff;
+ spr[num].pt |= (uae_u32)v << 16;
+ }
+#if SPRITE_DEBUG > 0
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:SPR%dPTH %06X\n", vpos, hpos, num, spr[num].pt);
+ }
+#endif
+}
+static void SPRxPTL (int hpos, uae_u16 v, int num)
+{
+ decide_sprites (hpos);
+ if (hpos - 1 != spr[num].ptxhpos) {
+ spr[num].pt &= ~0xffff;
+ spr[num].pt |= v;
+ }
+#if SPRITE_DEBUG > 0
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:SPR%dPTL %06X\n", vpos, hpos, num, spr[num].pt);
+ }
+#endif
+}
+
+static void CLXCON (uae_u16 v)
+{
+ clxcon = v;
+ clxcon_bpl_enable = (v >> 6) & 63;
+ clxcon_bpl_match = v & 63;
+}
+
+static void CLXCON2 (uae_u16 v)
+{
+ if (!(currprefs.chipset_mask & CSMASK_AGA))
+ return;
+ clxcon2 = v;
+ clxcon_bpl_enable |= v & (0x40|0x80);
+ clxcon_bpl_match |= (v & (0x01|0x02)) << 6;
+}
+
+static uae_u16 CLXDAT (void)
+{
+ uae_u16 v = clxdat | 0x8000;
+ clxdat = 0;
+ return v;
+}
+
+#ifdef AGA
+
+void dump_aga_custom (void)
+{
+ int c1, c2, c3, c4;
+ uae_u32 rgb1, rgb2, rgb3, rgb4;
+
+ for (c1 = 0; c1 < 64; c1++) {
+ c2 = c1 + 64;
+ c3 = c2 + 64;
+ c4 = c3 + 64;
+ rgb1 = current_colors.color_regs_aga[c1] | (color_regs_aga_genlock[c1] << 31);
+ rgb2 = current_colors.color_regs_aga[c2] | (color_regs_aga_genlock[c2] << 31);
+ rgb3 = current_colors.color_regs_aga[c3] | (color_regs_aga_genlock[c3] << 31);
+ rgb4 = current_colors.color_regs_aga[c4] | (color_regs_aga_genlock[c4] << 31);
+ console_out_f (L"%3d %08X %3d %08X %3d %08X %3d %08X\n",
+ c1, rgb1, c2, rgb2, c3, rgb3, c4, rgb4);
+ }
+}
+
+static uae_u16 COLOR_READ (int num)
+{
+ int cr, cg, cb, colreg;
+ uae_u16 cval;
+
+ if (!(currprefs.chipset_mask & CSMASK_AGA) || !(bplcon2 & 0x0100))
+ return 0xffff;
+
+ colreg = ((bplcon3 >> 13) & 7) * 32 + num;
+ cr = current_colors.color_regs_aga[colreg] >> 16;
+ cg = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF;
+ cb = current_colors.color_regs_aga[colreg] & 0xFF;
+ if (bplcon3 & 0x200) {
+ cval = ((cr & 15) << 8) | ((cg & 15) << 4) | ((cb & 15) << 0);
+ } else {
+ cval = ((cr >> 4) << 8) | ((cg >> 4) << 4) | ((cb >> 4) << 0);
+ if (color_regs_aga_genlock[num])
+ cval |= 0x8000;
+ }
+ return cval;
+}
+#endif
+
+static void COLOR_WRITE (int hpos, uae_u16 v, int num)
+{
+ v &= 0xFFF;
+#ifdef AGA
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ int r,g,b;
+ int cr,cg,cb;
+ int colreg;
+ uae_u32 cval;
+
+ /* writing is disabled when RDRAM=1 */
+ if (bplcon2 & 0x0100)
+ return;
+
+ colreg = ((bplcon3 >> 13) & 7) * 32 + num;
+ r = (v & 0xF00) >> 8;
+ g = (v & 0xF0) >> 4;
+ b = (v & 0xF) >> 0;
+ cr = current_colors.color_regs_aga[colreg] >> 16;
+ cg = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF;
+ cb = current_colors.color_regs_aga[colreg] & 0xFF;
+
+ if (bplcon3 & 0x200) {
+ cr &= 0xF0; cr |= r;
+ cg &= 0xF0; cg |= g;
+ cb &= 0xF0; cb |= b;
+ } else {
+ cr = r + (r << 4);
+ cg = g + (g << 4);
+ cb = b + (b << 4);
+ color_regs_aga_genlock[colreg] = v >> 15;
+ }
+ cval = (cr << 16) | (cg << 8) | cb;
+ if (cval == current_colors.color_regs_aga[colreg])
+ return;
+
+ /* Call this with the old table still intact. */
+ record_color_change (hpos, colreg, cval);
+ remembered_color_entry = -1;
+ current_colors.color_regs_aga[colreg] = cval;
+ current_colors.acolors[colreg] = getxcolor (cval);
+ } else {
+#endif
+ if (current_colors.color_regs_ecs[num] == v)
+ return;
+ /* Call this with the old table still intact. */
+ record_color_change (hpos, num, v);
+ remembered_color_entry = -1;
+ current_colors.color_regs_ecs[num] = v;
+ current_colors.acolors[num] = getxcolor (v);
+#ifdef AGA
+ }
+#endif
+}
+
+/* The copper code. The biggest nightmare in the whole emulator.
+
+Alright. The current theory:
+1. Copper moves happen 2 cycles after state READ2 is reached.
+It can't happen immediately when we reach READ2, because the
+data needs time to get back from the bus. An additional 2
+cycles are needed for non-Agnus registers, to take into account
+the delay for moving data from chip to chip.
+2. As stated in the HRM, a WAIT really does need an extra cycle
+to wake up. This is implemented by _not_ falling through from
+a successful wait to READ1, but by starting the next cycle.
+(Note: the extra cycle for the WAIT apparently really needs a
+free cycle; i.e. contention with the bitplane fetch can slow
+it down).
+3. Apparently, to compensate for the extra wake up cycle, a WAIT
+will use the _incremented_ horizontal position, so the WAIT
+cycle normally finishes two clocks earlier than the position
+it was waiting for. The extra cycle then takes us to the
+position that was waited for.
+If the earlier cycle is busy with a bitplane, things change a bit.
+E.g., waiting for position 0x50 in a 6 plane display: In cycle
+0x4e, we fetch BPL5, so the wait wakes up in 0x50, the extra cycle
+takes us to 0x54 (since 0x52 is busy), then we have READ1/READ2,
+and the next register write is at 0x5c.
+4. The last cycle in a line is not usable for the copper.
+5. A 4 cycle delay also applies to the WAIT instruction. This means
+that the second of two back-to-back WAITs (or a WAIT whose
+condition is immediately true) takes 8 cycles.
+6. This also applies to a SKIP instruction. The copper does not
+fetch the next instruction while waiting for the second word of
+a WAIT or a SKIP to arrive.
+7. A SKIP also seems to need an unexplained additional two cycles
+after its second word arrives; this is _not_ a memory cycle (I
+think, the documentation is pretty clear on this).
+8. Two additional cycles are inserted when writing to COPJMP1/2. */
+
+/* Determine which cycles are available for the copper in a display
+* with a agiven number of planes. */
+
+STATIC_INLINE int copper_cant_read (int hpos, int alloc)
+{
+ if (hpos + 1 >= maxhpos) // first refresh slot
+ return 1;
+ if ((hpos == maxhpos - 3) && (maxhpos & 1)) {
+ if (alloc)
+ alloc_cycle (hpos, CYCLE_COPPER);
+ return -1;
+ }
+ return is_bitplane_dma_inline (hpos);
+}
+
+static int custom_wput_copper (int hpos, uaecptr addr, uae_u32 value, int noget)
+{
+ int v;
+
+ debug_wputpeek (0xdff000 + addr, value);
+ copper_access = 1;
+ v = custom_wput_1 (hpos, addr, value, noget);
+ copper_access = 0;
+ return v;
+}
+
+static void dump_copper (TCHAR *error, int until_hpos)
+{
+ write_log (L"%s: vpos=%d until_hpos=%d\n",
+ error, vpos, until_hpos);
+ write_log (L"cvcmp=%d chcmp=%d chpos=%d cvpos=%d ci1=%04X ci2=%04X\n",
+ cop_state.vcmp,cop_state.hcmp,cop_state.hpos,cop_state.vpos,cop_state.saved_i1,cop_state.saved_i2);
+ write_log (L"cstate=%d ip=%x SPCFLAGS=%x\n",
+ cop_state.state, cop_state.ip, regs.spcflags);
+}
+
+// "emulate" chip internal delays, not the right place but fast and 99.9% programs
+// use only copper to write BPLCON1 etc.. (exception is HulkaMania/TSP..)
+// this table should be filled with zeros and done somewhere else..
+static int customdelay[]= {
+ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* 32 0x00 - 0x3e */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x40 - 0x5e */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x60 - 0x7e */
+ 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, /* 0x80 - 0x9e */
+ 1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0, /* 32 0xa0 - 0xde */
+ /* BPLxPTH/BPLxPTL */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 16 */
+ /* BPLCON0-3,BPLMOD1-2 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 16 */
+ /* SPRxPTH/SPRxPTL */
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 16 */
+ /* SPRxPOS/SPRxCTL/SPRxDATA/SPRxDATB */
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ /* COLORxx */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ /* RESERVED */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+};
+
+static void update_copper (int until_hpos)
+{
+ int vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80);
+ int c_hpos = cop_state.hpos;
+
+ if (nocustom ())
+ return;
+
+ if (cop_state.state == COP_wait && vp < cop_state.vcmp) {
+ dump_copper (L"error2", until_hpos);
+ copper_enabled_thisline = 0;
+ cop_state.state = COP_stop;
+ unset_special (SPCFLAG_COPPER);
+ return;
+ }
+
+ if (until_hpos <= last_copper_hpos)
+ return;
+
+ if (until_hpos > (maxhpos & ~1))
+ until_hpos = maxhpos & ~1;
+
+ for (;;) {
+ int old_hpos = c_hpos;
+ int hp;
+
+ if (c_hpos >= until_hpos)
+ break;
+
+
+ /* So we know about the fetch state. */
+ decide_line (c_hpos);
+ decide_fetch (c_hpos);
+
+ if (cop_state.movedelay > 0) {
+ cop_state.movedelay--;
+ if (cop_state.movedelay == 0) {
+ custom_wput_copper (c_hpos, cop_state.moveaddr, cop_state.movedata, 0);
+ }
+ }
+
+ if ((c_hpos == maxhpos - 3) && (maxhpos & 1))
+ c_hpos += 1;
+ else
+ c_hpos += 2;
+
+ if (cop_state.strobe) {
+ if (cop_state.strobe > 0)
+ cop_state.ip = cop_state.strobe == 1 ? cop1lc : cop2lc;
+ cop_state.strobe = 0;
+ }
+
+ switch (cop_state.state)
+ {
+ case COP_wait_in2:
+ if (copper_cant_read (old_hpos, 0))
+ continue;
+ cop_state.state = COP_wait1;
+ break;
+ case COP_skip_in2:
+ if (copper_cant_read (old_hpos, 0))
+ continue;
+ cop_state.state = COP_skip1;
+ break;
+ case COP_strobe_extra:
+ // wait 1 copper cycle doing nothing
+ cop_state.state = COP_strobe_delay1;
+ break;
+ case COP_strobe_delay1:
+ // first cycle after COPJMP is just like normal first read cycle
+ if (copper_cant_read (old_hpos, 1))
+ continue;
+ cop_state.state = COP_strobe_delay2;
+ alloc_cycle (old_hpos, CYCLE_COPPER);
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma (0x8c, chipmem_agnus_wget (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+#endif
+ break;
+ case COP_strobe_delay2:
+ // second cycle after COPJMP is like second read cycle except
+ // there is 0x1FE as a target register
+ // (following word is still read normally and tossed away)
+ if (copper_cant_read (old_hpos, 1))
+ continue;
+ cop_state.state = COP_read1;
+ alloc_cycle (old_hpos, CYCLE_COPPER);
+ if (debug_dma)
+ record_dma (0x1fe, chipmem_agnus_wget (cop_state.ip + 2), cop_state.ip + 2, old_hpos, vpos, DMARECORD_COPPER);
+ break;
+ case COP_start_delay:
+ if (copper_cant_read (old_hpos, 1))
+ continue;
+ cop_state.state = COP_read1;
+ alloc_cycle (old_hpos, CYCLE_COPPER);
+ if (debug_dma)
+ record_dma (0x1fe, 0, 0xffffffff, old_hpos, vpos, DMARECORD_COPPER);
+ break;
+
+ case COP_read1:
+ if (copper_cant_read (old_hpos, 1))
+ continue;
+ cop_state.i1 = last_custom_value1 = chipmem_agnus_wget (cop_state.ip);
+ alloc_cycle (old_hpos, CYCLE_COPPER);
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma (0x8c, cop_state.i1, cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+#endif
+ cop_state.ip += 2;
+ cop_state.state = COP_read2;
+ break;
+
+ case COP_read2:
+ if (copper_cant_read (old_hpos, 1))
+ continue;
+ cop_state.i2 = last_custom_value1 = chipmem_agnus_wget (cop_state.ip);
+ alloc_cycle (old_hpos, CYCLE_COPPER);
+ cop_state.ip += 2;
+ cop_state.saved_i1 = cop_state.i1;
+ cop_state.saved_i2 = cop_state.i2;
+ cop_state.saved_ip = cop_state.ip;
+
+ if (cop_state.i1 & 1) { // WAIT or SKIP
+ cop_state.ignore_next = 0;
+ if (cop_state.i2 & 1)
+ cop_state.state = COP_skip_in2;
+ else
+ cop_state.state = COP_wait_in2;
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma (0x8c, cop_state.i2, cop_state.ip - 2, old_hpos, vpos, DMARECORD_COPPER);
+#endif
+ } else { // MOVE
+ unsigned int reg = cop_state.i1 & 0x1FE;
+ uae_u16 data = cop_state.i2;
+ cop_state.state = COP_read1;
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma (reg, data, cop_state.ip - 2, old_hpos, vpos, DMARECORD_COPPER);
+#endif
+ test_copper_dangerous (reg);
+ if (! copper_enabled_thisline)
+ goto out; // was "dangerous" register -> copper stopped
+ if (cop_state.ignore_next) {
+ reg = 0x1fe;
+ cop_state.ignore_next = 0;
+ }
+
+ cop_state.last_write = reg;
+ cop_state.last_write_hpos = old_hpos;
+ if (reg == 0x88) {
+ cop_state.ip = cop1lc;
+ cop_state.state = COP_strobe_delay1;
+ } else if (reg == 0x8A) {
+ cop_state.ip = cop2lc;
+ cop_state.state = COP_strobe_delay1;
+ } else {
+ // FIX: all copper writes happen 1 cycle later than CPU writes
+ if (customdelay[reg / 2]) {
+ cop_state.moveaddr = reg;
+ cop_state.movedata = data;
+ cop_state.movedelay = customdelay[cop_state.moveaddr / 2];
+ } else {
+ int hpos2 = old_hpos;
+ custom_wput_copper (hpos2, reg, data, 0);
+ hpos2++;
+ if (!nocustom () && reg >= 0x140 && reg < 0x180 && hpos2 >= SPR0_HPOS && hpos2 < SPR0_HPOS + 4 * MAX_SPRITES) {
+ do_sprites (hpos2);
+ }
+ }
+ }
+#ifdef DEBUGGER
+ if (debug_copper)
+ record_copper (cop_state.ip - 4, old_hpos, vpos);
+#endif
+ }
+ break;
+
+ case COP_wait1:
+ /* There's a nasty case here. As stated in the "Theory" comment above, we
+ test against the incremented copper position. I believe this means that
+ we have to increment the _vertical_ position at the last cycle in the line,
+ and set the horizontal position to 0.
+ Normally, this isn't going to make a difference, since we consider these
+ last cycles unavailable for the copper, so waking up in the last cycle has
+ the same effect as waking up at the start of the line. However, there is
+ one possible problem: If we're at 0xFFE0, any wait for an earlier position
+ must _not_ complete (since, in effect, the current position will be back
+ at 0/0). This can be seen in the Superfrog copper list.
+ Things get monstrously complicated if we try to handle this "properly" by
+ incrementing vpos and setting c_hpos to 0. Especially the various speedup
+ hacks really assume that vpos remains constant during one line. Hence,
+ this hack: defer the entire decision until the next line if necessary. */
+ if (c_hpos >= (maxhpos & ~1) || (c_hpos & 1))
+ break;
+
+ cop_state.state = COP_wait;
+
+ cop_state.vcmp = (cop_state.saved_i1 & (cop_state.saved_i2 | 0x8000)) >> 8;
+ cop_state.hcmp = (cop_state.saved_i1 & cop_state.saved_i2 & 0xFE);
+
+ vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80);
+
+ if (cop_state.saved_i1 == 0xFFFF && cop_state.saved_i2 == 0xFFFE) {
+ cop_state.state = COP_stop;
+ copper_enabled_thisline = 0;
+ unset_special (SPCFLAG_COPPER);
+ goto out;
+ }
+ if (vp < cop_state.vcmp) {
+ copper_enabled_thisline = 0;
+ unset_special (SPCFLAG_COPPER);
+ goto out;
+ }
+
+ /* fall through */
+ case COP_wait:
+ if (copper_cant_read (old_hpos, 0))
+ continue;
+
+ hp = c_hpos & (cop_state.saved_i2 & 0xFE);
+ if (vp == cop_state.vcmp && hp < cop_state.hcmp)
+ break;
+
+ /* Now we know that the comparisons were successful. We might still
+ have to wait for the blitter though. */
+ if ((cop_state.saved_i2 & 0x8000) == 0) {
+ decide_blitter (old_hpos);
+ if (bltstate != BLT_done) {
+ /* We need to wait for the blitter. */
+ cop_state.state = COP_bltwait;
+ copper_enabled_thisline = 0;
+ unset_special (SPCFLAG_COPPER);
+ goto out;
+ } else {
+ if (debug_dma)
+ record_dma_event (DMA_EVENT_COPPERWAKE, old_hpos, vp);
+ }
+ }
+
+#ifdef DEBUGGER
+ if (debug_copper)
+ record_copper (cop_state.ip - 4, old_hpos, vpos);
+#endif
+
+ cop_state.state = COP_read1;
+ break;
+
+ case COP_skip1:
+ {
+ unsigned int vcmp, hcmp, vp1, hp1;
+
+ if (c_hpos >= (maxhpos & ~1) || (c_hpos & 1))
+ break;
+ if (copper_cant_read (old_hpos, 0))
+ continue;
+
+ vcmp = (cop_state.saved_i1 & (cop_state.saved_i2 | 0x8000)) >> 8;
+ hcmp = (cop_state.saved_i1 & cop_state.saved_i2 & 0xFE);
+ vp1 = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80);
+ hp1 = c_hpos & (cop_state.saved_i2 & 0xFE);
+
+ if ((vp1 > vcmp || (vp1 == vcmp && hp1 >= hcmp)) && ((cop_state.saved_i2 & 0x8000) != 0 || bltstate == BLT_done))
+ cop_state.ignore_next = 1;
+
+ cop_state.state = COP_read1;
+
+#ifdef DEBUGGER
+ if (debug_copper)
+ record_copper (cop_state.ip - 4, old_hpos, vpos);
+#endif
+
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+out:
+ cop_state.hpos = c_hpos;
+ last_copper_hpos = until_hpos;
+}
+
+static void compute_spcflag_copper (int hpos)
+{
+ int wasenabled = copper_enabled_thisline;
+
+ copper_enabled_thisline = 0;
+ unset_special (SPCFLAG_COPPER);
+ if (!dmaen (DMA_COPPER) || cop_state.state == COP_stop || cop_state.state == COP_bltwait || nocustom ())
+ return;
+
+ if (cop_state.state == COP_wait) {
+ int vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80);
+
+ if (vp < cop_state.vcmp)
+ return;
+ }
+ // do not use past cycles if starting for the first time in this line
+ // (write to DMACON for example) hpos+1 for long lines
+ if (!wasenabled && cop_state.hpos < hpos && hpos < maxhpos) {
+ hpos = (hpos + 2) & ~1;
+ if (hpos > (maxhpos_short & ~1))
+ hpos = maxhpos_short & ~1;
+ cop_state.hpos = hpos;
+ }
+ copper_enabled_thisline = 1;
+ set_special (SPCFLAG_COPPER);
+}
+
+/*
+Copper writes to BLTSIZE: 3 blitter idle cycles, blitter normal cycle starts
+(CPU write to BLTSIZE only have 2 idle cycles at start)
+
+BFD=0 wait: 1 cycle (or 2 if hpos is not aligned) delay before wait ends
+*/
+void blitter_done_notify (int hpos)
+{
+ int vp = vpos;
+
+ if (cop_state.state != COP_bltwait)
+ return;
+
+ hpos += 3;
+ hpos &= ~1;
+ if (hpos >= maxhpos) {
+ hpos -= maxhpos;
+ vp++;
+ }
+ cop_state.hpos = hpos;
+ cop_state.vpos = vp;
+ cop_state.state = COP_read1;
+ if (debug_dma)
+ record_dma_event (DMA_EVENT_COPPERWAKE, hpos, vp);
+
+ if (dmaen (DMA_COPPER) && vp == vpos) {
+ copper_enabled_thisline = 1;
+ set_special (SPCFLAG_COPPER);
+ }
+}
+
+void do_copper (void)
+{
+ int hpos = current_hpos ();
+ update_copper (hpos);
+}
+
+/* ADDR is the address that is going to be read/written; this access is
+the reason why we want to update the copper. This function is also
+used from hsync_handler to finish up the line; for this case, we check
+hpos against maxhpos. */
+STATIC_INLINE void sync_copper_with_cpu (int hpos, int do_schedule)
+{
+ /* Need to let the copper advance to the current position. */
+ if (copper_enabled_thisline)
+ update_copper (hpos);
+}
+
+static void cursorsprite (void)
+{
+ if (!dmaen (DMA_SPRITE) || first_planes_vpos == 0)
+ return;
+ sprite_0 = spr[0].pt;
+ sprite_0_height = spr[0].vstop - spr[0].vstart;
+ sprite_0_colors[0] = 0;
+ sprite_0_doubled = 0;
+ if (sprres == 0)
+ sprite_0_doubled = 1;
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ int sbasecol = ((bplcon4 >> 4) & 15) << 4;
+ sprite_0_colors[1] = current_colors.color_regs_aga[sbasecol + 1];
+ sprite_0_colors[2] = current_colors.color_regs_aga[sbasecol + 2];
+ sprite_0_colors[3] = current_colors.color_regs_aga[sbasecol + 3];
+ } else {
+ sprite_0_colors[1] = xcolors[current_colors.color_regs_ecs[17]];
+ sprite_0_colors[2] = xcolors[current_colors.color_regs_ecs[18]];
+ sprite_0_colors[3] = xcolors[current_colors.color_regs_ecs[19]];
+ }
+ sprite_0_width = sprite_width;
+ if (currprefs.input_tablet && currprefs.input_magic_mouse) {
+ if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive ())
+ magic_sprite_mask &= ~1;
+ else
+ magic_sprite_mask |= 1;
+ }
+}
+
+STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cycle, int mode)
+{
+ uae_u16 data = last_custom_value1;
+ if (dma) {
+ if (cycle)
+ s->ptxhpos = hpos;
+ data = last_custom_value1 = chipmem_agnus_wget (s->pt);
+ alloc_cycle (hpos, CYCLE_SPRITE);
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma ((s - &spr[0]) * 8 + 0x140 + mode * 4 + cycle * 2, data, s->pt, hpos, vpos, DMARECORD_SPRITE);
+#endif
+ }
+ s->pt += 2;
+ return data;
+}
+STATIC_INLINE uae_u16 sprite_fetch2 (struct sprite *s, int dma, int hpos, int cycle, int mode)
+{
+ uae_u16 data = last_custom_value1;
+ if (dma) {
+ data = last_custom_value1 = chipmem_agnus_wget (s->pt);
+ }
+ s->pt += 2;
+ return data;
+}
+
+STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
+{
+ struct sprite *s = &spr[num];
+ int dma, posctl = 0;
+ uae_u16 data;
+ int isdma = dmaen (DMA_SPRITE);
+
+ if (isdma && vpos == sprite_vblank_endline)
+ spr_arm (num, 0);
+
+#ifdef AGA
+ if (isdma && s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) {
+ spr_arm (num, 1);
+ return;
+ }
+#endif
+#if SPRITE_DEBUG > 3
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY)
+ write_log (L"%d:%d:slot%d:%d\n", vpos, hpos, num, cycle);
+#endif
+ if (vpos == s->vstart) {
+#if SPRITE_DEBUG > 0
+ if (!s->dmastate && vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY)
+ write_log (L"%d:%d:SPR%d START\n", vpos, hpos, num);
+#endif
+ s->dmastate = 1;
+ if (num == 0 && cycle == 0)
+ cursorsprite ();
+ }
+ if (vpos == s->vstop || vpos == sprite_vblank_endline) {
+#if SPRITE_DEBUG > 0
+ if (s->dmastate && vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY)
+ write_log (L"%d:%d:SPR%d STOP\n", vpos, hpos, num);
+#endif
+ s->dmastate = 0;
+#if 1
+ if (vpos == s->vstop) {
+ spr_arm (num, 0);
+ //return;
+ }
+#endif
+ }
+
+ if (!isdma)
+ return;
+ if (cycle && !s->dmacycle)
+ return; /* Superfrog intro flashing bee fix */
+
+ dma = hpos < plfstrt || diwstate != DIW_waiting_stop;
+ if (vpos == s->vstop || vpos == sprite_vblank_endline) {
+ s->dmastate = 0;
+ posctl = 1;
+ if (dma) {
+ data = sprite_fetch (s, dma, hpos, cycle, 0);
+ switch (sprite_width)
+ {
+ case 64:
+ sprite_fetch2 (s, dma, hpos, cycle, 0);
+ sprite_fetch2 (s, dma, hpos, cycle, 0);
+ case 32:
+ sprite_fetch2 (s, dma, hpos, cycle, 0);
+ break;
+ }
+ } else {
+ data = cycle == 0 ? sprpos[num] : sprctl[num];
+ }
+#if SPRITE_DEBUG > 1
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:dma:P=%06X ", vpos, hpos, s->pt);
+ }
+#endif
+ //write_log (L"%d:%d: %04X=%04X\n", vpos, hpos, 0x140 + cycle * 2 + num * 8, data);
+ if (cycle == 0) {
+ SPRxPOS_1 (data, num, hpos);
+ s->dmacycle = 1;
+ } else {
+ SPRxCTL_1 (data, num, hpos);
+ s->dmastate = 0;
+ sprstartstop (s);
+ }
+ }
+ if (s->dmastate && !posctl) {
+ uae_u16 data;
+
+ data = sprite_fetch (s, dma, hpos, cycle, 1);
+#if SPRITE_DEBUG > 1
+ if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
+ write_log (L"%d:%d:dma:P=%06X ", vpos, hpos, s->pt);
+ }
+#endif
+ if (cycle == 0) {
+ SPRxDATA_1 (dma ? data : sprdata[num][0], num, hpos);
+ s->dmacycle = 1;
+ } else {
+ SPRxDATB_1 (dma ? data : sprdatb[num][0], num, hpos);
+ spr_arm (num, 1);
+ }
+#ifdef AGA
+ switch (sprite_width)
+ {
+ case 64:
+ {
+ uae_u16 data32 = sprite_fetch2 (s, dma, hpos, cycle, 1);
+ uae_u16 data641 = sprite_fetch2 (s, dma, hpos, cycle, 1);
+ uae_u16 data642 = sprite_fetch2 (s, dma, hpos, cycle, 1);
+ if (dma) {
+ if (cycle == 0) {
+ sprdata[num][3] = data642;
+ sprdata[num][2] = data641;
+ sprdata[num][1] = data32;
+ } else {
+ sprdatb[num][3] = data642;
+ sprdatb[num][2] = data641;
+ sprdatb[num][1] = data32;
+ }
+ }
+ }
+ break;
+ case 32:
+ {
+ uae_u16 data32 = sprite_fetch2 (s, dma, hpos, cycle, 1);
+ if (dma) {
+ if (cycle == 0)
+ sprdata[num][1] = data32;
+ else
+ sprdatb[num][1] = data32;
+ }
+ }
+ break;
+ }
+#endif
+ }
+}
+
+static void do_sprites (int hpos)
+{
+ int maxspr, minspr;
+ int i;
+
+ if (vpos < sprite_vblank_endline)
+ return;
+ if (doflickerfix () && interlace_seen && (next_lineno & 1))
+ return;
+
+#ifndef CUSTOM_SIMPLE
+ maxspr = hpos;
+ minspr = last_sprite_hpos + 1;
+
+ if (minspr >= SPR0_HPOS + MAX_SPRITES * 4 || maxspr < SPR0_HPOS)
+ return;
+
+ if (maxspr > SPR0_HPOS + MAX_SPRITES * 4)
+ maxspr = SPR0_HPOS + MAX_SPRITES * 4;
+ if (minspr < SPR0_HPOS)
+ minspr = SPR0_HPOS;
+
+ for (i = minspr; i <= maxspr; i++) {
+ int cycle = -1;
+ int num = (i - SPR0_HPOS) / 4;
+ switch ((i - SPR0_HPOS) & 3)
+ {
+ case 0:
+ cycle = 0;
+ spr[num].dmacycle = 0;
+ break;
+ case 2:
+ cycle = 1;
+ break;
+ }
+ if (cycle >= 0 && num >= 0 && num < MAX_SPRITES) {
+ spr[num].ptxhpos = MAXHPOS;
+ do_sprites_1 (num, cycle, i);
+ }
+ }
+
+ last_sprite_hpos = hpos;
+#else
+ for (i = 0; i < MAX_SPRITES * 2; i++) {
+ spr[i / 2].dmacycle = 1;
+ do_sprites_1 (i / 2, i & 1, 0);
+ }
+#endif
+}
+
+static void init_sprites (void)
+{
+ memset (sprpos, 0, sizeof sprpos);
+ memset (sprctl, 0, sizeof sprctl);
+}
+
+/*
+* On systems without virtual memory or with low memory, we allocate the
+* sprite_entries and color_changes tables dynamically rather than having
+* them declared static. We don't initially allocate at their maximum sizes;
+* we start the tables off small and grow them as required.
+*
+* This function expands the tables if necessary.
+*/
+static void adjust_array_sizes (void)
+{
+#ifdef OS_WITHOUT_MEMORY_MANAGEMENT
+ if (delta_sprite_entry) {
+ void *p1;
+ void *p2;
+ int mcc = max_sprite_entry + 50 + delta_sprite_entry;
+
+ delta_sprite_entry = 0;
+
+ p1 = realloc (sprite_entries[0], mcc * sizeof (struct sprite_entry));
+ p2 = realloc (sprite_entries[1], mcc * sizeof (struct sprite_entry));
+
+ if (p1 && p2) {
+ sprite_entries[0] = p1;
+ sprite_entries[1] = p2;
+
+ memset (&sprite_entries[0][max_sprite_entry], (mcc - max_sprite_entry) * sizeof(struct sprite_entry), 0);
+ memset (&sprite_entries[1][max_sprite_entry], (mcc - max_sprite_entry) * sizeof(struct sprite_entry), 0);
+
+ write_log (L"New max_sprite_entry=%d\n", mcc);
+
+ max_sprite_entry = mcc;
+ } else
+ write_log (L"WARNING: Failed to enlarge sprite_entries table\n");
+ }
+ if (delta_color_change) {
+ void *p1;
+ void *p2;
+ int mcc = max_color_change + 200 + delta_color_change;
+
+ delta_color_change = 0;
+
+ p1 = realloc (color_changes[0], mcc * sizeof (struct color_change));
+ p2 = realloc (color_changes[1], mcc * sizeof (struct color_change));
+
+ if (p1 && p2) {
+ color_changes[0] = p1;
+ color_changes[1] = p2;
+
+ write_log (L"New max_color_change=%d\n", mcc);
+
+ max_color_change = mcc;
+ } else
+ write_log (L"WARNING: Failed to enlarge color_changes table\n");
+ }
+#endif
+}
+
+static void init_hardware_frame (void)
+{
+ first_bpl_vpos = -1;
+ next_lineno = 0;
+ prev_lineno = -1;
+ nextline_how = nln_normal;
+ diwstate = DIW_waiting_start;
+ hdiwstate = DIW_waiting_start;
+ ddfstate = DIW_waiting_start;
+ first_planes_vpos = 0;
+ last_planes_vpos = 0;
+ diwfirstword_total = max_diwlastword;
+ diwlastword_total = 0;
+ ddffirstword_total = max_diwlastword;
+ ddflastword_total = 0;
+ plflastline_total = 0;
+ plffirstline_total = maxvpos;
+}
+
+void init_hardware_for_drawing_frame (void)
+{
+ /* Avoid this code in the first frame after a customreset. */
+ if (prev_sprite_entries) {
+ int first_pixel = prev_sprite_entries[0].first_pixel;
+ int npixels = prev_sprite_entries[prev_next_sprite_entry].first_pixel - first_pixel;
+ memset (spixels + first_pixel, 0, npixels * sizeof *spixels);
+ memset (spixstate.bytes + first_pixel, 0, npixels * sizeof *spixstate.bytes);
+ }
+ prev_next_sprite_entry = next_sprite_entry;
+
+ next_color_change = 0;
+ next_sprite_entry = 0;
+ next_color_entry = 0;
+ remembered_color_entry = -1;
+
+ adjust_array_sizes ();
+
+ prev_sprite_entries = sprite_entries[current_change_set];
+ curr_sprite_entries = sprite_entries[current_change_set ^ 1];
+ prev_color_changes = color_changes[current_change_set];
+ curr_color_changes = color_changes[current_change_set ^ 1];
+ prev_color_tables = color_tables[current_change_set];
+ curr_color_tables = color_tables[current_change_set ^ 1];
+
+ prev_drawinfo = line_drawinfo[current_change_set];
+ curr_drawinfo = line_drawinfo[current_change_set ^ 1];
+ current_change_set ^= 1;
+
+ color_src_match = color_dest_match = -1;
+
+ /* Use both halves of the array in alternating fashion. */
+ curr_sprite_entries[0].first_pixel = current_change_set * MAX_SPR_PIXELS;
+ next_sprite_forced = 1;
+}
+
+static void do_savestate(void);
+
+static int rpt_vsync (void)
+{
+ int v = read_processor_time () - vsyncmintime;
+ if (v > (int)syncbase || v < -((int)syncbase)) {
+ vsyncmintime = read_processor_time ();
+ v = 0;
+ }
+ return v;
+}
+
+static void framewait (void)
+{
+ frame_time_t curr_time;
+ frame_time_t start;
+
+ if (isvsync ()) {
+ vsyncmintime = vsynctime;
+ return;
+ }
+ for (;;) {
+ double v = rpt_vsync () / (syncbase / 1000.0);
+ if (v >= -4)
+ break;
+ sleep_millis (2);
+ }
+ curr_time = start = read_processor_time ();
+ while (rpt_vsync () < 0);
+ curr_time = read_processor_time ();
+ vsyncmintime = curr_time + vsynctime;
+ idletime += read_processor_time() - start;
+}
+
+static frame_time_t frametime2;
+
+void fpscounter_reset (void)
+{
+ timeframes = 0;
+ frametime2 = 0;
+ bogusframe = 2;
+ lastframetime = read_processor_time ();
+ idletime = 0;
+}
+
+static void fpscounter (void)
+{
+ frame_time_t now, last;
+ int mcnt = 10;
+
+ now = read_processor_time ();
+ last = now - lastframetime;
+ lastframetime = now;
+
+ if (bogusframe)
+ return;
+
+ frametime += last;
+ frametime2 += last;
+ timeframes++;
+ if ((timeframes % mcnt) == 0) {
+ double idle = 1000 - (idletime == 0 ? 0.0 : (double)idletime * 1000.0 / (vsynctime * mcnt));
+ int fps = frametime2 == 0 ? 0 : (syncbase * mcnt) / (frametime2 / 10);
+ if (fps > 9999)
+ fps = 9999;
+ if (idle < 0)
+ idle = 0;
+ if (idle > 100 * 10)
+ idle = 100 * 10;
+ if (fake_vblank_hz * 10 > fps) {
+ double mult = (double)fake_vblank_hz * 10.0 / fps;
+ idle *= mult;
+ }
+ if (currprefs.turbo_emulation && idle < 100 * 10)
+ idle = 100 * 10;
+ gui_fps (fps, (int)idle);
+ frametime2 = 0;
+ idletime = 0;
+ }
+}
+
+static void vsync_handler (void)
+{
+ fpscounter ();
+
+ if (!isvsync ()
+#ifdef AVIOUTPUT
+ && ((avioutput_framelimiter && avioutput_enabled) || !avioutput_enabled)
+#endif
+ ) {
+#ifdef JIT
+ if (!compiled_code) {
+#endif
+ if (currprefs.m68k_speed == -1) {
+ frame_time_t curr_time = read_processor_time ();
+ vsyncmintime += vsynctime;
+ /* @@@ Mathias? How do you think we should do this? */
+ /* If we are too far behind, or we just did a reset, adjust the
+ * needed time. */
+ if ((long int)(curr_time - vsyncmintime) > 0 || rpt_did_reset)
+ vsyncmintime = curr_time + vsynctime;
+ rpt_did_reset = 0;
+ } else if (rpt_available) {
+ framewait ();
+ }
+#ifdef JIT
+ } else {
+ if (rpt_available && currprefs.m68k_speed == 0) {
+ framewait ();
+ }
+ }
+#endif
+ } else {
+ framewait ();
+ }
+
+ if (bogusframe > 0)
+ bogusframe--;
+
+ handle_events ();
+
+ INTREQ (0x8000 | 0x0020);
+ if (bplcon0 & 4)
+ lof ^= 1;
+
+#ifdef PICASSO96
+ picasso_handle_vsync ();
+#endif
+ audio_vsync ();
+
+ if (quit_program > 0) {
+ /* prevent possible infinite loop at wait_cycles().. */
+ framecnt = 0;
+ reset_decisions ();
+ return;
+ }
+
+ {
+ static int cnt = 0;
+ if (cnt == 0) {
+ /* resolution_check_change (); */
+ DISK_check_change ();
+ cnt = 5;
+ }
+ cnt--;
+ }
+
+ if (debug_copper)
+ record_copper_reset ();
+ if (debug_dma)
+ record_dma_reset ();
+
+ vsync_handle_redraw (lof, lof_changed);
+
+ /* For now, let's only allow this to change at vsync time. It gets too
+ * hairy otherwise. */
+ if (hack_vpos2) {
+ hack_vpos = hack_vpos2vpos + 1;
+ if (hack_vpos2 < maxvpos)
+ hack_vpos += maxvpos - hack_vpos2;
+ if (hack_vpos > maxvpos)
+ hack_vpos = maxvpos;
+ if (hack_vpos < 10)
+ hack_vpos = 10;
+ hack_vpos2 = 0;
+ }
+ if ((beamcon0 & (0x20|0x80)) != (new_beamcon0 & (0x20|0x80)) || hack_vpos)
+ init_hz ();
+
+ lof_changed = 0;
+
+ COPJMP (1, 1);
+
+ if (timehack_alive > 0)
+ timehack_alive--;
+ inputdevice_vsync ();
+ filesys_vsync ();
+
+ init_hardware_frame ();
+
+}
+
+#ifdef JIT
+
+#define N_LINES 8
+
+STATIC_INLINE int trigger_frh (int v)
+{
+ return (v & (N_LINES - 1)) == 0;
+}
+
+static long int diff32 (frame_time_t x, frame_time_t y)
+{
+ return (long int)(x - y);
+}
+static void frh_handler (void)
+{
+ if (currprefs.m68k_speed == -1) {
+ frame_time_t curr_time = read_processor_time ();
+ vsyncmintime += vsynctime * N_LINES / maxvpos;
+ /* @@@ Mathias? How do you think we should do this? */
+ /* If we are too far behind, or we just did a reset, adjust the
+ * needed time. */
+ if (rpt_did_reset) {
+ vsyncmintime = curr_time + vsynctime;
+ rpt_did_reset = 0;
+ }
+ /* Allow this to be one frame's worth of cycles out */
+ while (diff32 (curr_time, vsyncmintime + vsynctime) > 0) {
+ vsyncmintime += vsynctime * N_LINES / maxvpos;
+ if (currprefs.turbo_emulation)
+ break;
+ }
+ }
+}
+#endif
+
+static void copper_check (int n)
+{
+ if (cop_state.state == COP_wait) {
+ int vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80);
+ if (vp < cop_state.vcmp) {
+ if (copper_enabled_thisline)
+ write_log (L"COPPER BUG %d: vp=%d vpos=%d vcmp=%d act=%d thisline=%d\n", n, vp, vpos, cop_state.vcmp, copper_enabled_thisline);
+ }
+ }
+}
+
+static void CIA_vsync_prehandler (int dotod)
+{
+ CIA_vsync_handler (dotod);
+#if 0
+ if (input_recording > 0) {
+ inprec_rstart(INPREC_CIAVSYNC);
+ inprec_ru32(ciavsync_counter);
+ inprec_rend();
+ } else if (input_recording < 0) {
+ uae_u32 v = -1;
+ while (inprec_pstart(INPREC_CIAVSYNC)) {
+ v = inprec_pu32();
+ inprec_pend();
+ }
+ if (v != ciavsync_counter)
+ write_log (L"INPREC: ciavsync sync error %d <> %d\n", v, ciavsync_counter);
+ }
+#endif
+ ciavsync_counter++;
+}
+
+/*
+
+0 0 -
+1 1 --
+2 2 -
+3 3 --
+4 4 -
+5 5 --
+
+0 x -
+1 0 --
+2 1 -
+3 2 --
+4 3 -
+5 4 --
+
+*/
+
+static void hsync_scandoubler (void)
+{
+ int i, idx1;
+ struct draw_info *dip1;
+ uaecptr bpltmp[8], bpltmpx[8];
+
+ next_lineno++;
+ scandoubled_line = 1;
+ debug_dma = 0;
+
+ for (i = 0; i < 8; i++) {
+ int diff;
+ bpltmp[i] = bplpt[i];
+ bpltmpx[i] = bplptx[i];
+ if (prevbpl[lof][vpos][i] && prevbpl[1 - lof][vpos][i]) {
+ diff = prevbpl[lof][vpos][i] - prevbpl[1 - lof][vpos][i];
+ if (lof) {
+ if (bplcon0 & 4)
+ bplpt[i] = prevbpl[lof][vpos][i] - diff;
+ } else {
+ if (bplcon0 & 4)
+ bplpt[i] = prevbpl[lof][vpos][i];
+ else
+ bplpt[i] = bplpt[i] - diff;
+
+ }
+ }
+ }
+
+ reset_decisions ();
+ plf_state = plf_idle;
+
+ // copy color changes
+ dip1 = curr_drawinfo + next_lineno - 1;
+ for (idx1 = dip1->first_color_change; idx1 < dip1->last_color_change; idx1++) {
+ struct color_change *cs2 = &curr_color_changes[idx1];
+ int regno = cs2->regno;
+ int hpos = cs2->linepos;
+ if (regno < 0x1000 && hpos < HBLANK_OFFSET && !(beamcon0 & 0x80) && prev_lineno >= 0) {
+ struct draw_info *pdip = curr_drawinfo + next_lineno - 1;
+ int idx = pdip->last_color_change;
+ pdip->last_color_change++;
+ pdip->nr_color_changes++;
+ curr_color_changes[idx].linepos = hpos + maxhpos + 1;
+ curr_color_changes[idx].regno = regno;
+ curr_color_changes[idx].value = cs2->value;
+ curr_color_changes[idx + 1].regno = -1;
+ } else {
+ struct color_change *cs1 = &curr_color_changes[next_color_change];
+ memcpy (cs1, cs2, sizeof (struct color_change));
+ next_color_change++;
+ }
+ }
+ curr_color_changes[next_color_change].regno = -1;
+
+ finish_decisions ();
+ hsync_record_line_state (next_lineno, nln_normal, thisline_changed);
+ hardware_line_completed (next_lineno);
+ scandoubled_line = 0;
+
+ for (i = 0; i < 8; i++) {
+ bplpt[i] = bpltmp[i];
+ bplptx[i] = bpltmpx[i];
+ }
+}
+
+static void hsync_handler (void)
+{
+ int hpos = current_hpos ();
+
+ if (!nocustom ()) {
+ sync_copper_with_cpu (maxhpos, 0);
+ last_copper_hpos = 0;
+ finish_decisions ();
+ if (thisline_decision.plfleft != -1) {
+ if (currprefs.collision_level > 1)
+ do_sprite_collisions ();
+ if (currprefs.collision_level > 2)
+ do_playfield_collisions ();
+ }
+ hsync_record_line_state (next_lineno, nextline_how, thisline_changed);
+ /* reset light pen latch */
+ if (vpos == sprite_vblank_endline) {
+ lightpen_triggered = 0;
+ sprite_0 = 0;
+ }
+ if (lightpen_cx > 0 && (bplcon0 & 8) && !lightpen_triggered && lightpen_cy == vpos) {
+ vpos_lpen = vpos;
+ hpos_lpen = lightpen_cx;
+ lightpen_triggered = 1;
+ }
+ }
+#ifdef A2065
+ a2065_hsync_handler ();
+#endif
+#ifdef CD32
+ AKIKO_hsync_handler ();
+#endif
+#ifdef CDTV
+ CDTV_hsync_handler ();
+#endif
+#ifdef CPUEMU_12
+ if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) {
+ decide_blitter (-1);
+ memset (cycle_line, 0, sizeof cycle_line);
+ }
+#endif
+
+ if (islinetoggle ())
+ lol ^= 1;
+
+ maxhpos = maxhpos_short + lol;
+ eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME;
+ eventtab[ev_hsync].oldcycles = get_cycles ();
+
+ CIA_hsync_handler (!(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock));
+ if (currprefs.cs_ciaatod > 0) {
+ static int cia_hsync;
+ cia_hsync -= 256;
+ if (cia_hsync <= 0) {
+ CIA_vsync_prehandler (1);
+ cia_hsync += ((MAXVPOS_PAL * MAXHPOS_PAL * 50 * 256) / (maxhpos * (currprefs.cs_ciaatod == 2 ? 60 : 50)));
+ }
+ }
+
+
+#ifdef PICASSO96
+ picasso_handle_hsync ();
+#endif
+ {
+ void ahi_hsync (void);
+ ahi_hsync ();
+ }
+
+ last_custom_value1 = 0xffff; // refresh slots should set this to 0xffff
+
+ if (!nocustom()) {
+ if (!currprefs.blitter_cycle_exact && bltstate != BLT_done && dmaen (DMA_BITPLANE) && diwstate == DIW_waiting_stop) {
+ blitter_slowdown (thisline_decision.plfleft, thisline_decision.plfright - (16 << fetchmode),
+ cycle_diagram_total_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)],
+ cycle_diagram_free_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)]);
+ }
+ hardware_line_completed (next_lineno);
+ if (doflickerfix () && interlace_seen)
+ hsync_scandoubler ();
+ }
+
+ /* In theory only an equality test is needed here - but if a program
+ goes haywire with the VPOSW register, it can cause us to miss this,
+ with vpos going into the thousands (and all the nasty consequences
+ this has). */
+ if (++vpos >= maxvpos + lof) {
+ if ((bplcon0 & 8) && !lightpen_triggered) {
+ vpos_lpen = vpos - 1;
+ hpos_lpen = maxhpos;
+ lightpen_triggered = 1;
+ }
+ vpos = 0;
+ vsync_handler ();
+#if 0
+ if (input_recording > 0) {
+ inprec_rstart (INPREC_VSYNC);
+ inprec_ru32 (vsync_counter);
+ inprec_rend ();
+ } else if (input_recording < 0) {
+ uae_u32 v = -1;
+ while (inprec_pstart(INPREC_VSYNC)) {
+ v = inprec_pu32();
+ inprec_pend();
+ }
+ if (v != vsync_counter)
+ write_log (L"INPREC: vsync sync error %d <> %d\n", v, vsync_counter);
+ }
+#endif
+ vsync_counter++;
+ if (currprefs.cs_ciaatod == 0)
+ CIA_vsync_prehandler (!(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock));
+ }
+
+#ifdef CPUEMU_12
+ if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) {
+ int hp = maxhpos - 1, i;
+ for (i = 0; i < 4; i++) {
+ alloc_cycle (hp, i == 0 ? CYCLE_STROBE : CYCLE_REFRESH); /* strobe */
+#ifdef DEBUGGER
+ if (debug_dma)
+ record_dma (i == 0 ? (vpos + 1 == maxvpos + lof ? 0x38 : 0x3c) : 0x1fe, 0xffff, 0xffffffff, hp, vpos, DMARECORD_REFRESH);
+#endif
+ hp += 2;
+ if (hp >= maxhpos)
+ hp -= maxhpos;
+ }
+ }
+#endif
+
+
+ DISK_hsync (maxhpos);
+ if (currprefs.produce_sound)
+ audio_hsync (-1);
+
+#ifdef JIT
+ if (compiled_code) {
+ if (currprefs.m68k_speed == -1) {
+ static int count = 0;
+ count++;
+ if (trigger_frh (count)) {
+ frh_handler ();
+ }
+ is_lastline = trigger_frh (count + 1) && ! rpt_did_reset;
+ } else {
+ is_lastline = 0;
+ }
+ } else {
+#endif
+ is_lastline = vpos + 1 == maxvpos + lof && currprefs.m68k_speed == -1;
+#ifdef JIT
+ }
+#endif
+
+ if (!nocustom ()) {
+ int lineno = vpos;
+ if ((bplcon0 & 4) && currprefs.gfx_linedbl)
+ notice_interlace_seen ();
+ nextline_how = nln_normal;
+ if (doflickerfix () && interlace_seen) {
+ lineno *= 2;
+ } else if (currprefs.gfx_linedbl && (doublescan <= 0 || interlace_seen > 0)) {
+ lineno *= 2;
+ nextline_how = currprefs.gfx_linedbl == 1 ? nln_doubled : nln_nblack;
+ if ((bplcon0 & 4) || (interlace_seen > 0 && !lof)) {
+ if (!lof) {
+ lineno++;
+ nextline_how = nln_lower;
+ } else {
+ nextline_how = nln_upper;
+ }
+ }
+ }
+ prev_lineno = next_lineno;
+ next_lineno = lineno;
+ reset_decisions ();
+ }
+
+ if (uae_int_requested) {
+ INTREQ (0x8000 | 0x0008);
+ }
+
+ {
+ extern int volatile uaenet_int_requested;
+ extern int volatile uaenet_vsync_requested;
+ if (uaenet_int_requested || (uaenet_vsync_requested && vpos == 10)) {
+ INTREQ (0x8000 | 0x2000);
+ }
+ }
+
+ {
+ extern void bsdsock_fake_int_handler (void);
+ extern int volatile bsd_int_requested;
+ if (bsd_int_requested)
+ bsdsock_fake_int_handler ();
+ }
+
+ /* See if there's a chance of a copper wait ending this line. */
+ cop_state.hpos = 0;
+ cop_state.last_write = 0;
+ compute_spcflag_copper (maxhpos);
+ serial_hsynchandler ();
+#ifdef CUSTOM_SIMPLE
+ do_sprites (0);
+#endif
+
+ while (input_recording < 0 && inprec_pstart (INPREC_KEY)) {
+ record_key_direct (inprec_pu8 ());
+ inprec_pend ();
+ }
+ while (input_recording < 0 && inprec_pstart (INPREC_DISKREMOVE)) {
+ disk_eject (inprec_pu8 ());
+ inprec_pend ();
+ }
+ while (input_recording < 0 && inprec_pstart (INPREC_DISKINSERT)) {
+ int drv = inprec_pu8 ();
+ inprec_pstr (currprefs.df[drv]);
+ _tcscpy (changed_prefs.df[drv], currprefs.df[drv]);
+ disk_insert_force (drv, currprefs.df[drv]);
+ inprec_pend ();
+ }
+
+ inputdevice_hsync ();
+ gayle_hsync ();
+ scsi_hsync ();
+
+ hsync_counter++;
+ //copper_check (2);
+
+ if (GET_PLANES (bplcon0) > 0 && dmaen (DMA_BITPLANE)) {
+ if (vpos > last_planes_vpos)
+ last_planes_vpos = vpos;
+ if (vpos >= minfirstline && first_planes_vpos == 0) {
+ first_planes_vpos = vpos;
+ } else if (vpos == maxvpos - 1) {
+ last_planes_vpos = vpos - 1;
+ }
+ }
+ if (diw_change == 0) {
+ if (vpos >= first_planes_vpos && vpos <= last_planes_vpos) {
+ if (diwlastword > diwlastword_total)
+ diwlastword_total = diwlastword;
+ if (diwfirstword < diwfirstword_total) {
+ diwfirstword_total = diwfirstword;
+ firstword_bplcon1 = bplcon1;
+ }
+ }
+ if (diwstate == DIW_waiting_stop) {
+ int f = 8 << fetchmode;
+ if (plfstrt + f < ddffirstword_total + f)
+ ddffirstword_total = plfstrt + f;
+ if (plfstop + 2 * f > ddflastword_total + 2 * f)
+ ddflastword_total = plfstop + 2 * f;
+ }
+ if ((plffirstline < plffirstline_total || (plffirstline_total == minfirstline && vpos > minfirstline)) && plffirstline < vpos / 2) {
+ firstword_bplcon1 = bplcon1;
+ if (plffirstline < minfirstline)
+ plffirstline_total = minfirstline;
+ else
+ plffirstline_total = plffirstline;
+ }
+ if (plflastline > plflastline_total && plflastline > plffirstline_total && plflastline > maxvpos / 2)
+ plflastline_total = plflastline;
+ }
+ if (diw_change > 0)
+ diw_change--;
+
+
+#if 0
+ {
+ static int skip;
+ if (M68K_GETPC >= 0x0C0D7A2 && M68K_GETPC < 0x00C0D7B2 && vpos == 0xf3) {
+ if (!skip)
+ activate_debugger ();
+ skip = 1;
+ }
+ if (vpos != 0xf3)
+ skip = 0;
+ }
+#endif
+}
+
+static void MISC_handler (void)
+{
+ int i, recheck;
+ evt mintime;
+ evt ct = get_cycles ();
+ static int recursive;
+
+ if (recursive)
+ return;
+ recursive++;
+ eventtab[ev_misc].active = 0;
+ recheck = 1;
+ while (recheck) {
+ recheck = 0;
+ mintime = ~0L;
+ for (i = 0; i < ev2_max; i++) {
+ if (eventtab2[i].active) {
+ if (eventtab2[i].evtime == ct) {
+ eventtab2[i].active = 0;
+ eventtab2[i].handler (eventtab2[i].data);
+ if (eventtab2[i].active)
+ recheck = 1;
+ } else {
+ evt eventtime = eventtab2[i].evtime - ct;
+ if (eventtime < mintime)
+ mintime = eventtime;
+ }
+ }
+ }
+ }
+ if (mintime != ~0L) {
+ eventtab[ev_misc].active = 1;
+ eventtab[ev_misc].oldcycles = ct;
+ eventtab[ev_misc].evtime = ct + mintime;
+ events_schedule ();
+ }
+ recursive--;
+}
+
+STATIC_INLINE void event2_newevent_x (int no, evt t, uae_u32 data, evfunc2 func)
+{
+ evt et;
+
+ if (((int)t) <= 0) {
+ func (data);
+ return;
+ }
+
+ et = t * CYCLE_UNIT + get_cycles ();
+
+ if (no < 0) {
+ for (no = ev2_misc; no < ev2_max; no++) {
+ if (!eventtab2[no].active)
+ break;
+ if (eventtab2[no].evtime == et && eventtab2[no].handler == func) {
+ eventtab2[no].handler (eventtab2[no].data);
+ break;
+ }
+ }
+ if (no == ev2_max) {
+ write_log (L"out of event2's! PC=%x\n", M68K_GETPC);
+ return;
+ }
+ }
+ eventtab2[no].active = 1;
+ eventtab2[no].evtime = et;
+ eventtab2[no].handler = func;
+ eventtab2[no].data = data;
+ MISC_handler ();
+}
+void event2_newevent (int no, evt t)
+{
+ event2_newevent_x (no, t, 0, eventtab2[no].handler);
+}
+void event2_newevent2 (evt t, uae_u32 data, evfunc2 func)
+{
+ event2_newevent_x (-1, t, data, func);
+}
+
+void event2_remevent (int no)
+{
+ eventtab2[no].active = 0;
+}
+
+void init_eventtab (void)
+{
+ int i;
+
+ nextevent = 0;
+ set_cycles (0);
+ for (i = 0; i < ev_max; i++) {
+ eventtab[i].active = 0;
+ eventtab[i].oldcycles = 0;
+ }
+ for (i = 0; i < ev2_max; i++) {
+ eventtab2[i].active = 0;
+ }
+
+ eventtab[ev_cia].handler = CIA_handler;
+ eventtab[ev_hsync].handler = hsync_handler;
+ eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME;
+ eventtab[ev_hsync].active = 1;
+ eventtab[ev_misc].handler = MISC_handler;
+ eventtab[ev_audio].handler = audio_evhandler;
+
+ eventtab2[ev2_blitter].handler = blitter_handler;
+ eventtab2[ev2_disk].handler = DISK_handler;
+
+ events_schedule ();
+}
+
+void customreset (int hardreset)
+{
+ int i;
+ int zero = 0;
+
+ target_reset ();
+ reset_all_systems ();
+ write_log (L"Reset at %08X\n", M68K_GETPC);
+ memory_map_dump ();
+
+ hsync_counter = 0;
+ vsync_counter = 0;
+ ciavsync_counter = 0;
+ lightpen_x = lightpen_y = -1;
+ lightpen_triggered = 0;
+ lightpen_cx = lightpen_cy = -1;
+ if (! savestate_state) {
+ currprefs.chipset_mask = changed_prefs.chipset_mask;
+ update_mirrors ();
+ if (!aga_mode) {
+ for (i = 0; i < 32; i++) {
+ current_colors.color_regs_ecs[i] = 0;
+ current_colors.acolors[i] = getxcolor (0);
+ }
+#ifdef AGA
+ } else {
+ for (i = 0; i < 256; i++) {
+ current_colors.color_regs_aga[i] = 0;
+ current_colors.acolors[i] = getxcolor (0);
+ }
+#endif
+ }
+
+ clxdat = 0;
+
+ /* Clear the armed flags of all sprites. */
+ memset (spr, 0, sizeof spr);
+ nr_armed = 0;
+
+ dmacon = intena = 0;
+
+ copcon = 0;
+ DSKLEN (0, 0);
+
+ bplcon0 = 0;
+ bplcon4 = 0x0011; /* Get AGA chipset into ECS compatibility mode */
+ bplcon3 = 0x0C00;
+
+ diwhigh = 0;
+ diwhigh_written = 0;
+
+ FMODE (0, 0);
+ CLXCON (0);
+ setup_fmodes (0);
+ sprite_width = GET_SPRITEWIDTH (fmode);
+ new_beamcon0 = currprefs.ntscmode ? 0x00 : 0x20;
+ }
+
+ gayle_reset (hardreset);
+#ifdef AUTOCONFIG
+ expamem_reset ();
+#endif
+ a1000_reset ();
+ DISK_reset ();
+ CIA_reset ();
+ gayle_reset (0);
+#ifdef A2091
+ a2091_reset ();
+#endif
+#ifdef NCR
+ ncr_reset ();
+#endif
+#ifdef JIT
+ compemu_reset ();
+#endif
+ unset_special (~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE));
+
+ vpos = 0;
+
+ inputdevice_reset ();
+ timehack_alive = 0;
+
+ curr_sprite_entries = 0;
+ prev_sprite_entries = 0;
+ sprite_entries[0][0].first_pixel = 0;
+ sprite_entries[1][0].first_pixel = MAX_SPR_PIXELS;
+ sprite_entries[0][1].first_pixel = 0;
+ sprite_entries[1][1].first_pixel = MAX_SPR_PIXELS;
+ memset (spixels, 0, 2 * MAX_SPR_PIXELS * sizeof *spixels);
+ memset (&spixstate, 0, sizeof spixstate);
+
+ bltstate = BLT_done;
+ cop_state.state = COP_stop;
+ diwstate = DIW_waiting_start;
+ hdiwstate = DIW_waiting_start;
+ set_cycles (0);
+
+ hack_vpos = 0;
+ init_hz ();
+ vpos_lpen = -1;
+
+ audio_reset ();
+ if (savestate_state != STATE_RESTORE) {
+ /* must be called after audio_reset */
+ adkcon = 0;
+ serial_uartbreak (0);
+ audio_update_adkmasks ();
+ }
+
+ init_sprites ();
+
+ init_hardware_frame ();
+ drawing_init ();
+
+ reset_decisions ();
+
+ bogusframe = 1;
+
+ if (savestate_state == STATE_RESTORE) {
+ uae_u16 v;
+ uae_u32 vv;
+
+ audio_update_adkmasks ();
+ INTENA (0);
+ INTREQ (0);
+ COPJMP (1, 1);
+ v = bplcon0;
+ BPLCON0 (0, 0);
+ BPLCON0 (0, v);
+ FMODE (0, fmode);
+ if (!(currprefs.chipset_mask & CSMASK_AGA)) {
+ for(i = 0 ; i < 32 ; i++) {
+ vv = current_colors.color_regs_ecs[i];
+ current_colors.color_regs_ecs[i] = -1;
+ record_color_change (0, i, vv);
+ remembered_color_entry = -1;
+ current_colors.color_regs_ecs[i] = vv;
+ current_colors.acolors[i] = xcolors[vv];
+ }
+#ifdef AGA
+ } else {
+ for(i = 0 ; i < 256 ; i++) {
+ vv = current_colors.color_regs_aga[i];
+ current_colors.color_regs_aga[i] = -1;
+ record_color_change (0, i, vv);
+ remembered_color_entry = -1;
+ current_colors.color_regs_aga[i] = vv;
+ current_colors.acolors[i] = CONVERT_RGB (vv);
+ }
+#endif
+ }
+ CLXCON (clxcon);
+ CLXCON2 (clxcon2);
+ calcdiw ();
+ write_log (L"State restored\n");
+ for (i = 0; i < 8; i++)
+ nr_armed += spr[i].armed != 0;
+ if (! currprefs.produce_sound) {
+ eventtab[ev_audio].active = 0;
+ events_schedule ();
+ }
+ }
+ sprres = expand_sprres (bplcon0, bplcon3);
+ sprite_width = GET_SPRITEWIDTH (fmode);
+ setup_fmodes (0);
+
+#ifdef ACTION_REPLAY
+ /* Doing this here ensures we can use the 'reset' command from within AR */
+ action_replay_reset ();
+#endif
+#if defined(ENFORCER)
+ enforcer_disable ();
+#endif
+
+ if (hardreset)
+ rtc_hardreset();
+
+ picasso_reset ();
+}
+
+void dumpcustom (void)
+{
+ console_out_f (L"DMACON: %x INTENA: %x INTREQ: %x VPOS: %x HPOS: %x\n", DMACONR (current_hpos ()),
+ (unsigned int)intena, (unsigned int)intreq, (unsigned int)vpos, (unsigned int)current_hpos());
+ console_out_f (L"COP1LC: %08lx, COP2LC: %08lx COPPTR: %08lx\n", (unsigned long)cop1lc, (unsigned long)cop2lc, cop_state.ip);
+ console_out_f (L"DIWSTRT: %04x DIWSTOP: %04x DDFSTRT: %04x DDFSTOP: %04x\n",
+ (unsigned int)diwstrt, (unsigned int)diwstop, (unsigned int)ddfstrt, (unsigned int)ddfstop);
+ console_out_f (L"BPLCON 0: %04x 1: %04x 2: %04x 3: %04x 4: %04x\n", bplcon0, bplcon1, bplcon2, bplcon3, bplcon4);
+ if (timeframes) {
+ console_out_f (L"Average frame time: %.2f ms [frames: %d time: %d]\n",
+ (double)frametime / timeframes, timeframes, frametime);
+ if (total_skipped)
+ console_out_f (L"Skipped frames: %d\n", total_skipped);
+ }
+}
+
+static void gen_custom_tables (void)
+{
+ int i;
+ for (i = 0; i < 256; i++) {
+ sprtaba[i] = ((((i >> 7) & 1) << 0)
+ | (((i >> 6) & 1) << 2)
+ | (((i >> 5) & 1) << 4)
+ | (((i >> 4) & 1) << 6)
+ | (((i >> 3) & 1) << 8)
+ | (((i >> 2) & 1) << 10)
+ | (((i >> 1) & 1) << 12)
+ | (((i >> 0) & 1) << 14));
+ sprtabb[i] = sprtaba[i] * 2;
+ sprite_ab_merge[i] = (((i & 15) ? 1 : 0)
+ | ((i & 240) ? 2 : 0));
+ }
+ for (i = 0; i < 16; i++) {
+ clxmask[i] = (((i & 1) ? 0xF : 0x3)
+ | ((i & 2) ? 0xF0 : 0x30)
+ | ((i & 4) ? 0xF00 : 0x300)
+ | ((i & 8) ? 0xF000 : 0x3000));
+ sprclx[i] = (((i & 0x3) == 0x3 ? 1 : 0)
+ | ((i & 0x5) == 0x5 ? 2 : 0)
+ | ((i & 0x9) == 0x9 ? 4 : 0)
+ | ((i & 0x6) == 0x6 ? 8 : 0)
+ | ((i & 0xA) == 0xA ? 16 : 0)
+ | ((i & 0xC) == 0xC ? 32 : 0)) << 9;
+ }
+}
+
+/* mousehack is now in "filesys boot rom" */
+static uae_u32 REGPARAM2 mousehack_helper_old (struct TrapContext *ctx)
+{
+ return 0;
+}
+
+static int allocate_sprite_tables (void)
+{
+#ifdef OS_WITHOUT_MEMORY_MANAGEMENT
+ int num;
+
+ delta_sprite_entry = 0;
+ delta_color_change = 0;
+
+ if (!sprite_entries[0]) {
+ max_sprite_entry = DEFAULT_MAX_SPRITE_ENTRY;
+ max_color_change = DEFAULT_MAX_COLOR_CHANGE;
+
+ for (num = 0; num < 2; num++) {
+ sprite_entries[num] = xmalloc (max_sprite_entry * sizeof (struct sprite_entry));
+ color_changes[num] = xmalloc (max_color_change * sizeof (struct color_change));
+
+ if (sprite_entries[num] && color_changes[num]) {
+ memset (sprite_entries[num], 0, max_sprite_entry * sizeof (struct sprite_entry));
+ memset (color_changes[num], 0, max_color_change * sizeof (struct color_change));
+ } else
+ return 0;
+ }
+ }
+
+ if (!spixels) {
+ spixels = xmalloc (2 * MAX_SPR_PIXELS * sizeof *spixels);
+ if (!spixels)
+ return 0;
+ }
+#endif
+ return 1;
+}
+
+int custom_init (void)
+{
+
+ if (!allocate_sprite_tables ())
+ return 0;
+
+#ifdef AUTOCONFIG
+ if (uae_boot_rom) {
+ uaecptr pos;
+ pos = here ();
+
+ org (rtarea_base + 0xFF70);
+ calltrap (deftrap (mousehack_helper_old));
+ dw (RTS);
+
+ org (rtarea_base + 0xFFA0);
+ calltrap (deftrap (timehack_helper));
+ dw (RTS);
+
+ org (pos);
+ }
+#endif
+
+ gen_custom_tables ();
+ build_blitfilltable ();
+
+ drawing_init ();
+
+ create_cycle_diagram_table ();
+
+ return 1;
+}
+
+/* Custom chip memory bank */
+
+static uae_u32 REGPARAM3 custom_lget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 custom_wget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 custom_bget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 custom_lgeti (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 custom_wgeti (uaecptr) REGPARAM;
+static void REGPARAM3 custom_lput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 custom_wput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 custom_bput (uaecptr, uae_u32) REGPARAM;
+
+addrbank custom_bank = {
+ custom_lget, custom_wget, custom_bget,
+ custom_lput, custom_wput, custom_bput,
+ default_xlate, default_check, NULL, L"Custom chipset",
+ custom_lgeti, custom_wgeti, ABFLAG_IO
+};
+
+static uae_u32 REGPARAM2 custom_wgeti (uaecptr addr)
+{
+ if (currprefs.cpu_model >= 68020)
+ return dummy_wgeti (addr);
+ return custom_wget (addr);
+}
+static uae_u32 REGPARAM2 custom_lgeti (uaecptr addr)
+{
+ if (currprefs.cpu_model >= 68020)
+ return dummy_lgeti (addr);
+ return custom_lget (addr);
+}
+
+STATIC_INLINE uae_u32 REGPARAM2 custom_wget_1 (int hpos, uaecptr addr, int noput)
+{
+ uae_u16 v;
+#ifdef JIT
+ special_mem |= S_READ;
+#endif
+ addr &= 0xfff;
+#if CUSTOM_DEBUG > 2
+ write_log (L"%d:%d:wget: %04X=%04X pc=%p\n", current_hpos(), vpos, addr, addr & 0x1fe, m68k_getpc ());
+#endif
+ switch (addr & 0x1fe) {
+ case 0x002: v = DMACONR (hpos); break;
+ case 0x004: v = VPOSR (); break;
+ case 0x006: v = VHPOSR (); break;
+
+ case 0x00A: v = JOY0DAT (); break;
+ case 0x00C: v = JOY1DAT (); break;
+ case 0x00E: v = CLXDAT (); break;
+ case 0x010: v = ADKCONR (); break;
+
+ case 0x012: v = POT0DAT (); break;
+ case 0x014: v = POT1DAT (); break;
+ case 0x016: v = POTGOR (); break;
+ case 0x018: v = SERDATR (); break;
+ case 0x01A: v = DSKBYTR (hpos); break;
+ case 0x01C: v = INTENAR (); break;
+ case 0x01E: v = INTREQR (); break;
+ case 0x07C: v = DENISEID (); break;
+
+#ifdef AGA
+ case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A:
+ case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196:
+ case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2:
+ case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE:
+ case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA:
+ case 0x1BC: case 0x1BE:
+ v = COLOR_READ ((addr & 0x3E) / 2);
+ break;
+#endif
+
+ default:
+ /* OCS/ECS:
+ * reading write-only register causes write with last value in chip
+ * bus (custom registers, chipram, slowram)
+ * and finally returns either all ones or something weird if DMA happens
+ * in next (or previous) cycle.. FIXME.
+ *
+ * OCS-only special case: DFF000 (BLTDAT) will always return whatever was left in bus
+ *
+ * AGA:
+ * only writes to custom registers change last value, read returns
+ * last value which then changes to all ones (following read will return
+ * all ones)
+ */
+ v = last_custom_value1;
+ if (!noput) {
+ int r;
+ uae_u16 old = last_custom_value1;
+ uae_u16 l = currprefs.cpu_compatible && currprefs.cpu_model == 68000 ? regs.irc : 0xffff;//last_custom_value;
+ decide_line (hpos);
+ decide_fetch (hpos);
+ decide_blitter (hpos);
+ debug_wputpeek (0xdff000 + addr, l);
+ r = custom_wput_1 (hpos, addr, l, 1);
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ v = l;
+ last_custom_value1 = 0xffff;
+ } else if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
+ v = old;
+ } else {
+ if ((addr & 0x1fe) == 0) {
+ if (is_cycle_ce ())
+ v = old;
+ else
+ v = l;
+ } else {
+ v = old;
+ }
+ }
+#if CUSTOM_DEBUG > 0
+ write_log (L"%08X read = %04X. Value written=%04X PC=%08x\n", 0xdff000 | addr, v, l, M68K_GETPC);
+#endif
+
+ }
+ return v;
+ }
+ return v;
+}
+
+STATIC_INLINE uae_u32 custom_wget2 (uaecptr addr)
+{
+ uae_u32 v;
+ int hpos = current_hpos ();
+
+ sync_copper_with_cpu (hpos, 1);
+ v = custom_wget_1 (hpos, addr, 0);
+#ifdef ACTION_REPLAY
+#ifdef ACTION_REPLAY_COMMON
+ addr &= 0x1ff;
+ ar_custom[addr + 0] = (uae_u8)(v >> 8);
+ ar_custom[addr + 1] = (uae_u8)(v);
+#endif
+#endif
+ return v;
+}
+
+static uae_u32 REGPARAM2 custom_wget (uaecptr addr)
+{
+ uae_u32 v;
+
+ if (addr & 1) {
+ /* think about move.w $dff005,d0.. (68020+ only) */
+ addr &= ~1;
+ v = custom_wget2 (addr) << 8;
+ v |= custom_wget2 (addr + 2) >> 8;
+ return v;
+ }
+ return custom_wget2 (addr);
+}
+
+static uae_u32 REGPARAM2 custom_bget (uaecptr addr)
+{
+#ifdef JIT
+ special_mem |= S_READ;
+#endif
+ return custom_wget2 (addr & ~1) >> (addr & 1 ? 0 : 8);
+}
+
+static uae_u32 REGPARAM2 custom_lget (uaecptr addr)
+{
+#ifdef JIT
+ special_mem |= S_READ;
+#endif
+ return ((uae_u32)custom_wget (addr) << 16) | custom_wget (addr + 2);
+}
+static int REGPARAM2 custom_wput_1 (int hpos, uaecptr addr, uae_u32 value, int noget)
+{
+ addr &= 0x1FE;
+ value &= 0xffff;
+#ifdef ACTION_REPLAY
+#ifdef ACTION_REPLAY_COMMON
+ ar_custom[addr+0]=(uae_u8)(value>>8);
+ ar_custom[addr+1]=(uae_u8)(value);
+#endif
+#endif
+ switch (addr) {
+ case 0x00E: CLXDAT (); break;
+
+ case 0x020: DSKPTH (value); break;
+ case 0x022: DSKPTL (value); break;
+ case 0x024: DSKLEN (value, hpos); break;
+ case 0x026: DSKDAT (value); break;
+
+ case 0x02A: VPOSW (value); break;
+ case 0x02C: VHPOSW (value); break;
+ case 0x02E: COPCON (value); break;
+ case 0x030: SERDAT (value); break;
+ case 0x032: SERPER (value); break;
+ case 0x034: POTGO (value); break;
+
+ case 0x040: BLTCON0 (hpos, value); break;
+ case 0x042: BLTCON1 (hpos, value); break;
+
+ case 0x044: BLTAFWM (hpos, value); break;
+ case 0x046: BLTALWM (hpos, value); break;
+
+ case 0x050: BLTAPTH (hpos, value); break;
+ case 0x052: BLTAPTL (hpos, value); break;
+ case 0x04C: BLTBPTH (hpos, value); break;
+ case 0x04E: BLTBPTL (hpos, value); break;
+ case 0x048: BLTCPTH (hpos, value); break;
+ case 0x04A: BLTCPTL (hpos, value); break;
+ case 0x054: BLTDPTH (hpos, value); break;
+ case 0x056: BLTDPTL (hpos, value); break;
+
+ case 0x058: BLTSIZE (hpos, value); break;
+
+ case 0x064: BLTAMOD (hpos, value); break;
+ case 0x062: BLTBMOD (hpos, value); break;
+ case 0x060: BLTCMOD (hpos, value); break;
+ case 0x066: BLTDMOD (hpos, value); break;
+
+ case 0x070: BLTCDAT (hpos, value); break;
+ case 0x072: BLTBDAT (hpos, value); break;
+ case 0x074: BLTADAT (hpos, value); break;
+
+ case 0x07E: DSKSYNC (hpos, value); break;
+
+ case 0x080: COP1LCH (value); break;
+ case 0x082: COP1LCL (value); break;
+ case 0x084: COP2LCH (value); break;
+ case 0x086: COP2LCL (value); break;
+
+ case 0x088: COPJMP (1, 0); break;
+ case 0x08A: COPJMP (2, 0); break;
+
+ case 0x08E: DIWSTRT (hpos, value); break;
+ case 0x090: DIWSTOP (hpos, value); break;
+ case 0x092: DDFSTRT (hpos, value); break;
+ case 0x094: DDFSTOP (hpos, value); break;
+
+ case 0x096: DMACON (hpos, value); break;
+ case 0x098: CLXCON (value); break;
+ case 0x09A: INTENA (value); break;
+ case 0x09C: INTREQ (value); break;
+ case 0x09E: ADKCON (hpos, value); break;
+
+ case 0x0A0: AUDxLCH (0, value); break;
+ case 0x0A2: AUDxLCL (0, value); break;
+ case 0x0A4: AUDxLEN (0, value); break;
+ case 0x0A6: AUDxPER (0, value); break;
+ case 0x0A8: AUDxVOL (0, value); break;
+ case 0x0AA: AUDxDAT (0, value); break;
+
+ case 0x0B0: AUDxLCH (1, value); break;
+ case 0x0B2: AUDxLCL (1, value); break;
+ case 0x0B4: AUDxLEN (1, value); break;
+ case 0x0B6: AUDxPER (1, value); break;
+ case 0x0B8: AUDxVOL (1, value); break;
+ case 0x0BA: AUDxDAT (1, value); break;
+
+ case 0x0C0: AUDxLCH (2, value); break;
+ case 0x0C2: AUDxLCL (2, value); break;
+ case 0x0C4: AUDxLEN (2, value); break;
+ case 0x0C6: AUDxPER (2, value); break;
+ case 0x0C8: AUDxVOL (2, value); break;
+ case 0x0CA: AUDxDAT (2, value); break;
+
+ case 0x0D0: AUDxLCH (3, value); break;
+ case 0x0D2: AUDxLCL (3, value); break;
+ case 0x0D4: AUDxLEN (3, value); break;
+ case 0x0D6: AUDxPER (3, value); break;
+ case 0x0D8: AUDxVOL (3, value); break;
+ case 0x0DA: AUDxDAT (3, value); break;
+
+ case 0x0E0: BPLxPTH (hpos, value, 0); break;
+ case 0x0E2: BPLxPTL (hpos, value, 0); break;
+ case 0x0E4: BPLxPTH (hpos, value, 1); break;
+ case 0x0E6: BPLxPTL (hpos, value, 1); break;
+ case 0x0E8: BPLxPTH (hpos, value, 2); break;
+ case 0x0EA: BPLxPTL (hpos, value, 2); break;
+ case 0x0EC: BPLxPTH (hpos, value, 3); break;
+ case 0x0EE: BPLxPTL (hpos, value, 3); break;
+ case 0x0F0: BPLxPTH (hpos, value, 4); break;
+ case 0x0F2: BPLxPTL (hpos, value, 4); break;
+ case 0x0F4: BPLxPTH (hpos, value, 5); break;
+ case 0x0F6: BPLxPTL (hpos, value, 5); break;
+ case 0x0F8: BPLxPTH (hpos, value, 6); break;
+ case 0x0FA: BPLxPTL (hpos, value, 6); break;
+ case 0x0FC: BPLxPTH (hpos, value, 7); break;
+ case 0x0FE: BPLxPTL (hpos, value, 7); break;
+
+ case 0x100: BPLCON0 (hpos, value); break;
+ case 0x102: BPLCON1 (hpos, value); break;
+ case 0x104: BPLCON2 (hpos, value); break;
+#ifdef ECS_DENISE
+ case 0x106: BPLCON3 (hpos, value); break;
+#endif
+
+ case 0x108: BPL1MOD (hpos, value); break;
+ case 0x10A: BPL2MOD (hpos, value); break;
+#ifdef AGA
+ case 0x10E: CLXCON2 (value); break;
+#endif
+
+ case 0x110: BPLxDAT (hpos, 0, value); break;
+ case 0x112: BPLxDAT (hpos, 1, value); break;
+ case 0x114: BPLxDAT (hpos, 2, value); break;
+ case 0x116: BPLxDAT (hpos, 3, value); break;
+ case 0x118: BPLxDAT (hpos, 4, value); break;
+ case 0x11A: BPLxDAT (hpos, 5, value); break;
+ case 0x11C: BPLxDAT (hpos, 6, value); break;
+ case 0x11E: BPLxDAT (hpos, 7, value); break;
+
+ case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A:
+ case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196:
+ case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2:
+ case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE:
+ case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA:
+ case 0x1BC: case 0x1BE:
+ COLOR_WRITE (hpos, value & 0xFFF, (addr & 0x3E) / 2);
+ break;
+ case 0x120: case 0x124: case 0x128: case 0x12C:
+ case 0x130: case 0x134: case 0x138: case 0x13C:
+ SPRxPTH (hpos, value, (addr - 0x120) / 4);
+ break;
+ case 0x122: case 0x126: case 0x12A: case 0x12E:
+ case 0x132: case 0x136: case 0x13A: case 0x13E:
+ SPRxPTL (hpos, value, (addr - 0x122) / 4);
+ break;
+ case 0x140: case 0x148: case 0x150: case 0x158:
+ case 0x160: case 0x168: case 0x170: case 0x178:
+ SPRxPOS (hpos, value, (addr - 0x140) / 8);
+ break;
+ case 0x142: case 0x14A: case 0x152: case 0x15A:
+ case 0x162: case 0x16A: case 0x172: case 0x17A:
+ SPRxCTL (hpos, value, (addr - 0x142) / 8);
+ break;
+ case 0x144: case 0x14C: case 0x154: case 0x15C:
+ case 0x164: case 0x16C: case 0x174: case 0x17C:
+ SPRxDATA (hpos, value, (addr - 0x144) / 8);
+ break;
+ case 0x146: case 0x14E: case 0x156: case 0x15E:
+ case 0x166: case 0x16E: case 0x176: case 0x17E:
+ SPRxDATB (hpos, value, (addr - 0x146) / 8);
+ break;
+
+ case 0x36: JOYTEST (value); break;
+ case 0x5A: BLTCON0L (hpos, value); break;
+ case 0x5C: BLTSIZV (hpos, value); break;
+ case 0x5E: BLTSIZH (hpos, value); break;
+ case 0x1E4: DIWHIGH (hpos, value); break;
+#ifdef AGA
+ case 0x10C: BPLCON4 (hpos, value); break;
+#endif
+
+#ifndef CUSTOM_SIMPLE
+ case 0x1DC: BEAMCON0 (value); break;
+#ifdef ECS_DENISE
+ case 0x1C0: if (htotal != value) { htotal = value; varsync (); } break;
+ case 0x1C2: if (hsstop != value) { hsstop = value; varsync (); } break;
+ case 0x1C4: if (hbstrt != value) { hbstrt = value; varsync (); } break;
+ case 0x1C6: if (hbstop != value) { hbstop = value; varsync (); } break;
+ case 0x1C8: if (vtotal != value) { vtotal = value; varsync (); } break;
+ case 0x1CA: if (vsstop != value) { vsstop = value; varsync (); } break;
+ case 0x1CC: if (vbstrt < value || vbstrt > value + 1) { vbstrt = value; varsync (); } break;
+ case 0x1CE: if (vbstop < value || vbstop > value + 1) { vbstop = value; varsync (); } break;
+ case 0x1DE: if (hsstrt != value) { hsstrt = value; varsync (); } break;
+ case 0x1E0: if (vsstrt != value) { vsstrt = value; varsync (); } break;
+ case 0x1E2: if (hcenter != value) { hcenter = value; varsync (); } break;
+#endif
+#endif
+
+#ifdef AGA
+ case 0x1FC: FMODE (hpos, value); break;
+#endif
+ case 0x1FE: FNULL (value); break;
+
+ /* writing to read-only register causes read access */
+ default:
+ if (!noget) {
+#if CUSTOM_DEBUG > 0
+ write_log (L"%04X written %08x\n", addr, M68K_GETPC);
+#endif
+ custom_wget_1 (hpos, addr, 1);
+ }
+ return 1;
+ }
+ return 0;
+}
+
+static void REGPARAM2 custom_wput (uaecptr addr, uae_u32 value)
+{
+ int hpos = current_hpos ();
+#ifdef JIT
+ special_mem |= S_WRITE;
+#endif
+#if CUSTOM_DEBUG > 2
+ write_log (L"%d:%d:wput: %04X %04X pc=%p\n", hpos, vpos, addr & 0x01fe, value & 0xffff, m68k_getpc ());
+#endif
+ sync_copper_with_cpu (hpos, 1);
+ if (addr & 1) {
+ addr &= ~1;
+ custom_wput_1 (hpos, addr, (value >> 8) | (value & 0xff00), 0);
+ custom_wput_1 (hpos, addr + 2, (value << 8) | (value & 0x00ff), 0);
+ return;
+ }
+ custom_wput_1 (hpos, addr, value, 0);
+}
+
+static void REGPARAM2 custom_bput (uaecptr addr, uae_u32 value)
+{
+ static int warned;
+ uae_u16 rval;
+
+ if (addr & 1) {
+ rval = value & 0xff;
+ } else {
+ rval = (value << 8) | (value & 0xFF);
+ }
+
+#ifdef JIT
+ special_mem |= S_WRITE;
+#endif
+ if (currprefs.cpu_model == 68060) {
+ if (addr & 1)
+ custom_wput (addr & ~1, rval);
+ else
+ custom_wput (addr, value << 8);
+ } else {
+ custom_wput (addr & ~1, rval);
+ }
+ if (warned < 10) {
+ if (M68K_GETPC < 0xe00000 || M68K_GETPC >= 0x10000000) {
+ write_log (L"Byte put to custom register %04X PC=%08X\n", addr, M68K_GETPC);
+ warned++;
+ }
+ }
+}
+
+static void REGPARAM2 custom_lput(uaecptr addr, uae_u32 value)
+{
+#ifdef JIT
+ special_mem |= S_WRITE;
+#endif
+ custom_wput (addr & 0xfffe, value >> 16);
+ custom_wput ((addr + 2) & 0xfffe, (uae_u16)value);
+}
+
+#ifdef SAVESTATE
+
+void custom_prepare_savestate (void)
+{
+ int i;
+
+ for (i = 0; i < ev2_max; i++) {
+ if (eventtab2[i].active) {
+ eventtab2[i].active = 0;
+ eventtab2[i].handler (eventtab2[i].data);
+ }
+ }
+}
+
+#define RB restore_u8 ()
+#define RW restore_u16 ()
+#define RL restore_u32 ()
+
+uae_u8 *restore_custom (uae_u8 *src)
+{
+ uae_u16 dsklen, dskbytr;
+ int dskpt;
+ int i;
+
+ audio_reset ();
+
+ changed_prefs.chipset_mask = currprefs.chipset_mask = RL;
+ update_mirrors ();
+ RW; /* 000 BLTDDAT */
+ RW; /* 002 DMACONR */
+ RW; /* 004 VPOSR */
+ RW; /* 006 VHPOSR */
+ RW; /* 008 DSKDATR (dummy register) */
+ RW; /* 00A JOY0DAT */
+ RW; /* 00C JOY1DAT */
+ clxdat = RW; /* 00E CLXDAT */
+ RW; /* 010 ADKCONR */
+ RW; /* 012 POT0DAT* */
+ RW; /* 014 POT1DAT* */
+ RW; /* 016 POTINP* */
+ RW; /* 018 SERDATR* */
+ dskbytr = RW; /* 01A DSKBYTR */
+ RW; /* 01C INTENAR */
+ RW; /* 01E INTREQR */
+ dskpt = RL; /* 020-022 DSKPT */
+ dsklen = RW; /* 024 DSKLEN */
+ RW; /* 026 DSKDAT */
+ RW; /* 028 REFPTR */
+ i = RW; lof = (i & 0x8000) ? 1 : 0; lol = (i & 0x0080); /* 02A VPOSW */
+ RW; /* 02C VHPOSW */
+ COPCON (RW); /* 02E COPCON */
+ RW; /* 030 SERDAT* */
+ RW; /* 032 SERPER* */
+ POTGO (RW); /* 034 POTGO */
+ RW; /* 036 JOYTEST* */
+ RW; /* 038 STREQU */
+ RW; /* 03A STRVHBL */
+ RW; /* 03C STRHOR */
+ RW; /* 03E STRLONG */
+ BLTCON0 (0, RW); /* 040 BLTCON0 */
+ BLTCON1 (0, RW); /* 042 BLTCON1 */
+ BLTAFWM (0, RW); /* 044 BLTAFWM */
+ BLTALWM (0, RW); /* 046 BLTALWM */
+ BLTCPTH (0, RW);BLTCPTL(0, RW); /* 048-04B BLTCPT */
+ BLTBPTH (0, RW);BLTBPTL(0, RW); /* 04C-04F BLTBPT */
+ BLTAPTH (0, RW);BLTAPTL(0, RW); /* 050-053 BLTAPT */
+ BLTDPTH (0, RW);BLTDPTL(0, RW); /* 054-057 BLTDPT */
+ RW; /* 058 BLTSIZE */
+ RW; /* 05A BLTCON0L */
+ blt_info.vblitsize = RW; /* 05C BLTSIZV */
+ blt_info.hblitsize = RW; /* 05E BLTSIZH */
+ BLTCMOD (0, RW); /* 060 BLTCMOD */
+ BLTBMOD (0, RW); /* 062 BLTBMOD */
+ BLTAMOD (0, RW); /* 064 BLTAMOD */
+ BLTDMOD (0, RW); /* 066 BLTDMOD */
+ RW; /* 068 ? */
+ RW; /* 06A ? */
+ RW; /* 06C ? */
+ RW; /* 06E ? */
+ BLTCDAT (0, RW); /* 070 BLTCDAT */
+ BLTBDAT (0, RW); /* 072 BLTBDAT */
+ BLTADAT (0, RW); /* 074 BLTADAT */
+ RW; /* 076 ? */
+ RW; /* 078 ? */
+ RW; /* 07A ? */
+ RW; /* 07C LISAID */
+ DSKSYNC (-1, RW); /* 07E DSKSYNC */
+ cop1lc = RL; /* 080/082 COP1LC */
+ cop2lc = RL; /* 084/086 COP2LC */
+ RW; /* 088 ? */
+ RW; /* 08A ? */
+ RW; /* 08C ? */
+ diwstrt = RW; /* 08E DIWSTRT */
+ diwstop = RW; /* 090 DIWSTOP */
+ ddfstrt = RW; /* 092 DDFSTRT */
+ ddfstop = RW; /* 094 DDFSTOP */
+ dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */
+ CLXCON (RW); /* 098 CLXCON */
+ intena = RW; /* 09A INTENA */
+ intreq = intreqr = RW | 0x20; /* 09C INTREQ */
+ adkcon = RW; /* 09E ADKCON */
+ for (i = 0; i < 8; i++)
+ bplptx[i] = bplpt[i] = RL;
+ bplcon0 = RW; /* 100 BPLCON0 */
+ bplcon1 = RW; /* 102 BPLCON1 */
+ bplcon2 = RW; /* 104 BPLCON2 */
+ bplcon3 = RW; /* 106 BPLCON3 */
+ bpl1mod = RW; /* 108 BPL1MOD */
+ bpl2mod = RW; /* 10A BPL2MOD */
+ bplcon4 = RW; /* 10C BPLCON4 */
+ clxcon2 = RW; /* 10E CLXCON2* */
+ for(i = 0; i < 8; i++)
+ bplxdat[i] = RW; /* BPLXDAT */
+ for(i = 0; i < 32; i++)
+ current_colors.color_regs_ecs[i] = RW; /* 180 COLORxx */
+ htotal = RW; /* 1C0 HTOTAL */
+ hsstop = RW; /* 1C2 HSTOP ? */
+ hbstrt = RW; /* 1C4 HBSTRT ? */
+ hbstop = RW; /* 1C6 HBSTOP ? */
+ vtotal = RW; /* 1C8 VTOTAL */
+ vsstop = RW; /* 1CA VSSTOP */
+ vbstrt = RW; /* 1CC VBSTRT */
+ vbstop = RW; /* 1CE VBSTOP */
+ RW; /* 1D0 ? */
+ RW; /* 1D2 ? */
+ RW; /* 1D4 ? */
+ RW; /* 1D6 ? */
+ RW; /* 1D8 ? */
+ RW; /* 1DA ? */
+ new_beamcon0 = RW; /* 1DC BEAMCON0 */
+ hsstrt = RW; /* 1DE HSSTRT */
+ vsstrt = RW; /* 1E0 VSSTT */
+ hcenter = RW; /* 1E2 HCENTER */
+ diwhigh = RW; /* 1E4 DIWHIGH */
+ diwhigh_written = (diwhigh & 0x8000) ? 1 : 0;
+ diwhigh &= 0x7fff;
+ RW; /* 1E6 ? */
+ RW; /* 1E8 ? */
+ RW; /* 1EA ? */
+ RW; /* 1EC ? */
+ RW; /* 1EE ? */
+ RW; /* 1F0 ? */
+ RW; /* 1F2 ? */
+ RW; /* 1F4 ? */
+ RW; /* 1F6 ? */
+ RW; /* 1F8 ? */
+ RW; /* 1FA ? */
+ fmode = RW; /* 1FC FMODE */
+ last_custom_value1 = RW; /* 1FE ? */
+
+ DISK_restore_custom (dskpt, dsklen, dskbytr);
+
+ return src;
+}
+
+#endif /* SAVESTATE */
+
+#if defined SAVESTATE || defined DEBUGGER
+
+#define SB save_u8
+#define SW save_u16
+#define SL save_u32
+
+extern uae_u16 serper;
+
+uae_u8 *save_custom (int *len, uae_u8 *dstptr, int full)
+{
+ uae_u8 *dstbak, *dst;
+ int i;
+ uae_u32 dskpt;
+ uae_u16 dsklen, dsksync, dskbytr;
+
+ DISK_save_custom (&dskpt, &dsklen, &dsksync, &dskbytr);
+
+ if (dstptr)
+ dstbak = dst = dstptr;
+ else
+ dstbak = dst = malloc (8 + 256 * 2);
+
+ SL (currprefs.chipset_mask);
+ SW (0); /* 000 BLTDDAT */
+ SW (dmacon); /* 002 DMACONR */
+ SW (VPOSR ()); /* 004 VPOSR */
+ SW (VHPOSR ()); /* 006 VHPOSR */
+ SW (0); /* 008 DSKDATR */
+ SW (JOY0DAT ()); /* 00A JOY0DAT */
+ SW (JOY1DAT ()); /* 00C JOY1DAT */
+ SW (clxdat | 0x8000); /* 00E CLXDAT */
+ SW (ADKCONR ()); /* 010 ADKCONR */
+ SW (POT0DAT ()); /* 012 POT0DAT */
+ SW (POT0DAT ()); /* 014 POT1DAT */
+ SW (0) ; /* 016 POTINP * */
+ SW (0); /* 018 SERDATR * */
+ SW (dskbytr); /* 01A DSKBYTR */
+ SW (INTENAR ()); /* 01C INTENAR */
+ SW (INTREQR ()); /* 01E INTREQR */
+ SL (dskpt); /* 020-023 DSKPT */
+ SW (dsklen); /* 024 DSKLEN */
+ SW (0); /* 026 DSKDAT */
+ SW (0); /* 028 REFPTR */
+ SW ((lof ? 0x8001 : 0) | (lol ? 0x0080 : 0));/* 02A VPOSW */
+ SW (0); /* 02C VHPOSW */
+ SW (copcon); /* 02E COPCON */
+ SW (serper); /* 030 SERDAT * */
+ SW (serdat); /* 032 SERPER * */
+ SW (potgo_value); /* 034 POTGO */
+ SW (0); /* 036 JOYTEST * */
+ SW (0); /* 038 STREQU */
+ SW (0); /* 03A STRVBL */
+ SW (0); /* 03C STRHOR */
+ SW (0); /* 03E STRLONG */
+ SW (bltcon0); /* 040 BLTCON0 */
+ SW (bltcon1); /* 042 BLTCON1 */
+ SW (blt_info.bltafwm); /* 044 BLTAFWM */
+ SW (blt_info.bltalwm); /* 046 BLTALWM */
+ SL (bltcpt); /* 048-04B BLTCPT */
+ SL (bltbpt); /* 04C-04F BLTCPT */
+ SL (bltapt); /* 050-053 BLTCPT */
+ SL (bltdpt); /* 054-057 BLTCPT */
+ SW (0); /* 058 BLTSIZE */
+ SW (0); /* 05A BLTCON0L (use BLTCON0 instead) */
+ SW (blt_info.vblitsize); /* 05C BLTSIZV */
+ SW (blt_info.hblitsize); /* 05E BLTSIZH */
+ SW (blt_info.bltcmod); /* 060 BLTCMOD */
+ SW (blt_info.bltbmod); /* 062 BLTBMOD */
+ SW (blt_info.bltamod); /* 064 BLTAMOD */
+ SW (blt_info.bltdmod); /* 066 BLTDMOD */
+ SW (0); /* 068 ? */
+ SW (0); /* 06A ? */
+ SW (0); /* 06C ? */
+ SW (0); /* 06E ? */
+ SW (blt_info.bltcdat); /* 070 BLTCDAT */
+ SW (blt_info.bltbdat); /* 072 BLTBDAT */
+ SW (blt_info.bltadat); /* 074 BLTADAT */
+ SW (0); /* 076 ? */
+ SW (0); /* 078 ? */
+ SW (0); /* 07A ? */
+ SW (DENISEID ()); /* 07C DENISEID/LISAID */
+ SW (dsksync); /* 07E DSKSYNC */
+ SL (cop1lc); /* 080-083 COP1LC */
+ SL (cop2lc); /* 084-087 COP2LC */
+ SW (0); /* 088 ? */
+ SW (0); /* 08A ? */
+ SW (0); /* 08C ? */
+ SW (diwstrt); /* 08E DIWSTRT */
+ SW (diwstop); /* 090 DIWSTOP */
+ SW (ddfstrt); /* 092 DDFSTRT */
+ SW (ddfstop); /* 094 DDFSTOP */
+ SW (dmacon); /* 096 DMACON */
+ SW (clxcon); /* 098 CLXCON */
+ SW (intena); /* 09A INTENA */
+ SW (intreq); /* 09C INTREQ */
+ SW (adkcon); /* 09E ADKCON */
+ for (i = 0; full && i < 32; i++)
+ SW (0);
+ for (i = 0; i < 8; i++)
+ SL (bplpt[i]); /* 0E0-0FE BPLxPT */
+ SW (bplcon0); /* 100 BPLCON0 */
+ SW (bplcon1); /* 102 BPLCON1 */
+ SW (bplcon2); /* 104 BPLCON2 */
+ SW (bplcon3); /* 106 BPLCON3 */
+ SW (bpl1mod); /* 108 BPL1MOD */
+ SW (bpl2mod); /* 10A BPL2MOD */
+ SW (bplcon4); /* 10C BPLCON4 */
+ SW (clxcon2); /* 10E CLXCON2 */
+ for (i = 0;i < 8; i++)
+ SW (bplxdat[i]); /* 110 BPLxDAT */
+ if (full) {
+ for (i = 0; i < 8; i++) {
+ SL (spr[i].pt); /* 120-13E SPRxPT */
+ SW (sprpos[i]); /* 1x0 SPRxPOS */
+ SW (sprctl[i]); /* 1x2 SPRxPOS */
+ SW (sprdata[i][0]); /* 1x4 SPRxDATA */
+ SW (sprdatb[i][0]); /* 1x6 SPRxDATB */
+ }
+ }
+ for ( i = 0; i < 32; i++) {
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ uae_u32 v = current_colors.color_regs_aga[i];
+ uae_u16 v2;
+ v &= 0x00f0f0f0;
+ v2 = (v >> 4) & 15;
+ v2 |= ((v >> 12) & 15) << 4;
+ v2 |= ((v >> 20) & 15) << 8;
+ SW (v2);
+ } else {
+ SW (current_colors.color_regs_ecs[i]); /* 180-1BE COLORxx */
+ }
+ }
+ SW (htotal); /* 1C0 HTOTAL */
+ SW (hsstop); /* 1C2 HSTOP*/
+ SW (hbstrt); /* 1C4 HBSTRT */
+ SW (hbstop); /* 1C6 HBSTOP */
+ SW (vtotal); /* 1C8 VTOTAL */
+ SW (vsstop); /* 1CA VSSTOP */
+ SW (vbstrt); /* 1CC VBSTRT */
+ SW (vbstop); /* 1CE VBSTOP */
+ SW (0); /* 1D0 */
+ SW (0); /* 1D2 */
+ SW (0); /* 1D4 */
+ SW (0); /* 1D6 */
+ SW (0); /* 1D8 */
+ SW (0); /* 1DA */
+ SW (beamcon0); /* 1DC BEAMCON0 */
+ SW (hsstrt); /* 1DE HSSTRT */
+ SW (vsstrt); /* 1E0 VSSTRT */
+ SW (hcenter); /* 1E2 HCENTER */
+ SW (diwhigh | (diwhigh_written ? 0x8000 : 0)); /* 1E4 DIWHIGH */
+ SW (0); /* 1E6 */
+ SW (0); /* 1E8 */
+ SW (0); /* 1EA */
+ SW (0); /* 1EC */
+ SW (0); /* 1EE */
+ SW (0); /* 1F0 */
+ SW (0); /* 1F2 */
+ SW (0); /* 1F4 */
+ SW (0); /* 1F6 */
+ SW (0); /* 1F8 */
+ SW (0); /* 1FA */
+ SW (fmode); /* 1FC FMODE */
+ SW (last_custom_value1); /* 1FE */
+
+ *len = dst - dstbak;
+ return dstbak;
+}
+
+#endif /* SAVESTATE || DEBUGGER */
+
+#ifdef SAVESTATE
+
+uae_u8 *restore_custom_agacolors (uae_u8 *src)
+{
+ int i;
+
+ for (i = 0; i < 256; i++) {
+#ifdef AGA
+ uae_u32 v = RL;
+ color_regs_aga_genlock[i] = 0;
+ if (v & 0x80000000)
+ color_regs_aga_genlock[i] = 1;
+ v &= 0x00ffffff;
+ current_colors.color_regs_aga[i] = v;
+#else
+ RL;
+#endif
+ }
+ return src;
+}
+
+uae_u8 *save_custom_agacolors (int *len, uae_u8 *dstptr)
+{
+ uae_u8 *dstbak, *dst;
+ int i;
+
+ if (dstptr)
+ dstbak = dst = dstptr;
+ else
+ dstbak = dst = xmalloc (256*4);
+ for (i = 0; i < 256; i++)
+#ifdef AGA
+ SL (current_colors.color_regs_aga[i] | (color_regs_aga_genlock[i] ? 0x80000000 : 0));
+#else
+ SL (0);
+#endif
+ *len = dst - dstbak;
+ return dstbak;
+}
+
+uae_u8 *restore_custom_sprite (int num, uae_u8 *src)
+{
+ spr[num].pt = RL; /* 120-13E SPRxPT */
+ sprpos[num] = RW; /* 1x0 SPRxPOS */
+ sprctl[num] = RW; /* 1x2 SPRxPOS */
+ sprdata[num][0] = RW; /* 1x4 SPRxDATA */
+ sprdatb[num][0] = RW; /* 1x6 SPRxDATB */
+ sprdata[num][1] = RW;
+ sprdatb[num][1] = RW;
+ sprdata[num][2] = RW;
+ sprdatb[num][2] = RW;
+ sprdata[num][3] = RW;
+ sprdatb[num][3] = RW;
+ spr[num].armed = RB;
+ return src;
+}
+
+uae_u8 *save_custom_sprite(int num, int *len, uae_u8 *dstptr)
+{
+ uae_u8 *dstbak, *dst;
+
+ if (dstptr)
+ dstbak = dst = dstptr;
+ else
+ dstbak = dst = xmalloc (30);
+ SL (spr[num].pt); /* 120-13E SPRxPT */
+ SW (sprpos[num]); /* 1x0 SPRxPOS */
+ SW (sprctl[num]); /* 1x2 SPRxPOS */
+ SW (sprdata[num][0]); /* 1x4 SPRxDATA */
+ SW (sprdatb[num][0]); /* 1x6 SPRxDATB */
+ SW (sprdata[num][1]);
+ SW (sprdatb[num][1]);
+ SW (sprdata[num][2]);
+ SW (sprdatb[num][2]);
+ SW (sprdata[num][3]);
+ SW (sprdatb[num][3]);
+ SB (spr[num].armed ? 1 : 0);
+ *len = dst - dstbak;
+ return dstbak;
+}
+
+#endif /* SAVESTATE */
+
+void check_prefs_changed_custom (void)
+{
+ currprefs.gfx_framerate = changed_prefs.gfx_framerate;
+ if (inputdevice_config_change_test ())
+ inputdevice_copyconfig (&changed_prefs, &currprefs);
+ currprefs.immediate_blits = changed_prefs.immediate_blits;
+ currprefs.collision_level = changed_prefs.collision_level;
+
+ currprefs.cs_ciaatod = changed_prefs.cs_ciaatod;
+ currprefs.cs_rtc = changed_prefs.cs_rtc;
+ currprefs.cs_cd32cd = changed_prefs.cs_cd32cd;
+ currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p;
+ currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram;
+ currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd;
+ currprefs.cs_ide = changed_prefs.cs_ide;
+ currprefs.cs_pcmcia = changed_prefs.cs_pcmcia;
+ currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev;
+ currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev;
+ currprefs.cs_agnusrev = changed_prefs.cs_agnusrev;
+ currprefs.cs_deniserev = changed_prefs.cs_deniserev;
+ currprefs.cs_mbdmac = changed_prefs.cs_mbdmac;
+ currprefs.cs_df0idhw = changed_prefs.cs_df0idhw;
+ currprefs.cs_slowmemisfast = changed_prefs.cs_slowmemisfast;
+
+ if (currprefs.chipset_mask != changed_prefs.chipset_mask ||
+ currprefs.gfx_avsync != changed_prefs.gfx_avsync ||
+ currprefs.gfx_pvsync != changed_prefs.gfx_pvsync ||
+ currprefs.picasso96_nocustom != changed_prefs.picasso96_nocustom ||
+ currprefs.ntscmode != changed_prefs.ntscmode) {
+ currprefs.picasso96_nocustom = changed_prefs.picasso96_nocustom;
+ currprefs.gfx_avsync = changed_prefs.gfx_avsync;
+ currprefs.gfx_pvsync = changed_prefs.gfx_pvsync;
+ currprefs.chipset_mask = changed_prefs.chipset_mask;
+ if (currprefs.ntscmode != changed_prefs.ntscmode) {
+ currprefs.ntscmode = changed_prefs.ntscmode;
+ new_beamcon0 = currprefs.ntscmode ? 0x00 : 0x20;
+ }
+ init_custom ();
+ }
+#ifdef GFXFILTER
+ currprefs.gfx_filter_horiz_zoom = changed_prefs.gfx_filter_horiz_zoom;
+ currprefs.gfx_filter_vert_zoom = changed_prefs.gfx_filter_vert_zoom;
+ currprefs.gfx_filter_horiz_offset = changed_prefs.gfx_filter_horiz_offset;
+ currprefs.gfx_filter_vert_offset = changed_prefs.gfx_filter_vert_offset;
+ currprefs.gfx_filter_scanlines = changed_prefs.gfx_filter_scanlines;
+ currprefs.gfx_filter_filtermode = changed_prefs.gfx_filter_filtermode;
+#endif
+}
+
+#ifdef CPUEMU_12
+
+STATIC_INLINE void sync_copper (int hpos)
+{
+ if (copper_enabled_thisline)
+ update_copper (hpos);
+}
+
+STATIC_INLINE void decide_fetch_ce (int hpos)
+{
+ if ((ddf_change == vpos || ddf_change + 1 == vpos) && vpos < maxvpos)
+ decide_fetch (hpos);
+}
+
+#define BLIT_NASTY 4
+
+// blitter not in nasty mode = CPU gets one cycle if it has been waiting
+// at least 4 cycles (all DMA cycles count, not just blitter cycles, even
+// blitter idle cycles do count!)
+
+STATIC_INLINE int dma_cycle (void)
+{
+ int hpos, hpos_old;
+
+ blitter_nasty = 1;
+ for (;;) {
+ int bpldma;
+ int blitpri = dmacon & DMA_BLITPRI;
+ hpos_old = current_hpos ();
+ hpos = hpos_old + 1;
+ sync_copper (hpos);
+ decide_line (hpos);
+ decide_fetch_ce (hpos);
+ bpldma = is_bitplane_dma (hpos_old);
+ if (bltstate != BLT_done) {
+ if (!blitpri && blitter_nasty >= BLIT_NASTY && cycle_line[hpos_old] == 0 && !bpldma) {
+ alloc_cycle (hpos_old, CYCLE_CPUNASTY);
+ break;
+ }
+ decide_blitter (hpos);
+ // copper may have been waiting for the blitter
+ sync_copper (hpos);
+ }
+ if (cycle_line[hpos_old] == 0 && !bpldma) {
+ alloc_cycle (hpos_old, CYCLE_CPU);
+ break;
+ }
+ regs.ce020memcycles -= CYCLE_UNIT;
+ do_cycles (1 * CYCLE_UNIT);
+ /* bus was allocated to dma channel, wait for next cycle.. */
+ }
+ return hpos_old;
+}
+
+STATIC_INLINE void checknasty (int hpos, int vpos)
+{
+ if (blitter_nasty >= BLIT_NASTY && !(dmacon & DMA_BLITPRI))
+ record_dma_event (DMA_EVENT_BLITNASTY, hpos, vpos);
+}
+
+uae_u32 wait_cpu_cycle_read (uaecptr addr, int mode)
+{
+ uae_u32 v = 0;
+ int hpos;
+ struct dma_rec *dr;
+
+ hpos = dma_cycle ();
+#ifdef DEBUGGER
+ if (debug_dma) {
+ dr = record_dma (0x1000, v, addr, hpos, vpos, DMARECORD_CPU);
+ checknasty (hpos, vpos);
+ }
+#endif
+ if (mode < 0)
+ v = get_long (addr);
+ else if (mode > 0)
+ v = get_word (addr);
+ else if (mode == 0)
+ v = get_byte (addr);
+#ifdef DEBUGGER
+ if (debug_dma)
+ dr->dat = v;
+#endif
+ do_cycles_ce (2 * CYCLE_UNIT);
+ regs.ce020memcycles -= 2 * CYCLE_UNIT;
+ return v;
+}
+
+uae_u32 wait_cpu_cycle_read_ce020 (uaecptr addr, int mode)
+{
+ return wait_cpu_cycle_read (addr, mode);
+}
+
+void wait_cpu_cycle_write (uaecptr addr, int mode, uae_u32 v)
+{
+ int hpos;
+
+ hpos = dma_cycle ();
+#ifdef DEBUGGER
+ if (debug_dma) {
+ record_dma (0x1001, v, addr, hpos, vpos, DMARECORD_CPU);
+ checknasty (hpos, vpos);
+ }
+#endif
+ if (mode < 0)
+ put_long (addr, v);
+ else if (mode > 0)
+ put_word (addr, v);
+ else if (mode == 0)
+ put_byte (addr, v);
+ do_cycles_ce (2 * CYCLE_UNIT);
+ regs.ce020memcycles -= 2 * CYCLE_UNIT;
+}
+
+void wait_cpu_cycle_write_ce020 (uaecptr addr, int mode, uae_u32 v)
+{
+ wait_cpu_cycle_write (addr, mode, v);
+}
+
+void do_cycles_ce (long cycles)
+{
+ static int extra;
+
+ cycles += extra;
+ while (cycles >= CYCLE_UNIT) {
+ int hpos = current_hpos () + 1;
+ sync_copper (hpos);
+ decide_line (hpos);
+ decide_fetch_ce (hpos);
+ if (bltstate != BLT_done)
+ decide_blitter (hpos);
+ do_cycles (1 * CYCLE_UNIT);
+ cycles -= CYCLE_UNIT;
+ }
+ extra = cycles;
+}
+
+int is_cycle_ce (void)
+{
+ int hpos = current_hpos ();
+ return cycle_line[hpos];
+}
+
+#endif
+
+int ispal (void)
+{
+ if (beamcon0 & 0x80)
+ return currprefs.ntscmode == 0;
+ return maxvpos >= MAXVPOS_NTSC + (MAXVPOS_PAL - MAXVPOS_NTSC) / 2;
+}
\ No newline at end of file
-// Microsoft Visual C++ generated resource script.\r
-//\r
-#include "resource."\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 (Neutral) resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL\r
-#pragma code_page(1252)\r
-#endif //_WIN32\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_GAMEPORTS ICON "joystick.ico"\r
-IDI_IOPORTS 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_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
-IDI_DISKIMAGE ICON "diskimage.ico"\r
-IDI_PORTS ICON "port.ico"\r
-IDI_CONFIGFILE ICON "configfile.ico"\r
-IDI_FILE ICON "file.ico"\r
-IDI_EXPANSION ICON "expansion.ico"\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
- LTEXT "Main ROM file:",IDC_ROMTEXT,14,13,263,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
- LTEXT "Extended ROM file:",IDC_ROMFILE2TEXT,14,43,263,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
- LTEXT "Cartridge ROM file:",IDC_FLASHTEXT2,12,110,265,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
- LTEXT "Flash RAM file:",IDC_FLASHTEXT,12,142,265,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
- 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,137\r
- CONTROL "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,125,92,10\r
- LTEXT "Refresh:",IDC_REFRESHTEXT,18,173,28,8\r
- CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,168,75,20\r
- EDITTEXT IDC_RATETEXT,124,172,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,84\r
- CONTROL "Normal",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,231,148,44,10\r
- CONTROL "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,164,45,10\r
- CONTROL "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,180,46,10\r
- COMBOBOX IDC_DA_MODE,20,218,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,214,101,20\r
- LTEXT "FPS adj.:",IDC_REFRESH2TEXT,16,193,32,8\r
- CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,188,127,20\r
- EDITTEXT IDC_RATE2TEXT,175,192,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,125,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 "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE\r
- PUSHBUTTON "Reset to defaults",IDC_DA_RESET,212,218,73,14\r
- RTEXT "Resolution:",IDC_STATIC,27,152,59,15,SS_CENTERIMAGE\r
- COMBOBOX IDC_LORES,100,152,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- CONTROL "Remove interlace artifacts",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,139,99,10\r
- RTEXT "Windowed:",IDC_STATIC,17,46,40,15,SS_CENTERIMAGE\r
- RTEXT "Fullscreen:",IDC_STATIC,17,19,40,15,SS_CENTERIMAGE\r
-END\r
-\r
-IDD_MEMORY DIALOGEX 0, 0, 300, 158\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
- GROUPBOX "A3000/A4000 Advanced Memory Settings",-1,14,84,274,65\r
- RTEXT "Motherboard Fast RAM:",-1,40,100,129,10,SS_CENTERIMAGE\r
- CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,96,59,20\r
- EDITTEXT IDC_MBRAM1,244,99,34,12,ES_CENTER | ES_READONLY\r
- RTEXT "Processor Slot Fast RAM:",-1,40,123,129,10,SS_CENTERIMAGE\r
- CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,119,59,20\r
- EDITTEXT IDC_MBRAM2,244,122,34,12,ES_CENTER | ES_READONLY\r
-END\r
-\r
-IDD_CPU DIALOGEX 0, 0, 300, 241\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,1,81,144,BS_LEFT\r
- CONTROL "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,15,63,10\r
- CONTROL "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,28,65,10\r
- CONTROL "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,41,63,10\r
- CONTROL "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,54,64,10\r
- CONTROL "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,67,66,10\r
- CONTROL "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,80,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,107,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,119,73,10\r
- GROUPBOX "CPU Emulation Speed",IDC_STATIC,90,3,205,92\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
- CONTROL "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,114,71,67,20\r
- CONTROL "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,219,71,69,20\r
- GROUPBOX "Advanced JIT Settings",IDC_STATIC,90,147,205,91\r
- CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,140,161,115,20\r
- EDITTEXT IDC_CACHETEXT,255,166,30,12,ES_CENTER | ES_READONLY\r
- CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,194,63,10\r
- CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,208,63,10\r
- CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,222,62,10\r
- CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,194,62,10\r
- CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,235,194,52,10\r
- CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,208,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,221,73,10\r
- GROUPBOX "FPU",IDC_STATIC,5,147,81,90,BS_LEFT\r
- CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,94,73,8\r
- CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,161,63,10\r
- CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,63,10\r
- CONTROL "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,188,63,10\r
- CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,202,63,10\r
- RTEXT "CPU Frequency",IDC_STATIC,105,119,51,10,SS_CENTERIMAGE\r
- GROUPBOX "Cycle-exact CPU Emulation Speed",IDC_STATIC,90,99,205,46\r
- RTEXT "CPU",IDC_STATIC,96,77,17,10,SS_CENTERIMAGE\r
- RTEXT "Chipset",IDC_STATIC,182,77,26,9,SS_CENTERIMAGE\r
- RTEXT "CPU Idle",IDC_STATIC,231,60,47,9,SS_CENTERIMAGE\r
- RTEXT "Cache size:",IDC_STATIC,95,167,42,10,SS_CENTERIMAGE\r
- CONTROL "68040 MMU [] 68040 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,132,73,10\r
- COMBOBOX IDC_CPU_FREQUENCY,165,118,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- EDITTEXT IDC_CPU_FREQUENCY2,218,117,70,15\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,12,197,64,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Create Standard Disk [] Creates a standard 880 or 1760 KB ADF disk image.",IDC_CREATE,81,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,187,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,81,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,167\r
- PUSHBUTTON "Add &Directory or Archive...",IDC_NEW_FS,10,171,103,15\r
- PUSHBUTTON "Add &Hardfile...",IDC_NEW_HF,130,171,74,15\r
- PUSHBUTTON "Add Ha&rd Drive...",IDC_NEW_HD,220,171,75,15\r
- PUSHBUTTON "Remove",IDC_REMOVE,235,193,60,15\r
- PUSHBUTTON "&Properties",IDC_EDIT,235,210,60,15\r
- CONTROL "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,192,100,10\r
- CONTROL "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,192,119,10\r
- CONTROL "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,203,121,10\r
- CONTROL "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,226,101,10\r
- CONTROL "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,215,100,10\r
- CONTROL "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,215,115,10\r
- CONTROL "Include removable drives..",IDC_MAPDRIVES_REMOVABLE,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,203,100,10\r
-END\r
-\r
-IDD_SOUND 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
- COMBOBOX IDC_SOUNDCARDLIST,5,3,291,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- GROUPBOX "Sound Emulation",IDC_SOUNDSETTINGS,5,20,120,85\r
- CONTROL "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,35,101,10\r
- CONTROL "Disabled, but emulated",IDC_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,48,102,10\r
- CONTROL "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,61,102,10\r
- CONTROL "Enabled, 100% accurate",IDC_SOUND3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,74,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,106,290,60\r
- LTEXT "Frequency:",IDC_SOUNDFREQTXT,11,140,53,8,SS_CENTERIMAGE\r
- COMBOBOX IDC_SOUNDFREQ,13,149,51,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Audio filter:",IDC_SOUNDFILTERTXT,209,140,77,8,SS_CENTERIMAGE\r
- COMBOBOX IDC_SOUNDFILTER,209,149,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Channel mode:",IDC_SOUNDSTEREOTXT,11,116,57,8,SS_CENTERIMAGE\r
- COMBOBOX IDC_SOUNDSTEREO,13,125,122,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,209,116,75,8,SS_CENTERIMAGE\r
- COMBOBOX IDC_SOUNDINTERPOLATION,209,125,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,141,116,63,8,SS_CENTERIMAGE\r
- COMBOBOX IDC_SOUNDSTEREOSEP,142,125,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Stereo delay:",IDC_SOUNDSTEREOMIXTXT,141,140,63,8,SS_CENTERIMAGE\r
- COMBOBOX IDC_SOUNDSTEREOMIX,142,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- GROUPBOX "Floppy Drive Sound Emulation",IDC_STATIC,6,172,220,60\r
- CONTROL "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,186,107,19\r
- EDITTEXT IDC_SOUNDDRIVEVOLUME2,124,188,40,12,ES_CENTER | ES_READONLY\r
- COMBOBOX IDC_SOUNDDRIVE,173,187,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_SOUNDDRIVESELECT,18,209,202,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_SOUNDSWAP,73,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Swap channels:",IDC_SOUNDSWAPTXT,74,140,61,8,SS_CENTERIMAGE\r
- CONTROL "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,89,103,10\r
- CONTROL "Exclusive mode",IDC_SOUND_EXCLUSIVE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,137,25,154,10\r
- CONTROL "DirectSound",IDC_SOUND_DS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,181,55,10\r
- CONTROL "WASAPI",IDC_SOUND_WASAPI,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,193,53,10\r
- CONTROL "OpenAL",IDC_SOUND_OPENAL,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,205,53,10\r
- CONTROL "PortAudio",IDC_SOUND_PORTAUDIO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,217,58,10\r
- GROUPBOX "Drivers",IDC_STATIC,230,172,66,60\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_IOPORTS DIALOGEX 0, 0, 300, 228\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_STATIC,5,2,291,86\r
- RTEXT "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE\r
- COMBOBOX IDC_PRINTERLIST,49,15,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Flush print job",IDC_FLUSHPRINTER,114,51,58,12\r
- RTEXT "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,176,49,76,15,SS_NOTIFY | SS_CENTERIMAGE\r
- EDITTEXT IDC_PRINTERAUTOFLUSH,255,50,25,12,ES_NUMBER\r
- RTEXT "Type:",IDC_STATIC,15,33,21,15,SS_CENTERIMAGE\r
- EDITTEXT IDC_PS_PARAMS,114,67,167,12,ES_AUTOHSCROLL\r
- GROUPBOX "Serial Port",IDC_STATIC,4,92,292,48\r
- COMBOBOX IDC_SERIAL,49,104,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- CONTROL "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,123,48,12\r
- CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,123,55,12\r
- RTEXT "Out:",IDC_MIDI,10,154,34,15,SS_CENTERIMAGE\r
- COMBOBOX IDC_MIDIOUTLIST,49,154,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- RTEXT "In:",IDC_MIDI2,10,174,29,15,SS_CENTERIMAGE\r
- COMBOBOX IDC_MIDIINLIST,49,174,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\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,123,65,12\r
- CONTROL "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,123,78,12\r
- COMBOBOX IDC_PRINTERTYPELIST,49,33,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- RTEXT "Ghostscript extra parameters:",IDC_STATIC,10,66,102,15,SS_CENTERIMAGE\r
- GROUPBOX "MIDI",IDC_STATIC,5,143,291,51,BS_LEFT\r
- GROUPBOX "Protection Dongle",IDC_STATIC,5,197,292,30,BS_LEFT\r
- COMBOBOX IDC_DONGLELIST,50,208,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-END\r
-\r
-IDD_GAMEPORTS DIALOGEX 0, 0, 300, 236\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_PORT0_JOYS,45,29,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_PORT1_JOYS,45,65,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Swap port 0 and 1",IDC_SWAP,194,101,93,14\r
- RTEXT "Port 0:",IDC_STATIC,11,28,25,15,SS_CENTERIMAGE\r
- RTEXT "Port 1:",IDC_STATIC,11,64,25,15,SS_CENTERIMAGE\r
- LTEXT "X-Arcade layout information []#1",IDC_STATIC,64,87,106,15,SS_NOTIFY | SS_CENTERIMAGE\r
- GROUPBOX "Mouse and Joystick settings",IDC_STATIC,4,15,292,148\r
- GROUPBOX "Mouse extra settings",IDC_STATIC,4,165,292,69\r
- RTEXT "Mouse speed:",IDC_STATIC,17,180,56,10,SS_CENTERIMAGE\r
- EDITTEXT IDC_INPUTSPEEDM,87,180,25,12,ES_NUMBER\r
- CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,187,120,10\r
- CONTROL "Full tablet input emulation",IDC_PORT_TABLET_FULL,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,220,121,10\r
- CONTROL "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,175,119,10\r
- COMBOBOX IDC_PORT_TABLET_CURSOR,167,201,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- RTEXT "Magic Mouse cursor mode:",IDC_STATIC,17,204,138,10,SS_CENTERIMAGE\r
- COMBOBOX IDC_PORT0_JOYSMODE,195,47,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_PORT1_JOYSMODE,195,82,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_PORT2_JOYS,45,125,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- LTEXT "Parallel port joystick adapter",IDC_STATIC,10,105,147,15,SS_CENTERIMAGE\r
- COMBOBOX IDC_PORT3_JOYS,45,143,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\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,224,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,214\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 "Miscellaneous Options",IDC_STATIC,8,2,290,136\r
- CONTROL "Untrap = middle button",IDC_JULIAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,19,110,10\r
- CONTROL "Show GUI on startup",IDC_SHOWGUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,31,109,10\r
- CONTROL "Native On-screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,80,109,10\r
- CONTROL "Don't show taskbar button",IDC_NOTASKBARBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,56,109,10\r
- CONTROL "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,43,110,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,202,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,201,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,19,69,110,10\r
- CONTROL "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,216,64,10\r
- COMBOBOX IDC_SCSIMODE,213,30,80,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_LANGUAGE,153,117,122,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- GROUPBOX "Language",IDC_STATIC,138,107,154,27\r
- CONTROL "Disable screensaver",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,82,109,10\r
- COMBOBOX IDC_DD_SURFACETYPE,213,63,79,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- RTEXT "DirectDraw display buffer:",IDC_STATIC,195,50,92,10,SS_CENTERIMAGE\r
- RTEXT "SCSI and CD/DVD access method:",IDC_STATIC,151,12,126,10,SS_CENTERIMAGE\r
- CONTROL "Synchronize clock",IDC_CLOCKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,95,111,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,19,108,100,10\r
- CONTROL "RTG On-screen LEDs",IDC_SHOWLEDSRTG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,93,109,10\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,168,62,10\r
- CONTROL "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,180,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
- 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,17,174,159,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",IDC_AVIOUTPUT_FRAMELIMITER,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,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,143,74,87,11\r
- LTEXT "fps",IDC_AVIOUTPUT_FPS_STATIC,237,74,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",IDC_AVIOUTPUT_NOSOUNDOUTPUT,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,88,123,10\r
- CONTROL "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,88,120,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
- 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, 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
- GROUPBOX "Filter Settings",-1,0,1,294,199\r
- COMBOBOX IDC_FILTERMODE,20,15,103,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_FILTERFILTER,132,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,221,15,67,14\r
- RTEXT "Horiz. size:",-1,7,61,46,10,SS_CENTERIMAGE\r
- CONTROL "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,54,152,19\r
- EDITTEXT IDC_FILTERHZV,253,56,34,12,ES_CENTER | ES_READONLY\r
- RTEXT "Vert. size:",-1,7,81,46,10,SS_CENTERIMAGE\r
- CONTROL "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,74,152,19\r
- EDITTEXT IDC_FILTERVZV,253,76,34,12,ES_CENTER | ES_READONLY\r
- RTEXT "Horiz. position:",-1,5,101,55,10,SS_CENTERIMAGE\r
- CONTROL "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,94,151,19\r
- EDITTEXT IDC_FILTERHOV,253,96,34,12,ES_CENTER | ES_READONLY\r
- RTEXT "Vert. position:",-1,5,120,55,10,SS_CENTERIMAGE\r
- CONTROL "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,114,151,19\r
- EDITTEXT IDC_FILTERVOV,253,116,34,12,ES_CENTER | ES_READONLY\r
- RTEXT "Extra settings:",-1,105,135,57,10,SS_CENTERIMAGE\r
- CONTROL "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,174,151,19\r
- EDITTEXT IDC_FILTERXLV,253,176,34,12,ES_CENTER | ES_READONLY\r
- COMBOBOX IDC_FILTERSLR,253,151,33,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- GROUPBOX "Presets",-1,0,203,296,36\r
- COMBOBOX IDC_FILTERPRESETS,8,217,119,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Load",IDC_FILTERPRESETLOAD,132,216,47,14\r
- PUSHBUTTON "Save",IDC_FILTERPRESETSAVE,184,216,47,14\r
- PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,236,216,47,14\r
- COMBOBOX IDC_FILTERHZMULT,59,60,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_FILTERVZMULT,59,80,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_FILTERXTRA,105,151,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_FILTERASPECT,14,151,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,14,168,85,10\r
- RTEXT "Automatic scaling:",-1,9,38,79,10,SS_CENTERIMAGE\r
- COMBOBOX IDC_FILTERAUTOSCALE,105,36,140,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_FILTERASPECT2,14,180,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\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, 244\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
- CONTROL "",IDC_ASSOCIATELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,19,94,164,100\r
- GROUPBOX "File Extension Associations",IDC_STATIC,8,83,186,138\r
- PUSHBUTTON "Deassociate all",IDC_ASSOCIATE_OFF,108,200,75,14\r
- PUSHBUTTON "Associate all",IDC_ASSOCIATE_ON,19,200,75,14\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,5,259,47,14\r
- PUSHBUTTON "Quit",IDC_QUITEMU,55,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,106,259,47,14,NOT WS_VISIBLE\r
-END\r
-\r
-IDD_PATHS DIALOGEX 0, 0, 300, 243\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,4,260,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_ROM,14,15,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_ROMS,281,15,11,15\r
- LTEXT "Configuration files:",IDC_PATHS_CONFIGL,14,32,121,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_CONFIG,14,42,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_CONFIGS,281,42,11,15\r
- LTEXT "Screenshots:",IDC_PATHS_SCREENSHOTL,14,59,260,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_SCREENSHOT,14,69,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_SCREENSHOTS,281,69,11,15\r
- LTEXT "State files:",IDC_PATHS_STATEFILEL,14,86,260,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_SAVESTATE,14,96,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_SAVESTATES,281,96,11,15\r
- LTEXT "Videos:",IDC_PATHS_AVIOUTPUTL,14,113,260,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_AVIOUTPUT,14,123,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_AVIOUTPUTS,281,123,11,15\r
- LTEXT "Saveimages:",IDC_PATHS_SAVEIMAGEL,14,140,261,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_SAVEIMAGE,14,151,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_SAVEIMAGES,281,151,11,15\r
- PUSHBUTTON "Reset to defaults",IDC_PATHS_DEFAULT,14,196,92,14\r
- PUSHBUTTON "Rescan ROMs",IDC_ROM_RESCAN,14,212,92,14\r
- PUSHBUTTON "Clear registry",IDC_RESETREGISTRY,111,212,92,14\r
- COMBOBOX IDC_PATHS_DEFAULTTYPE,111,197,163,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Clear disk history",IDC_RESETDISKHISTORY,14,228,92,14\r
- CONTROL "Cache Configuration files",IDC_PATHS_CONFIGCACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,32,97,10\r
- LTEXT "Rips:",IDC_PATHS_RIPSL,13,168,261,8,SS_CENTERIMAGE\r
- EDITTEXT IDC_PATHS_RIP,13,178,261,15,ES_AUTOHSCROLL\r
- PUSHBUTTON "...",IDC_PATHS_RIPS,280,178,11,15\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
-IDD_EXPANSION DIALOGEX 0, 0, 300, 206\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 "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,44,53,10,SS_NOTIFY | SS_CENTERIMAGE\r
- CONTROL "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,40,60,20\r
- EDITTEXT IDC_P96RAM,152,43,34,12,ES_CENTER | ES_READONLY\r
- GROUPBOX "RTG Graphics Card",IDC_STATIC,5,12,291,113\r
- CONTROL "Scale if smaller than display size setting",IDC_RTG_SCALE,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,74,162,10\r
- CONTROL "Match host and RTG color depth if possible",IDC_RTG_MATCH_DEPTH,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,62,163,10\r
- COMBOBOX IDC_RTG_8BIT,211,29,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_RTG_16BIT,211,44,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_RTG_24BIT,211,59,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- COMBOBOX IDC_RTG_32BIT,211,74,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,86,162,10\r
- COMBOBOX IDC_RTG_SCALE_ASPECTRATIO,211,101,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- RTEXT "Aspect ratio:",IDC_STATIC,153,102,52,10,SS_CENTERIMAGE\r
- RTEXT "Refresh rate:",IDC_STATIC,22,103,51,10,SS_CENTERIMAGE\r
- COMBOBOX IDC_RTG_VBLANKRATE,77,101,68,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
- CONTROL "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,148,120,10\r
- CONTROL "uaenet.device [] Sana 2 compatible network device emulation. WinPcap required.",IDC_SANA2,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,160,77,10\r
- CONTROL "A2065 Z2 [] A2065 Ethernet Zorro II card emulation. WinPcap required.",IDC_A2065,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,160,57,10\r
- GROUPBOX "Network",IDC_STATIC,126,130,169,66\r
- COMBOBOX IDC_NETDEVICE,132,176,156,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- CONTROL "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,160,102,10\r
- CONTROL "Catweasel Z2 emulation [] Catweasel MK2 Zorro II card emulation. Physical Windows compatible Catweasel card and drivers required.",IDC_CATWEASEL,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,148,101,10\r
- GROUPBOX "Miscellaneous Expansions",IDC_STATIC,5,130,117,66\r
-END\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Version\r
-//\r
-\r
-VS_VERSION_INFO VERSIONINFO\r
- FILEVERSION 2,0,0,0\r
- PRODUCTVERSION 2,0,0,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", "2.0.0"\r
- VALUE "InternalName", "WinUAE"\r
- VALUE "LegalCopyright", "© 1996-2009 under the GNU Public License (GPL)"\r
- VALUE "OriginalFilename", "WinUAE.exe"\r
- VALUE "ProductName", "WinUAE"\r
- VALUE "ProductVersion", "2.0.0"\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
-// DESIGNINFO\r
-//\r
-\r
-#ifdef APSTUDIO_INVOKED\r
-GUIDELINES DESIGNINFO \r
-BEGIN\r
- IDD_FILTER, DIALOG\r
- BEGIN\r
- BOTTOMMARGIN, 237\r
- END\r
-END\r
-#endif // APSTUDIO_INVOKED\r
-\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_IOPORTS "IO ports"\r
- IDS_MISC1 "Miscellaneous"\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 "Pri. & Extensions"\r
- IDS_PATHS "Paths"\r
- IDS_QUICKSTART "Quickstart"\r
- IDS_FRONTEND "Frontend"\r
- IDS_CHIPSET2 "Adv. Chipset"\r
- IDS_GAMEPORTS "Game ports"\r
- IDS_EXPANSION "Expansions"\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.\nMikko Nieminen - demo compatibility testing.\nArabuusimiehet - [This information is on a need-to-know basis]"\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 "Surfaces"\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
- IDS_AUTOMATIC "Automatic"\r
- IDS_ALL "All"\r
- IDS_INPUTTOGGLE "Toggle"\r
- IDS_NETDISCONNECTED "Cable disconnected"\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_SCREEN_VSYNC_AUTOSWITCH "AutoVSync"\r
- IDS_SOUND_MONO "Mono"\r
- IDS_SOUND_MIXED "Mixed"\r
- IDS_SOUND_STEREO "Stereo"\r
- IDS_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_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_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
-STRINGTABLE \r
-BEGIN\r
- IDS_FLOPPYTYPE35DDPC "3.5"" DD (PC)"\r
- IDS_FLOPPYTYPE35HDPC "3.5"" HD (PC)"\r
- IDS_JOYMODE_DEFAULT "Default"\r
- IDS_JOYMODE_MOUSE "Mouse"\r
- IDS_JOYMODE_JOYSTICK "Joystick"\r
- IDS_JOYMODE_JOYSTICKANALOG "Analog joystick"\r
- IDS_JOYMODE_LIGHTPEN "Light pen"\r
- IDS_JOYMODE_MOUSE_CDTV "CDTV remote mouse"\r
- IDS_JOYMODE_JOYSTICK_CD32 "CD32 pad"\r
- IDS_TABLET_BOTH_CURSORS "Show both cursors"\r
- IDS_TABLET_NATIVE_CURSOR "Show native cursor only"\r
- IDS_TABLET_HOST_CURSOR "Show host cursor only"\r
- IDS_AUTOSCALE_DISABLED "Disabled"\r
- IDS_AUTOSCALE_SCALING "Automatic scaling"\r
- IDS_AUTOSCALE_RESIZE "Automatic resize"\r
- IDS_PRINTER_ASCII "ASCII-Only"\r
-END\r
-\r
-STRINGTABLE \r
-BEGIN\r
- IDS_PRINTER_EPSON9 "Epson Matrix Printer Emulation, 9pin"\r
- IDS_PRINTER_POSTSCRIPT_DETECTION "PostScript (Passthrough)"\r
- IDS_PRINTER_POSTSCRIPT_EMULATION \r
- "PostScript (Emulation, GhostScript required)"\r
- IDS_PRINTER_PASSTHROUGH "Passthrough"\r
- IDS_RES_LORES "Lores"\r
- IDS_RES_HIRES "Hires (normal)"\r
- IDS_RES_SUPERHIRES "SuperHires"\r
- IDS_PRINTER_EPSON48 "Epson Matrix Printer Emulation, 48pin"\r
-END\r
-\r
-#endif // English (Neutral) 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
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource."
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (Neutral) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// 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_GAMEPORTS ICON "joystick.ico"
+IDI_IOPORTS 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_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"
+IDI_DISKIMAGE ICON "diskimage.ico"
+IDI_PORTS ICON "port.ico"
+IDI_CONFIGFILE ICON "configfile.ico"
+IDI_FILE ICON "file.ico"
+IDI_EXPANSION ICON "expansion.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// 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
+ LTEXT "Main ROM file:",IDC_ROMTEXT,14,13,263,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
+ LTEXT "Extended ROM file:",IDC_ROMFILE2TEXT,14,43,263,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
+ LTEXT "Cartridge ROM file:",IDC_FLASHTEXT2,12,110,265,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
+ LTEXT "Flash RAM file:",IDC_FLASHTEXT,12,142,265,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
+ 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,137
+ CONTROL "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,125,92,10
+ LTEXT "Refresh:",IDC_REFRESHTEXT,18,173,28,8
+ CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,168,75,20
+ EDITTEXT IDC_RATETEXT,124,172,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,84
+ CONTROL "Normal",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,231,148,44,10
+ CONTROL "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,164,45,10
+ CONTROL "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,231,180,46,10
+ COMBOBOX IDC_DA_MODE,20,218,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,84,214,101,20
+ LTEXT "FPS adj.:",IDC_REFRESH2TEXT,16,193,32,8
+ CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,188,127,20
+ EDITTEXT IDC_RATE2TEXT,175,192,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,125,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 "RTG mode:",IDC_STATIC,19,101,59,15,SS_CENTERIMAGE
+ PUSHBUTTON "Reset to defaults",IDC_DA_RESET,212,218,73,14
+ RTEXT "Resolution:",IDC_STATIC,27,152,59,15,SS_CENTERIMAGE
+ COMBOBOX IDC_LORES,100,152,102,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Remove interlace artifacts",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,139,99,10
+ RTEXT "Windowed:",IDC_STATIC,17,46,40,15,SS_CENTERIMAGE
+ RTEXT "Fullscreen:",IDC_STATIC,17,19,40,15,SS_CENTERIMAGE
+END
+
+IDD_MEMORY DIALOGEX 0, 0, 300, 158
+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
+ GROUPBOX "A3000/A4000 Advanced Memory Settings",-1,14,84,274,65
+ RTEXT "Motherboard Fast RAM:",-1,40,100,129,10,SS_CENTERIMAGE
+ CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,96,59,20
+ EDITTEXT IDC_MBRAM1,244,99,34,12,ES_CENTER | ES_READONLY
+ RTEXT "Processor Slot Fast RAM:",-1,40,123,129,10,SS_CENTERIMAGE
+ CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,119,59,20
+ EDITTEXT IDC_MBRAM2,244,122,34,12,ES_CENTER | ES_READONLY
+END
+
+IDD_CPU DIALOGEX 0, 0, 300, 241
+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,1,81,144,BS_LEFT
+ CONTROL "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,15,63,10
+ CONTROL "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,28,65,10
+ CONTROL "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,41,63,10
+ CONTROL "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,54,64,10
+ CONTROL "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,67,66,10
+ CONTROL "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,80,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,107,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,119,73,10
+ GROUPBOX "CPU Emulation Speed",IDC_STATIC,90,3,205,92
+ 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
+ CONTROL "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,114,71,67,20
+ CONTROL "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,219,71,69,20
+ GROUPBOX "Advanced JIT Settings",IDC_STATIC,90,147,205,91
+ CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,140,161,115,20
+ EDITTEXT IDC_CACHETEXT,255,166,30,12,ES_CENTER | ES_READONLY
+ CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,194,63,10
+ CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,208,63,10
+ CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,222,62,10
+ CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,194,62,10
+ CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,235,194,52,10
+ CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,208,52,10
+ CONTROL "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,221,73,10
+ GROUPBOX "FPU",IDC_STATIC,5,147,81,90,BS_LEFT
+ CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,94,73,8
+ CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,161,63,10
+ CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,63,10
+ CONTROL "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,188,63,10
+ CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,202,63,10
+ RTEXT "CPU Frequency",IDC_STATIC,105,119,51,10,SS_CENTERIMAGE
+ GROUPBOX "Cycle-exact CPU Emulation Speed",IDC_STATIC,90,99,205,46
+ RTEXT "CPU",IDC_STATIC,96,77,17,10,SS_CENTERIMAGE
+ RTEXT "Chipset",IDC_STATIC,182,77,26,9,SS_CENTERIMAGE
+ RTEXT "CPU Idle",IDC_STATIC,231,60,47,9,SS_CENTERIMAGE
+ RTEXT "Cache size:",IDC_STATIC,95,167,42,10,SS_CENTERIMAGE
+ CONTROL "68040 MMU [] 68040 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,132,73,10
+ COMBOBOX IDC_CPU_FREQUENCY,165,118,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_CPU_FREQUENCY2,218,117,70,15
+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,12,197,64,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Create Standard Disk [] Creates a standard 880 or 1760 KB ADF disk image.",IDC_CREATE,81,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,187,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,81,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,167
+ PUSHBUTTON "Add &Directory or Archive...",IDC_NEW_FS,10,171,103,15
+ PUSHBUTTON "Add &Hardfile...",IDC_NEW_HF,130,171,74,15
+ PUSHBUTTON "Add Ha&rd Drive...",IDC_NEW_HD,220,171,75,15
+ PUSHBUTTON "Remove",IDC_REMOVE,235,193,60,15
+ PUSHBUTTON "&Properties",IDC_EDIT,235,210,60,15
+ CONTROL "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,192,100,10
+ CONTROL "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,192,119,10
+ CONTROL "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,203,121,10
+ CONTROL "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,226,101,10
+ CONTROL "Include CD/DVD drives..",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,215,100,10
+ CONTROL "Automount removable drives",IDC_MAPDRIVES_AUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,215,115,10
+ CONTROL "Include removable drives..",IDC_MAPDRIVES_REMOVABLE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,203,100,10
+END
+
+IDD_SOUND 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
+ COMBOBOX IDC_SOUNDCARDLIST,5,3,291,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Sound Emulation",IDC_SOUNDSETTINGS,5,20,120,85
+ CONTROL "Disabled",IDC_SOUND0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,13,35,101,10
+ CONTROL "Disabled, but emulated",IDC_SOUND1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,48,102,10
+ CONTROL "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,61,102,10
+ CONTROL "Enabled, 100% accurate",IDC_SOUND3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,74,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,106,290,60
+ LTEXT "Frequency:",IDC_SOUNDFREQTXT,11,140,53,8,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDFREQ,13,149,51,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Audio filter:",IDC_SOUNDFILTERTXT,209,140,77,8,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDFILTER,209,149,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Channel mode:",IDC_SOUNDSTEREOTXT,11,116,57,8,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDSTEREO,13,125,122,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,209,116,75,8,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDINTERPOLATION,209,125,80,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,141,116,63,8,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDSTEREOSEP,142,125,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Stereo delay:",IDC_SOUNDSTEREOMIXTXT,141,140,63,8,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDSTEREOMIX,142,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Floppy Drive Sound Emulation",IDC_STATIC,6,172,220,60
+ CONTROL "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,186,107,19
+ EDITTEXT IDC_SOUNDDRIVEVOLUME2,124,188,40,12,ES_CENTER | ES_READONLY
+ COMBOBOX IDC_SOUNDDRIVE,173,187,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_SOUNDDRIVESELECT,18,209,202,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_SOUNDSWAP,73,149,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Swap channels:",IDC_SOUNDSWAPTXT,74,140,61,8,SS_CENTERIMAGE
+ CONTROL "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,89,103,10
+ CONTROL "Exclusive mode",IDC_SOUND_EXCLUSIVE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,137,25,154,10
+ CONTROL "DirectSound",IDC_SOUND_DS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,181,55,10
+ CONTROL "WASAPI",IDC_SOUND_WASAPI,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,193,53,10
+ CONTROL "OpenAL",IDC_SOUND_OPENAL,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,205,53,10
+ CONTROL "PortAudio",IDC_SOUND_PORTAUDIO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,235,217,58,10
+ GROUPBOX "Drivers",IDC_STATIC,230,172,66,60
+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_IOPORTS DIALOGEX 0, 0, 300, 228
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+ GROUPBOX "Parallel Port",IDC_STATIC,5,2,291,86
+ RTEXT "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE
+ COMBOBOX IDC_PRINTERLIST,49,15,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Flush print job",IDC_FLUSHPRINTER,114,51,58,12
+ RTEXT "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,176,49,76,15,SS_NOTIFY | SS_CENTERIMAGE
+ EDITTEXT IDC_PRINTERAUTOFLUSH,255,50,25,12,ES_NUMBER
+ RTEXT "Type:",IDC_STATIC,15,33,21,15,SS_CENTERIMAGE
+ EDITTEXT IDC_PS_PARAMS,114,67,167,12,ES_AUTOHSCROLL
+ GROUPBOX "Serial Port",IDC_STATIC,4,92,292,48
+ COMBOBOX IDC_SERIAL,49,104,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,123,48,12
+ CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,123,55,12
+ RTEXT "Out:",IDC_MIDI,10,154,34,15,SS_CENTERIMAGE
+ COMBOBOX IDC_MIDIOUTLIST,49,154,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ RTEXT "In:",IDC_MIDI2,10,174,29,15,SS_CENTERIMAGE
+ COMBOBOX IDC_MIDIINLIST,49,174,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,
+ "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,123,65,12
+ CONTROL "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,123,78,12
+ COMBOBOX IDC_PRINTERTYPELIST,49,33,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Ghostscript extra parameters:",IDC_STATIC,10,66,102,15,SS_CENTERIMAGE
+ GROUPBOX "MIDI",IDC_STATIC,5,143,291,51,BS_LEFT
+ GROUPBOX "Protection Dongle",IDC_STATIC,5,197,292,30,BS_LEFT
+ COMBOBOX IDC_DONGLELIST,50,208,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+END
+
+IDD_GAMEPORTS DIALOGEX 0, 0, 300, 236
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+ COMBOBOX IDC_PORT0_JOYS,45,29,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_PORT1_JOYS,45,65,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Swap port 0 and 1",IDC_SWAP,194,101,93,14
+ RTEXT "Port 0:",IDC_STATIC,11,28,25,15,SS_CENTERIMAGE
+ RTEXT "Port 1:",IDC_STATIC,11,64,25,15,SS_CENTERIMAGE
+ LTEXT "X-Arcade layout information []#1",IDC_STATIC,64,87,106,15,SS_NOTIFY | SS_CENTERIMAGE
+ GROUPBOX "Mouse and Joystick settings",IDC_STATIC,4,15,292,148
+ GROUPBOX "Mouse extra settings",IDC_STATIC,4,165,292,69
+ RTEXT "Mouse speed:",IDC_STATIC,17,180,56,10,SS_CENTERIMAGE
+ EDITTEXT IDC_INPUTSPEEDM,87,180,25,12,ES_NUMBER
+ CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,187,120,10
+ CONTROL "Full tablet input emulation",IDC_PORT_TABLET_FULL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,220,121,10
+ CONTROL "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,175,119,10
+ COMBOBOX IDC_PORT_TABLET_CURSOR,167,201,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Magic Mouse cursor mode:",IDC_STATIC,17,204,138,10,SS_CENTERIMAGE
+ COMBOBOX IDC_PORT0_JOYSMODE,195,47,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_PORT1_JOYSMODE,195,82,91,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_PORT2_JOYS,45,125,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Parallel port joystick adapter",IDC_STATIC,10,105,147,15,SS_CENTERIMAGE
+ COMBOBOX IDC_PORT3_JOYS,45,143,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+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,224,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,214
+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 "Miscellaneous Options",IDC_STATIC,8,2,290,136
+ CONTROL "Untrap = middle button",IDC_JULIAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,19,110,10
+ CONTROL "Show GUI on startup",IDC_SHOWGUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,31,109,10
+ CONTROL "Native On-screen LEDs",IDC_SHOWLEDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,80,109,10
+ CONTROL "Don't show taskbar button",IDC_NOTASKBARBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,56,109,10
+ CONTROL "Use CTRL-F11 to quit",IDC_CTRLF11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,43,110,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,202,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,201,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,19,69,110,10
+ CONTROL "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,216,64,10
+ COMBOBOX IDC_SCSIMODE,213,30,80,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_LANGUAGE,153,117,122,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Language",IDC_STATIC,138,107,154,27
+ CONTROL "Disable screensaver",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,82,109,10
+ COMBOBOX IDC_DD_SURFACETYPE,213,63,79,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "DirectDraw display buffer:",IDC_STATIC,195,50,92,10,SS_CENTERIMAGE
+ RTEXT "SCSI and CD/DVD access method:",IDC_STATIC,151,12,126,10,SS_CENTERIMAGE
+ CONTROL "Synchronize clock",IDC_CLOCKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,95,111,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,19,108,100,10
+ CONTROL "RTG On-screen LEDs",IDC_SHOWLEDSRTG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,141,93,109,10
+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,168,62,10
+ CONTROL "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,180,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
+ 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,17,174,159,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, 217
+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",IDC_AVIOUTPUT_FRAMELIMITER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,122,10
+ CONTROL "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14
+ PUSHBUTTON "Save screenshot",IDC_SCREENSHOT,16,141,77,14
+ GROUPBOX "Ripper",IDC_STATIC,5,127,274,49
+ PUSHBUTTON "Pro Wizard 1.62",IDC_PROWIZARD,192,141,77,14,WS_DISABLED
+ CONTROL "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,159,77,14
+ GROUPBOX "Input Recorder",IDC_STATIC,5,178,274,33
+ CONTROL "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,190,77,14
+ CONTROL "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,190,77,14
+ CONTROL "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,192,78,10
+ CONTROL "Disable sound output",IDC_AVIOUTPUT_NOSOUNDOUTPUT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,88,123,10
+ CONTROL "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,88,120,10
+ CONTROL "Capture before filtering",IDC_AVIOUTPUT_ORIGINALSIZE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,71,120,10
+ CONTROL "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,160,162,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
+ 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, 241
+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,1,294,199
+ COMBOBOX IDC_FILTERMODE,20,15,103,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERFILTER,132,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,221,15,67,14
+ RTEXT "Horiz. size:",-1,7,61,46,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,54,152,19
+ EDITTEXT IDC_FILTERHZV,253,56,34,12,ES_CENTER | ES_READONLY
+ RTEXT "Vert. size:",-1,7,81,46,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,74,152,19
+ EDITTEXT IDC_FILTERVZV,253,76,34,12,ES_CENTER | ES_READONLY
+ RTEXT "Horiz. position:",-1,5,101,55,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,94,151,19
+ EDITTEXT IDC_FILTERHOV,253,96,34,12,ES_CENTER | ES_READONLY
+ RTEXT "Vert. position:",-1,5,120,55,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,114,151,19
+ EDITTEXT IDC_FILTERVOV,253,116,34,12,ES_CENTER | ES_READONLY
+ RTEXT "Extra settings:",-1,105,135,57,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,174,151,19
+ EDITTEXT IDC_FILTERXLV,253,176,34,12,ES_CENTER | ES_READONLY
+ COMBOBOX IDC_FILTERSLR,253,151,33,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Presets",-1,0,203,296,36
+ COMBOBOX IDC_FILTERPRESETS,8,217,119,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Load",IDC_FILTERPRESETLOAD,132,216,47,14
+ PUSHBUTTON "Save",IDC_FILTERPRESETSAVE,184,216,47,14
+ PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,236,216,47,14
+ COMBOBOX IDC_FILTERHZMULT,59,60,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERVZMULT,59,80,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERXTRA,105,151,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERASPECT,14,151,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,168,85,10
+ RTEXT "Automatic scaling:",-1,9,38,79,10,SS_CENTERIMAGE
+ COMBOBOX IDC_FILTERAUTOSCALE,105,36,140,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERASPECT2,14,180,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+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, 244
+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
+ CONTROL "",IDC_ASSOCIATELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,19,94,164,100
+ GROUPBOX "File Extension Associations",IDC_STATIC,8,83,186,138
+ PUSHBUTTON "Deassociate all",IDC_ASSOCIATE_OFF,108,200,75,14
+ PUSHBUTTON "Associate all",IDC_ASSOCIATE_ON,19,200,75,14
+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,5,259,47,14
+ PUSHBUTTON "Quit",IDC_QUITEMU,55,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,106,259,47,14,NOT WS_VISIBLE
+END
+
+IDD_PATHS DIALOGEX 0, 0, 300, 243
+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,4,260,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_ROM,14,15,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_ROMS,281,15,11,15
+ LTEXT "Configuration files:",IDC_PATHS_CONFIGL,14,32,121,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_CONFIG,14,42,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_CONFIGS,281,42,11,15
+ LTEXT "Screenshots:",IDC_PATHS_SCREENSHOTL,14,59,260,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_SCREENSHOT,14,69,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_SCREENSHOTS,281,69,11,15
+ LTEXT "State files:",IDC_PATHS_STATEFILEL,14,86,260,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_SAVESTATE,14,96,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_SAVESTATES,281,96,11,15
+ LTEXT "Videos:",IDC_PATHS_AVIOUTPUTL,14,113,260,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_AVIOUTPUT,14,123,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_AVIOUTPUTS,281,123,11,15
+ LTEXT "Saveimages:",IDC_PATHS_SAVEIMAGEL,14,140,261,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_SAVEIMAGE,14,151,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_SAVEIMAGES,281,151,11,15
+ PUSHBUTTON "Reset to defaults",IDC_PATHS_DEFAULT,14,196,92,14
+ PUSHBUTTON "Rescan ROMs",IDC_ROM_RESCAN,14,212,92,14
+ PUSHBUTTON "Clear registry",IDC_RESETREGISTRY,111,212,92,14
+ COMBOBOX IDC_PATHS_DEFAULTTYPE,111,197,163,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Clear disk history",IDC_RESETDISKHISTORY,14,228,92,14
+ CONTROL "Cache Configuration files",IDC_PATHS_CONFIGCACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,32,97,10
+ LTEXT "Rips:",IDC_PATHS_RIPSL,13,168,261,8,SS_CENTERIMAGE
+ EDITTEXT IDC_PATHS_RIP,13,178,261,15,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_PATHS_RIPS,280,178,11,15
+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
+
+IDD_EXPANSION DIALOGEX 0, 0, 300, 206
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+ RTEXT "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,44,53,10,SS_NOTIFY | SS_CENTERIMAGE
+ CONTROL "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,40,60,20
+ EDITTEXT IDC_P96RAM,152,43,34,12,ES_CENTER | ES_READONLY
+ GROUPBOX "RTG Graphics Card",IDC_STATIC,5,12,291,113
+ CONTROL "Scale if smaller than display size setting",IDC_RTG_SCALE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,74,162,10
+ CONTROL "Match host and RTG color depth if possible",IDC_RTG_MATCH_DEPTH,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,62,163,10
+ COMBOBOX IDC_RTG_8BIT,211,29,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_16BIT,211,44,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_24BIT,211,59,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_32BIT,211,74,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,86,162,10
+ COMBOBOX IDC_RTG_SCALE_ASPECTRATIO,211,101,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Aspect ratio:",IDC_STATIC,153,102,52,10,SS_CENTERIMAGE
+ RTEXT "Refresh rate:",IDC_STATIC,22,103,51,10,SS_CENTERIMAGE
+ COMBOBOX IDC_RTG_VBLANKRATE,77,101,68,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,148,120,10
+ CONTROL "uaenet.device [] Sana 2 compatible network device emulation. WinPcap required.",IDC_SANA2,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,160,77,10
+ CONTROL "A2065 Z2 [] A2065 Ethernet Zorro II card emulation. WinPcap required.",IDC_A2065,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,160,57,10
+ GROUPBOX "Network",IDC_STATIC,126,130,169,66
+ COMBOBOX IDC_NETDEVICE,132,176,156,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,160,102,10
+ CONTROL "Catweasel Z2 emulation [] Catweasel MK2 Zorro II card emulation. Physical Windows compatible Catweasel card and drivers required.",IDC_CATWEASEL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,148,101,10
+ GROUPBOX "Miscellaneous Expansions",IDC_STATIC,5,130,117,66
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,1,0
+ PRODUCTVERSION 2,0,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", "2.0.1"
+ VALUE "InternalName", "WinUAE"
+ VALUE "LegalCopyright", "© 1996-2009 under the GNU Public License (GPL)"
+ VALUE "OriginalFilename", "WinUAE.exe"
+ VALUE "ProductName", "WinUAE"
+ VALUE "ProductVersion", "2.0.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"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_FILTER, DIALOG
+ BEGIN
+ BOTTOMMARGIN, 237
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// 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_IOPORTS "IO ports"
+ IDS_MISC1 "Miscellaneous"
+ IDS_MEMORY "RAM"
+ IDS_CPU "CPU and FPU"
+ IDS_CHIPSET "Chipset"
+ IDS_INPUT "Input"
+ IDS_FILTER "Filter"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_MISC2 "Pri. & Extensions"
+ IDS_PATHS "Paths"
+ IDS_QUICKSTART "Quickstart"
+ IDS_FRONTEND "Frontend"
+ IDS_CHIPSET2 "Adv. Chipset"
+ IDS_GAMEPORTS "Game ports"
+ IDS_EXPANSION "Expansions"
+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.\nMikko Nieminen - Demo compatibility testing.\nArabuusimiehet - [This information is on a need-to-know basis]"
+ 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 "Surfaces"
+ 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"
+ IDS_AUTOMATIC "Automatic"
+ IDS_ALL "All"
+ IDS_INPUTTOGGLE "Toggle"
+ IDS_NETDISCONNECTED "Cable disconnected"
+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_SCREEN_VSYNC_AUTOSWITCH "AutoVSync"
+ IDS_SOUND_MONO "Mono"
+ IDS_SOUND_MIXED "Mixed"
+ IDS_SOUND_STEREO "Stereo"
+ IDS_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_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_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_SB_FAVORITENAME "Enter name..."
+ IDS_SB_CUSTOMEVENT "Enter custom event string.."
+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
+
+STRINGTABLE
+BEGIN
+ IDS_FLOPPYTYPE35DDPC "3.5"" DD (PC)"
+ IDS_FLOPPYTYPE35HDPC "3.5"" HD (PC)"
+ IDS_JOYMODE_DEFAULT "Default"
+ IDS_JOYMODE_MOUSE "Mouse"
+ IDS_JOYMODE_JOYSTICK "Joystick"
+ IDS_JOYMODE_JOYSTICKANALOG "Analog joystick"
+ IDS_JOYMODE_LIGHTPEN "Light pen"
+ IDS_JOYMODE_MOUSE_CDTV "CDTV remote mouse"
+ IDS_JOYMODE_JOYSTICK_CD32 "CD32 pad"
+ IDS_TABLET_BOTH_CURSORS "Show both cursors"
+ IDS_TABLET_NATIVE_CURSOR "Show native cursor only"
+ IDS_TABLET_HOST_CURSOR "Show host cursor only"
+ IDS_AUTOSCALE_DISABLED "Disabled"
+ IDS_AUTOSCALE_SCALING "Automatic scaling"
+ IDS_AUTOSCALE_RESIZE "Automatic resize"
+ IDS_PRINTER_ASCII "ASCII-Only"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_PRINTER_EPSON9 "Epson Matrix Printer Emulation, 9pin"
+ IDS_PRINTER_POSTSCRIPT_DETECTION "PostScript (Passthrough)"
+ IDS_PRINTER_POSTSCRIPT_EMULATION
+ "PostScript (Emulation, GhostScript required)"
+ IDS_PRINTER_PASSTHROUGH "Passthrough"
+ IDS_RES_LORES "Lores"
+ IDS_RES_HIRES "Hires (normal)"
+ IDS_RES_SUPERHIRES "SuperHires"
+ IDS_PRINTER_EPSON48 "Epson Matrix Printer Emulation, 48pin"
+END
+
+#endif // English (Neutral) 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
+