int size = zfile_size(z);
if (series2) {
int total = 0;
- while (total < 32768) {
+ int seekpos = 0;
+ int size = zfile_size(z);
+ if (size > 16384 + 4096) {
+ zfile_fread(wd->rom, 64, 1, z);
+ zfile_fseek(z, 16384, SEEK_SET);
+ zfile_fread(wd->rom + 64, 64, 1, z);
+ if (!memcmp(wd->rom, wd->rom + 64, 64))
+ wd->rombankswitcher = true;
+ else
+ seekpos = 16384;
+ }
+ while (total < 32768 - 4096) {
int prevtotal = total;
- zfile_fseek(z, 0, SEEK_SET);
+ zfile_fseek(z, seekpos, SEEK_SET);
total += zfile_fread(wd->rom + total, 1, wd->rom_size - total >= wd->rom_size ? wd->rom_size : wd->rom_size - total, z);
if (prevtotal == total)
break;
}
}
zfile_fclose(z);
- if (series2 && size > 16384) {
- wd->rombankswitcher = 1;
- }
} else {
isscsi = false;
}
static const TCHAR *abspointers[] = { _T("none"), _T("mousehack"), _T("tablet"), 0 };
static const TCHAR *magiccursors[] = { _T("both"), _T("native"), _T("host"), 0 };
static const TCHAR *autoscale[] = { _T("none"), _T("auto"), _T("standard"), _T("max"), _T("scale"), _T("resize"), _T("center"), _T("manual"),
- _T("integer"), _T("half-integer"), _T("integer_auto"), _T("half-integer_auto"), 0 };
+ _T("integer"), _T("half-integer"), _T("integer_auto"), _T("half-integer_auto"), _T("separator"), _T("overscan_blanking"), 0 };
static const TCHAR *autoscale_rtg[] = { _T("resize"), _T("scale"), _T("center"), _T("integer"), 0 };
static const TCHAR *joyportmodes[] = { _T(""), _T("mouse"), _T("mousenowheel"), _T("djoy"), _T("gamepad"), _T("ajoy"), _T("cdtvjoy"), _T("cd32joy"), _T("lightpen"), 0 };
static const TCHAR *joyaf[] = { _T("none"), _T("normal"), _T("toggle"), _T("always"), 0 };
bool cfgfile_board_enabled(struct uae_prefs *p, int romtype, int devnum)
{
int idx;
+ if (romtype == ROMTYPE_CPUBOARD && currprefs.cpuboard_type)
+ return true;
struct boardromconfig *brc = get_device_rom(p, romtype, devnum, &idx);
if (!brc)
return false;
}
_stprintf(buf, _T("%s_rom_file_id"), name);
+ buf2[0] = 0;
if (cfgfile_rom (option, value, buf, buf2, MAX_DPATH / sizeof (TCHAR))) {
if (buf2[0]) {
brc = get_device_rom_new(p, ert->romtype, j, &idx);
{
return ISCPUBOARD(BOARD_KUPKE, 0);
}
+static bool is_aca500(void)
+{
+ return ISCPUBOARD(BOARD_IC, BOARD_IC_ACA500);
+}
DECLARE_MEMORY_FUNCTIONS(blizzardio);
static addrbank blizzardio_bank = {
cpuboard_rethink();
}
-
static uae_u32 REGPARAM2 blizzardio_bget(uaecptr addr)
{
uae_u8 v = 0;
if (is_csmk3() || is_blizzardppc()) {
;//write_log(_T("CS IO WGET %08x\n"), addr);
//activate_debugger();
+ } else if (is_aca500()) {
+ addr &= 0x3f000;
+ switch (addr)
+ {
+ case 0x03000:
+ return 0;
+ case 0x07000:
+ return 0;
+ case 0x0b000:
+ return 0;
+ case 0x0f000:
+ return 0;
+ case 0x13000:
+ return 0;
+ case 0x17000:
+ return 0;
+ case 0x1b000:
+ return 0x8000;
+ case 0x1f000:
+ return 0x8000;
+ case 0x23000:
+ return 0;
+ case 0x27000:
+ return 0;
+ case 0x2b000:
+ return 0;
+ case 0x2f000:
+ return 0;
+ case 0x33000:
+ return 0x8000;
+ case 0x37000:
+ return 0;
+ case 0x3b000:
+ return 0;
+ }
}
return 0;
}
if (is_apollo()) {
map_banks(&blizzardf0_bank, 0xf00000 >> 16, 131072 >> 16, 0);
}
+ if (is_dkb()) {
+ if (cpuboard_size >= 4 * 1024 * 1024) {
+ if (cpuboard_size <= 0x4000000) {
+ map_banks(&blizzardram_bank, blizzardram_bank.start >> 16, 0x4000000 >> 16, cpuboard_size >> 16);
+ } else {
+ map_banks(&blizzardram_bank, blizzardram_bank.start >> 16, cpuboard_size >> 16, 0);
+ }
+ }
+ }
+ if (is_aca500()) {
+ map_banks(&blizzardf0_bank, 0xf00000 >> 16, 524288 >> 16, 0);
+ map_banks(&blizzardf0_bank, 0xa00000 >> 16, 524288 >> 16, 0);
+ map_banks(&blizzardio_bank, 0xb00000 >> 16, 262144 >> 16, 0);
+ }
}
void cpuboard_reset(void)
cpuboard_size = currprefs.cpuboardmem1_size;
- if (is_a2630()) {
+ if (is_aca500()) {
+
+ blizzardf0_bank.start = 0x00f00000;
+ blizzardf0_bank.allocated = 524288;
+ blizzardf0_bank.mask = blizzardf0_bank.allocated - 1;
+ mapped_malloc(&blizzardf0_bank);
+
+ } else if (is_a2630()) {
blizzardf0_bank.start = 0x00f00000;
blizzardf0_bank.allocated = 131072;
blizzardea_bank.mask = blizzardea_bank.allocated - 1;
mapped_malloc(&blizzardea_bank);
+ } else if (is_dkb()) {
+
+ blizzardram_bank.start = 0x10000000;
+ blizzardram_bank.allocated = cpuboard_size;
+ blizzardram_bank.mask = blizzardram_bank.allocated - 1;
+ blizzardram_bank.startmask = 0x10000000;
+ blizzardram_bank.label = _T("dkb");
+ mapped_malloc(&blizzardram_bank);
+
} else if (is_kupke()) {
blizzardea_bank.allocated = 65536;
void cpuboard_overlay_override(void)
{
- if (!is_a2630())
- return;
- if (!(a2630_io & 2))
- map_banks(&blizzardf0_bank, 0xf80000 >> 16, f0rom_size >> 16, 0);
- if (mem25bit_bank.allocated)
- map_banks(&chipmem_bank, (mem25bit_bank.start + mem25bit_bank.allocated) >> 16, (1024 * 1024) >> 16, 0);
- else
- map_banks(&chipmem_bank, 0x01000000 >> 16, (1024 * 1024) >> 16, 0);
-
+ if (is_a2630()) {
+ if (!(a2630_io & 2))
+ map_banks(&blizzardf0_bank, 0xf80000 >> 16, f0rom_size >> 16, 0);
+ if (mem25bit_bank.allocated)
+ map_banks(&chipmem_bank, (mem25bit_bank.start + mem25bit_bank.allocated) >> 16, (1024 * 1024) >> 16, 0);
+ else
+ map_banks(&chipmem_bank, 0x01000000 >> 16, (1024 * 1024) >> 16, 0);
+ }
}
void cpuboard_clear(void)
bool cpuboard_32bit(struct uae_prefs *p)
{
int b = cpuboard_memorytype(p);
+ if (p->cpuboard_type) {
+ if (!(cpuboards[p->cpuboard_type].subtypes[p->cpuboard_subtype].deviceflags & EXPANSIONTYPE_24BIT))
+ return true;
+ }
return b == BOARD_MEMORY_HIGHMEM ||
b == BOARD_MEMORY_BLIZZARD_12xx ||
b == BOARD_MEMORY_BLIZZARD_PPC ||
}
}
+uaecptr cpuboard_get_reset_pc(uaecptr *stack)
+{
+ if (is_aca500()) {
+ *stack = get_long(0xa00000);
+ return get_long(0xa00004);
+ } else {
+ *stack = get_long(0);
+ return get_long(4);
+ }
+}
+
bool cpuboard_io_special(int addr, uae_u32 *val, int size, bool write)
{
addr &= 65535;
int boardid = cpuboards[currprefs.cpuboard_type].id;
switch (boardid)
{
+ case BOARD_IC:
+ break;
+
case BOARD_COMMODORE:
switch(currprefs.cpuboard_subtype)
{
return &expamem_null;
}
}
-
+
if (!autoconfig_rom && roms[0] != -1) {
romwarning(roms);
write_log (_T("ROM id %d not found for CPUBoard '%s' emulation\n"), roms[0], boardname);
protect_roms(false);
cpuboard_non_byte_ea = true;
- if (is_a2630()) {
+ if (is_aca500()) {
+ f0rom_size = 524288;
+ zfile_fread(blizzardf0_bank.baseaddr, f0rom_size, 1, autoconfig_rom);
+ autoconf = false;
+ if (zfile_needwrite(autoconfig_rom)) {
+ flashrom_file = autoconfig_rom;
+ autoconfig_rom = NULL;
+ }
+ flashrom = flash_new(blizzardf0_bank.baseaddr, f0rom_size, f0rom_size, 0xa4, flashrom_file);
+ } else if (is_a2630()) {
f0rom_size = 131072;
zfile_fread(blizzardf0_bank.baseaddr, 1, f0rom_size, autoconfig_rom);
autoconf = false;
_T("oktagon2008"), _T("Oktagon 2008"), _T("BSC/Alfa Data"),
ncr_oktagon_autoconfig_init, oktagon_add_scsi_unit, ROMTYPE_OKTAGON, 0, 0, 2, false,
NULL, 0,
- false, EXPANSIONTYPE_SCSI
+ true, EXPANSIONTYPE_SCSI
},
{
_T("alfapower"), _T("AlfaPower/AT-Bus 2008"), _T("BSC/Alfa Data"),
_T("A3001 Series I"),
_T("A3001SI"),
ROMTYPE_CB_A3001S1, 0,
- gvp_add_ide_unit, EXPANSIONTYPE_IDE,
+ gvp_add_ide_unit, EXPANSIONTYPE_IDE | EXPANSIONTYPE_24BIT,
BOARD_MEMORY_Z2,
8 * 1024 * 1024,
0,
_T("A3001 Series II"),
_T("A3001SII"),
0, 0,
- gvp_add_ide_unit, EXPANSIONTYPE_IDE,
+ gvp_add_ide_unit, EXPANSIONTYPE_IDE | EXPANSIONTYPE_24BIT,
BOARD_MEMORY_Z2,
8 * 1024 * 1024,
0,
_T("A530"),
_T("GVPA530"),
ROMTYPE_GVPS2, 0,
- gvp_s2_add_scsi_unit, EXPANSIONTYPE_SCSI,
+ gvp_s2_add_scsi_unit, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_24BIT,
BOARD_MEMORY_Z2,
8 * 1024 * 1024,
0,
_T("DKB12x0"),
ROMTYPE_CB_DKB12x0, 0,
cpuboard_dkb_add_scsi_unit, EXPANSIONTYPE_SCSI,
- BOARD_MEMORY_HIGHMEM,
+ 0,
128 * 1024 * 1024,
0,
ncr_dkb_autoconfig_init, NULL, 2, 0
NULL
}
};
+static const struct cpuboardsubtype icboard_sub[] = {
+ {
+ _T("ACA 500"),
+ _T("aca500"),
+ ROMTYPE_CB_ACA500, 0,
+ NULL, EXPANSIONTYPE_24BIT
+ },
+ {
+ NULL
+ }
+};
static const struct cpuboardsubtype dummy_sub[] = {
{ NULL }
_T("Kupke"),
kupkeboard_sub, 0
},
+#if 0
+ {
+ BOARD_IC,
+ _T("Individual Computers"),
+ icboard_sub, 0
+ },
+#endif
{
NULL
}
}
static int cpuboard_hd;
+static romconfig cpuboard_dummy;
void add_cpuboard_unit(int unit, struct uaedev_config_info *uci, struct romconfig *rc)
{
static void add_cpuboard_unit_init(void)
{
+ memset(&cpuboard_dummy, 0, sizeof cpuboard_dummy);
+ cpuboard_dummy.device_id = 7;
if (currprefs.cpuboard_type) {
struct romconfig *rc = get_device_romconfig(&currprefs, ROMTYPE_CPUBOARD, 0);
- if (rc) {
- const struct cpuboardtype *cbt = &cpuboards[currprefs.cpuboard_type];
- if (cbt->subtypes) {
- if (cbt->subtypes[currprefs.cpuboard_subtype].add) {
- struct uaedev_config_info ci = { 0 };
- write_log(_T("Initializing CPUBoard '%s' HD controller\n"), cbt->subtypes[currprefs.cpuboard_subtype].name);
- cbt->subtypes[currprefs.cpuboard_subtype].add(-1, &ci, rc);
- }
+ if (!rc)
+ rc = &cpuboard_dummy;
+ const struct cpuboardtype *cbt = &cpuboards[currprefs.cpuboard_type];
+ if (cbt->subtypes) {
+ if (cbt->subtypes[currprefs.cpuboard_subtype].add) {
+ struct uaedev_config_info ci = { 0 };
+ write_log(_T("Initializing CPUBoard '%s' HD controller\n"), cbt->subtypes[currprefs.cpuboard_subtype].name);
+ cbt->subtypes[currprefs.cpuboard_subtype].add(-1, &ci, rc);
}
}
}
typedef bool(*E8ACCESS)(int, uae_u32*, int, bool);
#define EXPANSIONTYPE_SCSI 1
#define EXPANSIONTYPE_IDE 2
+#define EXPANSIONTYPE_24BIT 4
struct expansionboardsettings
{
const TCHAR *name;
extern bool cpuboard_io_special(int addr, uae_u32 *val, int size, bool write);
extern void cpuboard_overlay_override(void);
extern void cpuboard_setboard(struct uae_prefs *p, int type, int subtype);
+extern uaecptr cpuboard_get_reset_pc(uaecptr *stack);
extern bool ppc_interrupt(int new_m68k_ipl);
#define BOARD_GVP_SUB_GFORCE030 3
#define BOARD_GVP_SUB_TEKMAGIC 4
#define BOARD_KUPKE 9
+#define BOARD_IC 10
+#define BOARD_IC_ACA500 0
+
extern void alloc_cycle_ext (int, int);
extern void alloc_cycle_blitter (int hpos, uaecptr *ptr, int);
extern bool ispal (void);
+extern bool isvga (void);
extern int current_maxvpos (void);
extern struct chipset_refresh *get_chipset_refresh (void);
extern void compute_framesync (void);
extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh);
extern void store_custom_limits (int w, int h, int dx, int dy);
extern void set_custom_limits (int w, int h, int dx, int dy);
+extern void check_custom_limits (void);
extern void get_custom_topedge (int *x, int *y, bool max);
extern void get_custom_raw_limits (int *pw, int *ph, int *pdx, int *pdy);
extern void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq);
MEMORY_FUNCTIONS(a3000lmem);
MEMORY_FUNCTIONS(a3000hmem);
-/* 25bit memory (0x10000000) */
+/* 25bit memory (0x01000000) */
MEMORY_FUNCTIONS(mem25bit);
static void ncr9x_io_bput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 val)
{
int reg_shift = 2;
+ uaecptr oldaddr = addr;
+
addr &= ncr->board_mask;
if (isncr(ncr, ncr_masoboshi_scsi)) {
if (ncr->dma_cnt == 0)
esp_dma_enable(ncr->devobject.lsistate, 1);
}
- //write_log(_T("Blizzard DMA PUT %08x %02X\n"), addr, (uae_u8)val);
+ //write_log(_T("Blizzard DMA PUT %08x %02X\n"), oldaddr, (uae_u8)val);
return;
}
} else if (ISCPUBOARD(BOARD_CYBERSTORM, BOARD_CYBERSTORM_SUB_MK1)) {
addr >>= reg_shift;
addr &= IO_MASK;
#if NCR_DEBUG > 1
- write_log(_T("ESP write %02X %02X %08X\n"), addr, val & 0xff, M68K_GETPC);
+ write_log(_T("ESP write %02X (%08X) %02X %08X\n"), addr, oldaddr, val & 0xff, M68K_GETPC);
#endif
esp_reg_write(ncr->devobject.lsistate, (addr), val);
}
{
uae_u8 v = 0xff;
int reg_shift = 2;
+ uaecptr oldaddr = addr;
+
addr &= ncr->board_mask;
if (isncr(ncr, ncr_masoboshi_scsi)) {
addr &= IO_MASK;
v = esp_reg_read(ncr->devobject.lsistate, (addr));
#if NCR_DEBUG > 1
- write_log(_T("ESP read %02X %02X %08X\n"), addr, v, M68K_GETPC);
+ write_log(_T("ESP read %02X (%08X) %02X %08X\n"), addr, oldaddr, v, M68K_GETPC);
#endif
return v;
}
static uae_u32 REGPARAM2 ncr_lget (struct ncr_state *ncr, uaecptr addr)
{
- uae_u32 v;
+ uae_u32 v = 0;
#ifdef JIT
special_mem |= S_READ;
#endif
- addr &= ncr->board_mask;
- if (ncr == ncr_we) {
- addr &= ~0x80;
- v = (ncr_bget2(ncr, addr + 3) << 0) | (ncr_bget2(ncr, addr + 2) << 8) |
- (ncr_bget2(ncr, addr + 1) << 16) | (ncr_bget2(ncr, addr + 0) << 24);
- } else {
- if (addr >= A4091_IO_ALT) {
- v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) |
- (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24);
+ if (ncr) {
+ addr &= ncr->board_mask;
+ if (ncr == ncr_we) {
+ addr &= ~0x80;
+ v = (ncr_bget2(ncr, addr + 3) << 0) | (ncr_bget2(ncr, addr + 2) << 8) |
+ (ncr_bget2(ncr, addr + 1) << 16) | (ncr_bget2(ncr, addr + 0) << 24);
} else {
- v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) |
- (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24);
+ if (addr >= A4091_IO_ALT) {
+ v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) |
+ (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24);
+ } else {
+ v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) |
+ (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24);
+ }
}
}
return v;
static uae_u32 REGPARAM2 ncr_wget (struct ncr_state *ncr, uaecptr addr)
{
- uae_u32 v;
+ uae_u32 v = 0;
#ifdef JIT
special_mem |= S_READ;
#endif
- v = (ncr_bget2 (ncr, addr) << 8) | ncr_bget2 (ncr, addr + 1);
+ if (ncr) {
+ v = (ncr_bget2 (ncr, addr) << 8) | ncr_bget2 (ncr, addr + 1);
+ }
return v;
}
static uae_u32 REGPARAM2 ncr_bget (struct ncr_state *ncr, uaecptr addr)
{
- uae_u32 v;
+ uae_u32 v = 0;
#ifdef JIT
special_mem |= S_READ;
#endif
- addr &= ncr->board_mask;
- if (!ncr->configured) {
- addr &= 65535;
- if (addr >= sizeof ncr->acmemory)
- return 0;
- return ncr->acmemory[addr];
+ if (ncr) {
+ addr &= ncr->board_mask;
+ if (!ncr->configured) {
+ addr &= 65535;
+ if (addr >= sizeof ncr->acmemory)
+ return 0;
+ return ncr->acmemory[addr];
+ }
+ v = ncr_bget2 (ncr, addr);
}
- v = ncr_bget2 (ncr, addr);
return v;
}
#ifdef JIT
special_mem |= S_WRITE;
#endif
+ if (!ncr)
+ return;
addr &= ncr->board_mask;
if (ncr == ncr_we) {
addr &= ~0x80;
#ifdef JIT
special_mem |= S_WRITE;
#endif
+ if (!ncr)
+ return;
w &= 0xffff;
addr &= ncr->board_mask;
if (!ncr->configured) {
#ifdef JIT
special_mem |= S_WRITE;
#endif
+ if (!ncr)
+ return;
b &= 0xff;
addr &= ncr->board_mask;
if (!ncr->configured) {
}
#endif
regs.s = 1;
- v = get_long (4);
- m68k_areg (regs, 7) = get_long (0);
+ if (currprefs.cpuboard_type) {
+ uaecptr stack;
+ v = cpuboard_get_reset_pc(&stack);
+ m68k_areg (regs, 7) = stack;
+ } else {
+ v = get_long (4);
+ m68k_areg (regs, 7) = get_long (0);
+ }
m68k_setpc_normal(v);
regs.m = 0;
regs.stopped = 0;
} else if (!_tcscmp(shmids[shmid].name, _T("ramsey_high"))) {
shmaddr = natmem_offset + 0x08000000;
got = TRUE;
+ } else if (!_tcscmp(shmids[shmid].name, _T("dkb"))) {
+ shmaddr = natmem_offset + 0x10000000;
+ got = TRUE;
} else if (!_tcscmp(shmids[shmid].name, _T("fusionforty"))) {
shmaddr = natmem_offset + 0x11000000;
got = TRUE;
#define IDS_NUMSG_UAEBOOTROM_PCC 405
#define IDS_AUTOSCALE_HALF_INTEGER 406
#define IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE 407
+#define IDS_AUTOSCALE_OVERSCAN_BLANK 408
#define IDS_QS_MODELS 1000
#define IDS_QS_MODEL_A500 1001
#define IDS_QS_MODEL_A500P 1002
"PPC native OS booted with UAE boot ROM active. UAE expansions are not hardware emulated and are not PPC compatible. (UAE HD controller, uaescsi.device, uaeserial, bsdsocket and so on..)"
IDS_AUTOSCALE_HALF_INTEGER "Half-integer scaling"
IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE "Auto Half-integer scaling"
+ IDS_AUTOSCALE_OVERSCAN_BLANK "Overscan blanking"
END
#endif // English resources
static int guijoyaxis[MAX_JPORTS][4];
static bool guijoychange;
-static int timeend (void)
+int timeend (void)
{
if (!timeon)
return 1;
return 0;
}
-static int timebegin (void)
+int timebegin (void)
{
if (timeon) {
timeend ();
if (pause_emulation) {
MSG msg;
if (was_paused == 0) {
+ timeend();
setpaused (pause_emulation);
was_paused = pause_emulation;
manual_painting_needed++;
resumepaused (was_paused);
sound_closed = 0;
was_paused = 0;
+ timebegin();
}
cnt1--;
if (cnt1 <= 0) {
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("14")
+#define WINUAEBETA _T("15")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2015, 3, 28)
+#define WINUAEDATE MAKEBD(2015, 4, 5)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
extern void fullscreentoggle (void);
extern int isfocus (void);
extern void gui_restart (void);
+int timebegin (void);
+int timeend (void);
extern void setmouseactive (int active);
extern void minimizewindow (void);
/* 23*/ _T("3 GB")
};
-static unsigned long memsizes[] = {
+static const unsigned long memsizes[] = {
/* 0 */ 0,
/* 1 */ 0x00010000, /* 64K */
/* 2 */ 0x00020000, /* 128K */
/* 23*/ 0xC0000000, //3GB
};
-static int msi_chip[] = { 3, 4, 5, 16, 6, 7, 8 };
-static int msi_bogo[] = { 0, 4, 5, 16, 17 };
-static int msi_fast[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
-static int msi_z3fast[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 14, 20, 15, 21, 18, 22, 23 };
-static int msi_z3chip[] = { 0, 9, 10, 11, 12, 13, 19, 14, 20, 15 };
-static int msi_gfx[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
-static int msi_cpuboard[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
+static const int msi_chip[] = { 3, 4, 5, 16, 6, 7, 8 };
+static const int msi_bogo[] = { 0, 4, 5, 16, 17 };
+static const int msi_fast[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
+static const int msi_z3fast[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 14, 20, 15, 21, 18, 22, 23 };
+static const int msi_z3chip[] = { 0, 9, 10, 11, 12, 13, 19, 14, 20, 15 };
+static const int msi_gfx[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+static const int msi_cpuboard[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
#define MIN_CHIP_MEM 0
#define MAX_CHIP_MEM 6
return rsd.got;
}
-static int listrom (int *roms)
+static int listrom (const int *roms)
{
int i;
{
TCHAR *p;
TCHAR *p1, *p2;
- int *rp;
+ const int *rp;
bool first = true;
- int romtable[] = {
+ const int romtable[] = {
5, 4, -1, -1, // A500 1.2
6, 32, -1, -1, // A500 1.3
7, -1, -1, // A500+
117, -1, -1, // alf
118, -1, -1, // alf+
120, -1, -1, // masoboshi
- 121, -1, -1, // supradrive
+ 121, 134, 135, 136, -1, -1, // supradrive
124, -1, -1, // kupke golem
131, -1, -1, // protar
130, -1, -1, // m-tec
129, -1, -1, // adide
+ 133, -1, -1, // adscsi
127, -1, -1, // kommos
- 128, -1, -2, // vector falcon
+ 128, -1, -1, // vector falcon
+ 132, -1, -2, // add500
18, -1, 19, -1, 74, 23, -1, -1, // CD32 FMV
91, -1, -2, // Picasso IV
_T("Protar A500HD SCSI\0")
_T("M-Tec AT500 IDE\0")
_T("AdIDE\0")
+ _T("AdSCSI\0")
_T("Kommos A500/A2000 SCSI\0")
_T("Vector Falcon 8000 SCSI\0")
+ _T("Archos ADD-500\0")
_T("CD32 Full Motion Video\0")
_T("Picasso IV\0")
ew (hDlg, IDC_MBMEM2, mbram2);
ew(hDlg, IDC_CPUBOARDMEM, workprefs.cpuboard_type > 0);
ew(hDlg, IDC_CPUBOARDRAM, workprefs.cpuboard_type > 0);
- ew(hDlg, IDC_CPUBOARD_TYPE, workprefs.address_space_24 == false);
- ew(hDlg, IDC_CPUBOARD_SUBTYPE, workprefs.address_space_24 == false && workprefs.cpuboard_type);
+ ew(hDlg, IDC_CPUBOARD_SUBTYPE, workprefs.cpuboard_type);
const struct expansionboardsettings *cbs = cpuboards[workprefs.cpuboard_type].subtypes[workprefs.cpuboard_subtype].settings;
for (int i = 0; cpuboard_settings_id[i] >= 0; i++) {
hide(hDlg, cpuboard_settings_id[i], !(workprefs.address_space_24 == false && cbs && cbs[i].name));
}
#define BUTTONSPERFLOPPY 9
-static int floppybuttons[][BUTTONSPERFLOPPY] = {
+static const int floppybuttons[][BUTTONSPERFLOPPY] = {
{ IDC_DF0TEXT,IDC_DF0,IDC_EJECT0,IDC_DF0TYPE,IDC_DF0WP,-1,IDC_SAVEIMAGE0,IDC_DF0ENABLE, IDC_INFO0 },
{ IDC_DF1TEXT,IDC_DF1,IDC_EJECT1,IDC_DF1TYPE,IDC_DF1WP,-1,IDC_SAVEIMAGE1,IDC_DF1ENABLE, IDC_INFO1 },
{ IDC_DF2TEXT,IDC_DF2,IDC_EJECT2,IDC_DF2TYPE,IDC_DF2WP,-1,IDC_SAVEIMAGE2,IDC_DF2ENABLE, IDC_INFO2 },
{ IDC_DF3TEXT,IDC_DF3,IDC_EJECT3,IDC_DF3TYPE,IDC_DF3WP,-1,IDC_SAVEIMAGE3,IDC_DF3ENABLE, IDC_INFO3 }
};
-static int floppybuttonsq[][BUTTONSPERFLOPPY] = {
+static const int floppybuttonsq[][BUTTONSPERFLOPPY] = {
{ IDC_DF0TEXTQ,IDC_DF0QQ,IDC_EJECT0Q,-1,IDC_DF0WPQ,IDC_DF0WPTEXTQ,-1,IDC_DF0QENABLE, IDC_INFO0Q },
{ IDC_DF1TEXTQ,IDC_DF1QQ,IDC_EJECT1Q,-1,IDC_DF1WPQ,IDC_DF1WPTEXTQ,-1,IDC_DF1QENABLE, IDC_INFO1Q },
{ -1,-1,-1,-1,-1,-1,-1,-1 },
SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt);
WIN32GUI_LoadUIString (IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE, txt, sizeof (txt) / sizeof (TCHAR));
SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt);
+
+ SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)_T("-"));
+ WIN32GUI_LoadUIString (IDS_AUTOSCALE_OVERSCAN_BLANK, txt, sizeof (txt) / sizeof (TCHAR));
+ SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt);
} else {
WIN32GUI_LoadUIString(IDS_AUTOSCALE_DEFAULT, txt, sizeof (txt) / sizeof (TCHAR));
SendDlgItemMessage(hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt);
i++;
SendDlgItemMessage (hDlg, IDC_FILTERSTACK, CB_SETCURSEL, i, 0);
- int range1, range2;
+ int xrange1, xrange2;
+ int yrange1, yrange2;
if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_MANUAL) {
- range1 = -1;
- range2 = 1800;
+ xrange1 = -1;
+ xrange2 = 1800;
+ yrange1 = xrange1;
+ yrange2 = xrange2;
+ } else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_OVERSCAN_BLANK) {
+ xrange1 = 0;
+ xrange2 = 1800;
+ yrange1 = 0;
+ yrange2 = 700;
} else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER ||
workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE ||
workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER ||
workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER_AUTOSCALE) {
- range1 = -99;
- range2 = 99;
+ xrange1 = -99;
+ xrange2 = 99;
+ yrange1 = xrange1;
+ yrange2 = xrange2;
} else {
- range1 = -9999;
- range2 = 9999;
+ xrange1 = -9999;
+ xrange2 = 9999;
+ yrange1 = xrange1;
+ yrange2 = xrange2;
}
- SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETRANGE, TRUE, MAKELONG (range1, range2));
+ SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETRANGE, TRUE, MAKELONG (xrange1, xrange2));
SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPAGESIZE, 0, 1);
- SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETRANGE, TRUE, MAKELONG (range1, range2));
+ SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETRANGE, TRUE, MAKELONG (xrange1, xrange2));
SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPAGESIZE, 0, 1);
- SendDlgItemMessage (hDlg, IDC_FILTERHO, TBM_SETRANGE, TRUE, MAKELONG (range1, range2));
+ SendDlgItemMessage (hDlg, IDC_FILTERHO, TBM_SETRANGE, TRUE, MAKELONG (yrange1, yrange2));
SendDlgItemMessage (hDlg, IDC_FILTERHO, TBM_SETPAGESIZE, 0, 1);
- SendDlgItemMessage (hDlg, IDC_FILTERVO, TBM_SETRANGE, TRUE, MAKELONG (range1, range2));
+ SendDlgItemMessage (hDlg, IDC_FILTERVO, TBM_SETRANGE, TRUE, MAKELONG (yrange1, yrange2));
SendDlgItemMessage (hDlg, IDC_FILTERVO, TBM_SETPAGESIZE, 0, 1);
SendDlgItemMessage (hDlg, IDC_FILTEROVERLAY, CB_RESETCONTENT, 0, 0L);
vz = workprefs.gfx_ycenter_size;
ho = workprefs.gfx_xcenter_pos;
vo = workprefs.gfx_ycenter_pos;
+ } else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_OVERSCAN_BLANK) {
+ hz = workprefs.gf[filter_nativertg].gfx_filter_left_border;
+ vz = workprefs.gf[filter_nativertg].gfx_filter_right_border;
+ ho = workprefs.gf[filter_nativertg].gfx_filter_top_border;
+ vo = workprefs.gf[filter_nativertg].gfx_filter_bottom_border;
} else {
hz = workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom;
vz = workprefs.gf[filter_nativertg].gfx_filter_vert_zoom;
case IDC_FILTERAUTOSCALE:
item = SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_GETCURSEL, 0, 0L);
if (item != CB_ERR) {
+ if (item == AUTOSCALE_SEPARATOR)
+ item++;
workprefs.gf[filter_nativertg].gfx_filter_autoscale = item;
if (workprefs.gf[filter_nativertg].gfx_filter_autoscale && workprefs.gf[filter_nativertg].gfx_filter == 0 && !workprefs.gfx_api)
workprefs.gf[filter_nativertg].gfx_filter = 1; // NULL
{
HWND hz = GetDlgItem (hDlg, IDC_FILTERHZ);
HWND vz = GetDlgItem (hDlg, IDC_FILTERVZ);
+ HWND ho = GetDlgItem (hDlg, IDC_FILTERHO);
+ HWND vo = GetDlgItem (hDlg, IDC_FILTERVO);
HWND h = (HWND)lParam;
+ struct gfx_filterdata *fd = &currprefs.gf[filter_nativertg];
+ struct gfx_filterdata *fdwp = &workprefs.gf[filter_nativertg];
if (recursive)
break;
recursive++;
- if (currprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_MANUAL) {
+ if (fdwp->gfx_filter_autoscale == AUTOSCALE_MANUAL) {
currprefs.gfx_xcenter_size = workprefs.gfx_xcenter_size = (int)SendMessage (hz, TBM_GETPOS, 0, 0);
currprefs.gfx_ycenter_size = workprefs.gfx_ycenter_size = (int)SendMessage (vz, TBM_GETPOS, 0, 0);
- currprefs.gfx_xcenter_pos = workprefs.gfx_xcenter_pos = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERHO), TBM_GETPOS, 0, 0);
- currprefs.gfx_ycenter_pos = workprefs.gfx_ycenter_pos = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERVO), TBM_GETPOS, 0, 0);
- SetDlgItemInt (hDlg, IDC_FILTERHOV, workprefs.gfx_xcenter_pos, TRUE);
- SetDlgItemInt (hDlg, IDC_FILTERVOV, workprefs.gfx_ycenter_pos, TRUE);
+ currprefs.gfx_xcenter_pos = workprefs.gfx_xcenter_pos = (int)SendMessage (ho, TBM_GETPOS, 0, 0);
+ currprefs.gfx_ycenter_pos = workprefs.gfx_ycenter_pos = (int)SendMessage (vo, TBM_GETPOS, 0, 0);
SetDlgItemInt (hDlg, IDC_FILTERHZV, workprefs.gfx_xcenter_size, TRUE);
SetDlgItemInt (hDlg, IDC_FILTERVZV, workprefs.gfx_ycenter_size, TRUE);
+ SetDlgItemInt (hDlg, IDC_FILTERHOV, workprefs.gfx_xcenter_pos, TRUE);
+ SetDlgItemInt (hDlg, IDC_FILTERVOV, workprefs.gfx_ycenter_pos, TRUE);
+ } else if (fdwp->gfx_filter_autoscale == AUTOSCALE_OVERSCAN_BLANK) {
+ fd->gfx_filter_left_border = fdwp->gfx_filter_left_border = (int)SendMessage (hz, TBM_GETPOS, 0, 0);
+ fd->gfx_filter_right_border = fdwp->gfx_filter_right_border = (int)SendMessage (vz, TBM_GETPOS, 0, 0);
+ fd->gfx_filter_top_border = fdwp->gfx_filter_top_border = (int)SendMessage (ho, TBM_GETPOS, 0, 0);
+ fd->gfx_filter_bottom_border = fdwp->gfx_filter_bottom_border = (int)SendMessage (vo, TBM_GETPOS, 0, 0);
+ SetDlgItemInt (hDlg, IDC_FILTERHZV, fdwp->gfx_filter_left_border, TRUE);
+ SetDlgItemInt (hDlg, IDC_FILTERVZV, fdwp->gfx_filter_right_border, TRUE);
+ SetDlgItemInt (hDlg, IDC_FILTERHOV, fdwp->gfx_filter_top_border, TRUE);
+ SetDlgItemInt (hDlg, IDC_FILTERVOV, fdwp->gfx_filter_bottom_border, TRUE);
+ if (!full_property_sheet) {
+ reset_drawing();
+ }
} else {
if (h == hz) {
- currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = (int)SendMessage (hz, TBM_GETPOS, 0, 0);
- if (workprefs.gf[filter_nativertg].gfx_filter_keep_aspect) {
- currprefs.gf[filter_nativertg].gfx_filter_vert_zoom = workprefs.gf[filter_nativertg].gfx_filter_vert_zoom = currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom;
- SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPOS, TRUE, workprefs.gf[filter_nativertg].gfx_filter_vert_zoom);
+ fd->gfx_filter_horiz_zoom = fdwp->gfx_filter_horiz_zoom = (int)SendMessage (hz, TBM_GETPOS, 0, 0);
+ if (fdwp->gfx_filter_keep_aspect) {
+ fd->gfx_filter_vert_zoom = fdwp->gfx_filter_vert_zoom = currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom;
+ SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPOS, TRUE, fdwp->gfx_filter_vert_zoom);
}
} else if (h == vz) {
- currprefs.gf[filter_nativertg].gfx_filter_vert_zoom = workprefs.gf[filter_nativertg].gfx_filter_vert_zoom = (int)SendMessage (vz, TBM_GETPOS, 0, 0);
- if (workprefs.gf[filter_nativertg].gfx_filter_keep_aspect) {
- currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = currprefs.gf[filter_nativertg].gfx_filter_vert_zoom;
- SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPOS, TRUE, workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom);
+ fd->gfx_filter_vert_zoom = fdwp->gfx_filter_vert_zoom = (int)SendMessage (vz, TBM_GETPOS, 0, 0);
+ if (fdwp->gfx_filter_keep_aspect) {
+ fd->gfx_filter_horiz_zoom = fdwp->gfx_filter_horiz_zoom = currprefs.gf[filter_nativertg].gfx_filter_vert_zoom;
+ SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPOS, TRUE, fdwp->gfx_filter_horiz_zoom);
}
}
- currprefs.gf[filter_nativertg].gfx_filter_horiz_offset = workprefs.gf[filter_nativertg].gfx_filter_horiz_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERHO), TBM_GETPOS, 0, 0);
- currprefs.gf[filter_nativertg].gfx_filter_vert_offset = workprefs.gf[filter_nativertg].gfx_filter_vert_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERVO), TBM_GETPOS, 0, 0);
+ fd->gfx_filter_horiz_offset = fdwp->gfx_filter_horiz_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERHO), TBM_GETPOS, 0, 0);
+ fd->gfx_filter_vert_offset = fdwp->gfx_filter_vert_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERVO), TBM_GETPOS, 0, 0);
SetDlgItemInt (hDlg, IDC_FILTERHOV, (int)workprefs.gf[filter_nativertg].gfx_filter_horiz_offset, TRUE);
SetDlgItemInt (hDlg, IDC_FILTERVOV, (int)workprefs.gf[filter_nativertg].gfx_filter_vert_offset, TRUE);
SetDlgItemInt (hDlg, IDC_FILTERHZV, (int)workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom, TRUE);
return CallWindowProc (ToolTipHWNDS2[i].proc, hwnd, message, wParam, lParam);
}
-static int ignorewindows[] = {
+static const int ignorewindows[] = {
IDD_FLOPPY, IDC_DF0TEXT, IDC_DF1TEXT, IDC_DF2TEXT, IDC_DF3TEXT, IDC_CREATE_NAME,
-1,
IDD_QUICKSTART, IDC_DF0TEXTQ, IDC_DF1TEXTQ, IDC_QUICKSTART_HOSTCONFIG,
struct newresource *tres;
gui_active++;
+ timeend();
full_property_sheet = all_options;
allow_quit = all_options;
qs_request_reset = 0;
full_property_sheet = 0;
gui_active--;
+ timebegin();
return psresult;
}
}
-static int transla[] = {
+static const int transla[] = {
NUMSG_NEEDEXT2, IDS_NUMSG_NEEDEXT2,
NUMSG_NOROMKEY,IDS_NUMSG_NOROMKEY,
NUMSG_NOROM,IDS_NUMSG_NOROM,
+Beta 15:
+
+- Map only upper half of ROM image if GVP Series II ROM is 32k.
+- HD controller ROM loader duplicate code removal from HD controller specific code.
+- Accelerator board HD controller hardware was not added to emulation if board's boot ROM was missing. (b12)
+- Added DKB 12x0 accelerator on-board RAM support. 1M and 2M size are not supported, address mapping is
+ not completely emulated.
+- Floppy sound volume mixing fixed (b14).
+- Oktagon 2008 didn't have autoboot disable option.
+- Only keep high Windows timer resolution mode active when emulation is running.
+- Added Seek (6) and (10) SCSI commands to HD SCSI emulator, only checks for valid LBA.
+- VGA modes had inverted TV/VGA aspect ratio setting. (Probably not completely correct yet)
+- Added configurable blanking borders. GUI adjustment hacked to Filter panel, "Overscan blanking" setting.
+ When "Overscan blanking" is selected, filter mode is always none. First slider adjusts horizontal start,
+ second = horizontal end, third = vertical start, fourth = vertical end. Values are always in superhires
+ (horizontal) and interlaced (vertical) coordinates. Zero = disabled.
+ Currently display is only updated with new values after returning to emulation and GUI text elements are
+ not changed.
+
Beta 14:
- Show selected accelerator board and HD controller name(s) in log lines.
disk, reads and executes boot block code if disk has correct bootblock which is different than release AmigaOS
bootblock. MFM level format seems to be identical. Unfortunately, at least so far, no original Velvet floppy
disks have been found and for some reason real hardware refuses to read any disks.
-- If -seriallog is enabled, console log window also listens for key codes and sends them to emulated serial
+- If -serlog is enabled, console log window also listens for key codes and sends them to emulated serial
port. Very basic console emulator, enables quick use of Velvet ROM built-in serial debugger.
- Added "Any floppy drive" option to keyboard led configuration.
- Floppy sound volume control is not global anymore. Empty and disk in drive states also have separate volume
return ZFILE_STATEFILE;
if (strcasecmp (ext, _T("rom")) == 0)
return ZFILE_ROM;
+ if (strcasecmp (ext, _T("bin")) == 0)
+ return ZFILE_ROM;
if (strcasecmp (ext, _T("key")) == 0)
return ZFILE_KEY;
if (strcasecmp (ext, _T("nvr")) == 0)