}
break;
}
- // use image mode if driver disabled
- for (int j = 1; j < NUM_DEVICE_TABLE_ENTRIES; j++) {
- if (devicetable[j] == st->device_func && driver_installed[j] < 0) {
- st->device_func = devicetable[SCSI_UNIT_IMAGE];
- st->scsiemu = true;
+ // do not default to image mode if unit 1+ and automount
+ if (i == 0 || !currprefs.win32_automount_cddrives) {
+ // use image mode if driver disabled
+ for (int j = 1; j < NUM_DEVICE_TABLE_ENTRIES; j++) {
+ if (devicetable[j] == st->device_func && driver_installed[j] < 0) {
+ st->device_func = devicetable[SCSI_UNIT_IMAGE];
+ st->scsiemu = true;
+ }
}
}
}
if (!ok && st->device_func != devicetable[SCSI_UNIT_IMAGE]) {
st->device_func = devicetable[SCSI_UNIT_IMAGE];
st->scsiemu = true;
- write_log (_T("Fallback to image mode\n"));
+ write_log (_T("Fallback to image mode, unit %d.\n"), i);
driver_installed[j] = -1;
} else {
driver_installed[j] = 1;
cfgfile_write_str (f, _T("cpu_speed"), p->m68k_speed < 0 ? _T("max") : _T("real"));
}
cfgfile_write (f, _T("cpu_throttle"), _T("%.1f"), p->m68k_speed_throttle);
+ cfgfile_dwrite(f, _T("cpu_x86_throttle"), _T("%.1f"), p->x86_speed_throttle);
/* do not reorder start */
write_compatibility_cpu(f, p);
p->m68k_speed *= CYCLE_UNIT;
return 1;
}
- if (cfgfile_doubleval (option, value, _T("cpu_throttle"), &p->m68k_speed_throttle)) {
+ if (cfgfile_doubleval(option, value, _T("cpu_throttle"), &p->m68k_speed_throttle)) {
+ return 1;
+ }
+ if (cfgfile_doubleval(option, value, _T("cpu_x86_throttle"), &p->x86_speed_throttle)) {
return 1;
}
if (cfgfile_intval (option, value, _T("finegrain_cpu_speed"), &p->m68k_speed, 1)) {
int h, i, maxh, cnt;
uae_u32 cycles;
- if (!dma_record[0])
+ if (!dma_record[0] || hpos < 0 || vpos < 0)
return;
dr = &dma_record[dma_record_toggle ^ toggle][vpos * NR_DMA_REC_HPOS];
if (logfile)
#include "pci.h"
#include "pci_hw.h"
#include "x86.h"
+#include "ethernet.h"
#ifdef RETROPLATFORM
#include "rp.h"
#endif
cfgfile_addcfgparam (0);
machdep_free ();
driveclick_free();
+ ethernet_enumerate_free();
}
void virtualdevice_init (void)
Bit8u outport;
} keyb;
-extern void x86_doirq(unsigned char);
+extern void x86_doirq_keyboard(void);
bool x86_is_keyboard(void)
{
// PIC_ActivateIRQ(6);
// else
// PIC_ActivateIRQ(1);
- x86_doirq(1);
+ x86_doirq_keyboard();
}
static void KEYBOARD_TransferBuffer(Bitu val) {
#endif
#include "threaddep/thread.h"
#include "options.h"
+#include "sana2.h"
struct ethernet_data
{
#ifdef WITH_UAENET_PCAP
nd = uaenet_enumerate (NULL);
if (nd) {
- for (int i = 0; nd[i].active; i++) {
- nddp[j++] = &nd[i];
+ for (int i = 0; i < MAX_TOTAL_NET_DEVICES; i++) {
+ if (nd[i].active)
+ nddp[j++] = &nd[i];
}
}
#endif
bridge_settings
},
{
- _T("apollo"), _T("Apollo"), _T("ACT"),
- apollo_init_hd, NULL, apollo_add_scsi_unit, ROMTYPE_APOLLO, 0, 0, BOARD_AUTOCONFIG_Z2, false,
+ _T("apollo"), _T("Apollo 500/2000"), _T("3-State"),
+ apollo_init_hd, NULL, apollo_add_scsi_unit, ROMTYPE_APOLLOHD, 0, 0, BOARD_AUTOCONFIG_Z2, false,
NULL, 0,
false, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_IDE,
8738, 0, 0
if (uip[num].volname != 0)
_stprintf (buffer, _T("(DH%d:) Filesystem, %s: %s %s"), num, uip[num].volname,
- uip[num].rootdir, uip[num].readonly ? "ro" : "");
+ uip[num].rootdir, uip[num].readonly ? _T("ro") : _T(""));
else
_stprintf (buffer, _T("(DH%d:) Hardfile, \"%s\", size %d Mbytes"), num,
uip[num].rootdir, (int)(uip[num].hf.virtsize / (1024 * 1024)));
/* it really crosses memory boundary */
uae_u8 *buf;
- write_log (_T("unixfs warning: Bad pointer passed for read: %08x, size %d\n"), addr, size);
/* ugh this is inefficient but easy */
if (key_seek(k, k->file_pos, SEEK_SET) < 0) {
actual = fs_write (k->fd, realpt, size);
} else {
- write_log (_T("unixfs warning: Bad pointer passed for write: %08x, size %d\n"), addr, size);
/* ugh this is inefficient but easy */
if (key_seek(k, k->file_pos, SEEK_SET) < 0) {
static void do_process_rw_command (struct ide_hdf *ide)
{
- unsigned int cyl, head, sec, nsec;
+ unsigned int cyl, head, sec, nsec, nsec_total;
uae_u64 lba;
bool last;
ide_fail_err (ide, IDE_ERR_IDNF);
return;
}
+ nsec_total = nsec;
+ ide_grow_buffer(ide, nsec_total * ide->blocksize);
+
if (nsec > ide->data_multi)
nsec = ide->data_multi;
- ide_grow_buffer(ide, nsec * ide->blocksize);
+ if (ide->buffer_offset == 0) {
+ // store initial lba and number of sectors to transfer
+ ide->start_lba = lba;
+ ide->start_nsec = nsec_total;
+ }
+
if (ide->direction) {
- hdf_write (&ide->hdhfd.hfd, ide->secbuf, lba * ide->blocksize, nsec * ide->blocksize);
if (IDE_LOG > 1)
- write_log (_T("IDE%d write, %d bytes written\n"), ide->num, nsec * ide->blocksize);
+ write_log (_T("IDE%d write, %d/%d bytes, buffer offset %d\n"), ide->num, nsec * ide->blocksize, nsec_total * ide->blocksize, ide->buffer_offset);
} else {
- hdf_read (&ide->hdhfd.hfd, ide->secbuf, lba * ide->blocksize, nsec * ide->blocksize);
+ if (ide->buffer_offset == 0) {
+ hdf_read(&ide->hdhfd.hfd, ide->secbuf, ide->start_lba * ide->blocksize, ide->start_nsec * ide->blocksize);
+ if (IDE_LOG > 1)
+ write_log(_T("IDE%d initial read, %d bytes\n"), ide->num, nsec_total * ide->blocksize);
+ }
if (IDE_LOG > 1)
- write_log (_T("IDE%d read, read %d bytes\n"), ide->num, nsec * ide->blocksize);
+ write_log (_T("IDE%d read, read %d/%d bytes, buffer offset=%d\n"), ide->num, nsec * ide->blocksize, nsec_total * ide->blocksize, ide->buffer_offset);
}
ide->intdrq = true;
last = dec_nsec (ide, nsec) == 0;
}
if (last && ide->direction) {
ide->intdrq = false;
+ hdf_write (&ide->hdhfd.hfd, ide->secbuf, ide->start_lba * ide->blocksize, ide->start_nsec * ide->blocksize);
if (IDE_LOG > 1)
- write_log (_T("IDE%d write finished\n"), ide->num);
+ write_log (_T("IDE%d write finished, %d bytes\n"), ide->num, ide->start_nsec * ide->blocksize);
+ }
+
+ if (ide->direction) {
+ if (last) {
+ ide_fast_interrupt(ide);
+ } else {
+ ide->irq_delay = 1;
+ }
+ } else {
+ if (ide->buffer_offset == 0) {
+ ide_fast_interrupt(ide);
+ } else {
+ ide->irq_delay = 1;
+ }
}
- ide_fast_interrupt (ide);
}
static void ide_read_sectors (struct ide_hdf *ide, int flags)
ide->data_offset = 0;
ide->data_size = nsec * ide->blocksize;
ide->direction = 0;
+ ide->buffer_offset = 0;
// read start: preload sector(s), then trigger interrupt.
process_rw_command (ide);
}
ide->data_offset = 0;
ide->data_size = nsec * ide->blocksize;
ide->direction = 1;
+ ide->buffer_offset = 0;
// write start: set DRQ and clear BSY. No interrupt.
ide->regs.ide_status |= IDE_STATUS_DRQ;
ide->regs.ide_status &= ~IDE_STATUS_BSY;
}
} else {
if (bussize) {
- v = ide->secbuf[ide->data_offset + 1] | (ide->secbuf[ide->data_offset + 0] << 8);
+ v = ide->secbuf[ide->buffer_offset + ide->data_offset + 1] | (ide->secbuf[ide->buffer_offset + ide->data_offset + 0] << 8);
} else {
- v = ide->secbuf[ide->data_offset];
+ v = ide->secbuf[ide->buffer_offset + ide->data_offset];
}
if (IDE_LOG > 4)
write_log (_T("IDE%d DATA read %04x\n"), ide->num, v);
} else {
ide->data_size -= inc;
if (((ide->data_offset % ide->blocksize) == 0) && ((ide->data_offset / ide->blocksize) % ide->data_multi) == 0) {
- if (ide->data_size)
- process_rw_command (ide);
+ if (ide->data_size) {
+ ide->buffer_offset += ide->data_offset;
+ do_process_rw_command(ide);
+ }
}
}
if (ide->data_size == 0) {
return;
}
ide_grow_buffer(ide, ide->packet_data_offset + ide->data_offset + 2);
- if (bussize) {
- ide->secbuf[ide->packet_data_offset + ide->data_offset + 1] = v & 0xff;
- ide->secbuf[ide->packet_data_offset + ide->data_offset + 0] = v >> 8;
+ if (ide->packet_state) {
+ if (bussize) {
+ ide->secbuf[ide->packet_data_offset + ide->data_offset + 1] = v & 0xff;
+ ide->secbuf[ide->packet_data_offset + ide->data_offset + 0] = v >> 8;
+ } else {
+ ide->secbuf[ide->packet_data_offset + ide->data_offset] = v;
+ }
} else {
- ide->secbuf[ide->packet_data_offset + ide->data_offset] = v;
+ if (bussize) {
+ ide->secbuf[ide->buffer_offset + ide->data_offset + 1] = v & 0xff;
+ ide->secbuf[ide->buffer_offset + ide->data_offset + 0] = v >> 8;
+ } else {
+ ide->secbuf[ide->buffer_offset + ide->data_offset] = v;
+ }
}
ide->data_offset += inc;
ide->data_size -= inc;
if (ide->data_size == 0) {
process_rw_command (ide);
} else if (((ide->data_offset % ide->blocksize) == 0) && ((ide->data_offset / ide->blocksize) % ide->data_multi) == 0) {
- process_rw_command (ide);
+ int off = ide->data_offset;
+ do_process_rw_command(ide);
+ ide->buffer_offset += off;
}
}
}
// prod 0x23 = SCSI only
// prod 0x33 = IDE only
-const uae_u8 apollo_autoconfig[16] = { 0xd2, 0x23, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, APOLLO_ROM_OFFSET >> 8, APOLLO_ROM_OFFSET & 0xff };
+const uae_u8 apollo_autoconfig[16] = { 0xd1, 0x22, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, APOLLO_ROM_OFFSET >> 8, APOLLO_ROM_OFFSET & 0xff };
const uae_u8 apollo_autoconfig_cpuboard[16] = { 0xd2, 0x23, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, APOLLO_ROM_OFFSET >> 8, APOLLO_ROM_OFFSET & 0xff };
const uae_u8 apollo_autoconfig_cpuboard_060[16] = { 0xd2, 0x23, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x02, APOLLO_ROM_OFFSET >> 8, APOLLO_ROM_OFFSET & 0xff };
ide->configured = 0;
ide->bank = &ide_bank_generic;
ide->rom_size = 32768;
- ide->mask = 131072 - 1;
ide->type = APOLLO_IDE;
memset(ide->acmemory, 0xff, sizeof ide->acmemory);
ide->rom = xcalloc(uae_u8, ide->rom_size);
memset(ide->rom, 0xff, ide->rom_size);
ide->rom_mask = ide->rom_size - 1;
+ ide->keepautoconfig = false;
autoconfig = apollo_autoconfig;
if (cpuboard) {
if (currprefs.cpu_model == 68060)
else
autoconfig = apollo_autoconfig_cpuboard;
}
- struct zfile *z = read_device_from_romconfig(rc, roms);
for (int i = 0; i < 16; i++) {
uae_u8 b = autoconfig[i];
ew(ide, i * 4, b);
}
- if (z) {
- int len = zfile_size(z);
- // skip 68060 $f0 ROM block
- if (len >= 65536)
- zfile_fseek(z, 32768, SEEK_SET);
- for (int i = 0; i < 32768; i++) {
- uae_u8 b;
- zfile_fread(&b, 1, 1, z);
- ide->rom[i] = b;
+ if (cpuboard) {
+ ide->mask = 131072 - 1;
+ struct zfile *z = read_device_from_romconfig(rc, roms);
+ if (z) {
+ int len = zfile_size(z);
+ // skip 68060 $f0 ROM block
+ if (len >= 65536)
+ zfile_fseek(z, 32768, SEEK_SET);
+ for (int i = 0; i < 32768; i++) {
+ uae_u8 b;
+ zfile_fread(&b, 1, 1, z);
+ ide->rom[i] = b;
+ }
+ zfile_fclose(z);
}
- zfile_fclose(z);
+ } else {
+ ide->mask = 65536 - 1;
+ load_rom_rc(rc, roms, 16384, 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL);
}
return ide->bank;
}
void apollo_add_ide_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
{
- add_ide_standard_unit(ch, ci, rc, apollo_board, APOLLO_IDE, false, false, 2);
+ add_ide_standard_unit(ch, ci, rc, apollo_board, APOLLO_IDE, true, false, 2);
}
addrbank *masoboshi_init(struct romconfig *rc)
addrbank *rochard_init(struct romconfig *rc)
{
struct ide_board *ide = getide(rc);
- int roms[2];
+ int roms[3];
roms[0] = 138;
- roms[1] = -1;
+ roms[1] = 146;
+ roms[2] = -1;
ide->configured = 0;
ide->bank = &ide_bank_generic;
ide->rom_size = 32768;
uae_u8 *secbuf;
int secbuf_size;
+ int buffer_offset;
int data_offset;
int data_size;
int data_multi;
bool intdrq;
bool lba48;
bool lba48cmd;
+ uae_u64 start_lba;
+ int start_nsec;
uae_u8 multiple_mode;
int irq_delay;
int irq;
int m68k_speed;
double m68k_speed_throttle;
+ double x86_speed_throttle;
int cpu_model;
int mmu_model;
int cpu060_revision;
TCHAR win32_guipage[32];
TCHAR win32_guiactivepage[32];
bool win32_filesystem_mangle_reserved_names;
+ bool right_control_is_right_win_key;
#ifdef WITH_SLIRP
struct slirp_redir slirp_redirs[MAX_SLIRP_REDIRS];
#endif
#define ROMTYPE_X86_XT_IDE 0x00100033
#define ROMTYPE_PICASSOIV 0x00100034
#define ROMTYPE_x86_VGA 0x00100035
+#define ROMTYPE_APOLLOHD 0x00100036
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
if (scancode == 0xaa || scancode == 0)
return;
+ if (currprefs.right_control_is_right_win_key && scancode == DIK_RCONTROL) {
+ scancode = DIK_RWIN;
+ }
if (!istest) {
if (scancode == DIK_SYSRQ)
int pressed = (didod[j].dwData & 0x80) ? 1 : 0;
//write_log (_T("%d: %02X %d\n"), j, scancode, pressed);
+ if (currprefs.right_control_is_right_win_key && scancode == DIK_RCONTROL)
+ scancode = DIK_RWIN;
if (!istest)
scancode = keyhack (scancode, pressed, i);
if (scancode < 0)
#define IDC_PPC_CPUIDLE 1231
#define IDC_11KHZ 1232
#define IDC_22KHZ 1233
+#define IDC_SPEED_x86 1233
#define IDC_44KHZ 1234
#define IDC_48KHZ 1235
#define IDC_SOUNDSIZE 1236
#define IDC_FLUSHPRINTER 1510
#define IDC_MAPDRIVES_REMOVABLE 1510
#define IDC_PORT0_TEST 1510
+#define IDC_CPUTEXT_x86 1510
#define IDC_SCREENRESTEXT 1511
#define IDC_MAPDRIVES_AUTO 1511
#define IDC_WIDTHTEXT 1512
#define IDC_DBG_AMEM 1745
#define IDC_CS_DIPAGNUS 1745
#define IDC_DBG_SP_VBR 1746
-#define IDC_CS_CDTVRAMEXP2 1746
#define IDC_CS_CDTVCR 1746
#define IDC_DBG_MMISC 1747
#define IDC_DBG_PC 1748
#define IDC_DBG_FPREG 1750
#define IDC_DBG_FPSR 1751
#define IDC_DBG_OUTPUT2 1752
-#define IDC_CS_RESETWARNING2 1752
#define IDC_CS_CIATODBUG 1752
#define IDC_DBG_MEMINPUT 1753
#define IDC_CS_Z3AUTOCONFIG 1753
CONTROL "Autoconfig Z2 Fast RAM",IDC_FASTMEMAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,194,120,10
END
-IDD_CPU DIALOGEX 0, 0, 396, 292
+IDD_CPU DIALOGEX 0, 0, 396, 317
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,148,120,11
CONTROL "Unimplemented CPU emu [] Emulate 68060 unimplemented integer instructions",IDC_CPU_UNIMPLEMENTED,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,161,118,10
- GROUPBOX "CPU Emulation Speed",IDC_STATIC,136,3,258,95
+ GROUPBOX "CPU Emulation Speed",IDC_STATIC,136,1,258,97
CONTROL "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,143,19,195,10
CONTROL "Approximate A500/A1200 or cycle-exact",IDC_CS_68000,
"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,143,33,195,10
RTEXT "CPU Frequency",IDC_STATIC,139,121,67,10,SS_CENTERIMAGE
COMBOBOX IDC_CPU_FREQUENCY,215,120,89,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_CPU_FREQUENCY2,312,119,70,15
- GROUPBOX "FPU",IDC_STATIC,1,188,129,101,BS_LEFT
+ GROUPBOX "FPU",IDC_STATIC,1,188,129,128,BS_LEFT
CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,202,87,10
CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,216,87,10
CONTROL "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,229,87,10
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,259,117,10
CONTROL "Unimplemented FPU emu [] Emulate FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,272,116,10
- GROUPBOX "Advanced JIT Settings",IDC_STATIC,136,209,258,80
- RTEXT "Cache size:",IDC_STATIC,143,225,66,10,SS_CENTERIMAGE
- CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,212,219,115,20
- EDITTEXT IDC_CACHETEXT,331,224,30,12,ES_CENTER | ES_READONLY
- CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,244,84,11
- CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,258,84,11
- CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,272,84,11
- CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,313,244,68,11
- CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,313,261,72,10
- CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,313,275,72,10
+ GROUPBOX "Advanced JIT Settings",IDC_STATIC,136,245,258,70
+ RTEXT "Cache size:",IDC_STATIC,143,261,66,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,212,255,115,20
+ EDITTEXT IDC_CACHETEXT,331,260,30,12,ES_CENTER | ES_READONLY
+ CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,281,84,11
+ CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,281,71,11
+ CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,143,281,71,11
+ CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,299,68,11
+ CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,143,299,72,10
+ CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,221,299,72,10
CONTROL "PPC CPU emulation (Blizzard PPC / CyberStorm PPC) [] Automatically configure CyberStorm PPC or Blizzard PPC setup.",IDC_CPU_PPC,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,145,161,236,10
- GROUPBOX "PPC CPU options",IDC_STATIC,136,144,258,62
+ GROUPBOX "PPC CPU options",IDC_STATIC,136,144,258,57
RTEXT "Stopped M68K CPU idle mode",IDC_STATIC,180,183,121,9
CONTROL "",IDC_PPC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,308,177,69,21
+ CONTROL "",IDC_SPEED_x86,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,278,215,108,20
+ RTEXT "CPU Speed",IDC_STATIC,147,221,55,9,SS_CENTERIMAGE
+ GROUPBOX "x86 Bridgeboard CPU options",IDC_STATIC,136,202,258,42
+ EDITTEXT IDC_CPUTEXT_x86,224,220,39,12,ES_CENTER | ES_READONLY
END
IDD_FLOPPY DIALOGEX 0, 0, 396, 261
IDD_CPU, DIALOG
BEGIN
- BOTTOMMARGIN, 291
+ BOTTOMMARGIN, 316
END
IDD_FLOPPY, DIALOG
serdatshift_masked = serdatshift & ((1 << bits) - 1);
data_in_sershift = 1;
data_in_serdat = 0;
- INTREQ(0x8000 | 0x0001);
- serial_check_irq();
- checksend();
if (seriallog) {
gotlogwrite = true;
event2_newevent_x(-1, per, 0, sersend_ce);
}
+ INTREQ(0x8000 | 0x0001);
+ checksend();
}
void serial_hsynchandler (void)
cfgfile_target_dwrite_str (f, _T("parjoyport1"), p->win32_parjoyport1);
cfgfile_target_dwrite_str (f, _T("gui_page"), p->win32_guipage);
cfgfile_target_dwrite_str (f, _T("gui_active_page"), p->win32_guiactivepage);
- cfgfile_target_dwrite_bool (f, _T("filesystem_mangle_reserved_names"), p->win32_filesystem_mangle_reserved_names);
+ cfgfile_target_dwrite_bool(f, _T("filesystem_mangle_reserved_names"), p->win32_filesystem_mangle_reserved_names);
+ cfgfile_target_dwrite_bool(f, _T("right_control_is_right_win"), p->right_control_is_right_win_key);
cfgfile_target_dwrite (f, _T("extraframewait"), _T("%d"), extraframewait);
cfgfile_target_dwrite (f, _T("framelatency"), _T("%d"), forcedframelatency);
int i, v;
bool tbool;
- int result = (cfgfile_yesno (option, value, _T("middle_mouse"), &p->win32_middle_mouse)
- || cfgfile_yesno (option, value, _T("map_drives"), &p->win32_automount_drives)
- || cfgfile_yesno (option, value, _T("map_drives_auto"), &p->win32_automount_removable)
- || cfgfile_yesno (option, value, _T("map_cd_drives"), &p->win32_automount_cddrives)
- || cfgfile_yesno (option, value, _T("map_net_drives"), &p->win32_automount_netdrives)
- || cfgfile_yesno (option, value, _T("map_removable_drives"), &p->win32_automount_removabledrives)
- || cfgfile_yesno (option, value, _T("logfile"), &p->win32_logfile)
- || cfgfile_yesno (option, value, _T("networking"), &p->socket_emu)
- || cfgfile_yesno (option, value, _T("borderless"), &p->win32_borderless)
- || cfgfile_yesno (option, value, _T("blank_monitors"), &p->win32_blankmonitors)
- || cfgfile_yesno (option, value, _T("active_not_captured_pause"), &p->win32_active_nocapture_pause)
- || cfgfile_yesno (option, value, _T("active_not_captured_nosound"), &p->win32_active_nocapture_nosound)
- || cfgfile_yesno (option, value, _T("inactive_pause"), &p->win32_inactive_pause)
- || cfgfile_yesno (option, value, _T("inactive_nosound"), &p->win32_inactive_nosound)
+ int result = (cfgfile_yesno(option, value, _T("middle_mouse"), &p->win32_middle_mouse)
+ || cfgfile_yesno(option, value, _T("map_drives"), &p->win32_automount_drives)
+ || cfgfile_yesno(option, value, _T("map_drives_auto"), &p->win32_automount_removable)
+ || cfgfile_yesno(option, value, _T("map_cd_drives"), &p->win32_automount_cddrives)
+ || cfgfile_yesno(option, value, _T("map_net_drives"), &p->win32_automount_netdrives)
+ || cfgfile_yesno(option, value, _T("map_removable_drives"), &p->win32_automount_removabledrives)
+ || cfgfile_yesno(option, value, _T("logfile"), &p->win32_logfile)
+ || cfgfile_yesno(option, value, _T("networking"), &p->socket_emu)
+ || cfgfile_yesno(option, value, _T("borderless"), &p->win32_borderless)
+ || cfgfile_yesno(option, value, _T("blank_monitors"), &p->win32_blankmonitors)
+ || cfgfile_yesno(option, value, _T("active_not_captured_pause"), &p->win32_active_nocapture_pause)
+ || cfgfile_yesno(option, value, _T("active_not_captured_nosound"), &p->win32_active_nocapture_nosound)
+ || cfgfile_yesno(option, value, _T("inactive_pause"), &p->win32_inactive_pause)
+ || cfgfile_yesno(option, value, _T("inactive_nosound"), &p->win32_inactive_nosound)
|| cfgfile_intval(option, value, _T("inactive_input"), &p->win32_inactive_input, 1)
|| cfgfile_yesno(option, value, _T("iconified_pause"), &p->win32_iconified_pause)
- || cfgfile_yesno (option, value, _T("iconified_nosound"), &p->win32_iconified_nosound)
+ || cfgfile_yesno(option, value, _T("iconified_nosound"), &p->win32_iconified_nosound)
|| cfgfile_intval(option, value, _T("iconified_input"), &p->win32_iconified_input, 1)
|| cfgfile_yesno(option, value, _T("ctrl_f11_is_quit"), &p->win32_ctrl_F11_is_quit)
- || cfgfile_yesno (option, value, _T("no_recyclebin"), &p->win32_norecyclebin)
- || cfgfile_intval (option, value, _T("midi_device"), &p->win32_midioutdev, 1)
- || cfgfile_intval (option, value, _T("midiout_device"), &p->win32_midioutdev, 1)
- || cfgfile_intval (option, value, _T("midiin_device"), &p->win32_midiindev, 1)
- || cfgfile_yesno (option, value, _T("midirouter"), &p->win32_midirouter)
- || cfgfile_intval (option, value, _T("samplersoundcard"), &p->win32_samplersoundcard, 1)
- || cfgfile_yesno (option, value, _T("notaskbarbutton"), &p->win32_notaskbarbutton)
- || cfgfile_yesno (option, value, _T("nonotificationicon"), &p->win32_nonotificationicon)
- || cfgfile_yesno (option, value, _T("always_on_top"), &p->win32_alwaysontop)
- || cfgfile_yesno (option, value, _T("powersavedisabled"), &p->win32_powersavedisabled)
- || cfgfile_string (option, value, _T("exec_before"), p->win32_commandpathstart, sizeof p->win32_commandpathstart / sizeof (TCHAR))
- || cfgfile_string (option, value, _T("exec_after"), p->win32_commandpathend, sizeof p->win32_commandpathend / sizeof (TCHAR))
- || cfgfile_string (option, value, _T("parjoyport0"), p->win32_parjoyport0, sizeof p->win32_parjoyport0 / sizeof (TCHAR))
- || cfgfile_string (option, value, _T("parjoyport1"), p->win32_parjoyport1, sizeof p->win32_parjoyport1 / sizeof (TCHAR))
- || cfgfile_string (option, value, _T("gui_page"), p->win32_guipage, sizeof p->win32_guipage / sizeof (TCHAR))
- || cfgfile_string (option, value, _T("gui_active_page"), p->win32_guiactivepage, sizeof p->win32_guiactivepage / sizeof (TCHAR))
- || cfgfile_intval (option, value, _T("guikey"), &p->win32_guikey, 1)
- || cfgfile_intval (option, value, _T("kbledmode"), &p->win32_kbledmode, 1)
- || cfgfile_yesno (option, value, _T("filesystem_mangle_reserved_names"), &p->win32_filesystem_mangle_reserved_names)
- || cfgfile_intval (option, value, _T("extraframewait"), &extraframewait, 1)
- || cfgfile_intval (option, value, _T("framelatency"), &forcedframelatency, 1)
- || cfgfile_intval (option, value, _T("cpu_idle"), &p->cpu_idle, 1));
+ || cfgfile_yesno(option, value, _T("no_recyclebin"), &p->win32_norecyclebin)
+ || cfgfile_intval(option, value, _T("midi_device"), &p->win32_midioutdev, 1)
+ || cfgfile_intval(option, value, _T("midiout_device"), &p->win32_midioutdev, 1)
+ || cfgfile_intval(option, value, _T("midiin_device"), &p->win32_midiindev, 1)
+ || cfgfile_yesno(option, value, _T("midirouter"), &p->win32_midirouter)
+ || cfgfile_intval(option, value, _T("samplersoundcard"), &p->win32_samplersoundcard, 1)
+ || cfgfile_yesno(option, value, _T("notaskbarbutton"), &p->win32_notaskbarbutton)
+ || cfgfile_yesno(option, value, _T("nonotificationicon"), &p->win32_nonotificationicon)
+ || cfgfile_yesno(option, value, _T("always_on_top"), &p->win32_alwaysontop)
+ || cfgfile_yesno(option, value, _T("powersavedisabled"), &p->win32_powersavedisabled)
+ || cfgfile_string(option, value, _T("exec_before"), p->win32_commandpathstart, sizeof p->win32_commandpathstart / sizeof (TCHAR))
+ || cfgfile_string(option, value, _T("exec_after"), p->win32_commandpathend, sizeof p->win32_commandpathend / sizeof (TCHAR))
+ || cfgfile_string(option, value, _T("parjoyport0"), p->win32_parjoyport0, sizeof p->win32_parjoyport0 / sizeof (TCHAR))
+ || cfgfile_string(option, value, _T("parjoyport1"), p->win32_parjoyport1, sizeof p->win32_parjoyport1 / sizeof (TCHAR))
+ || cfgfile_string(option, value, _T("gui_page"), p->win32_guipage, sizeof p->win32_guipage / sizeof (TCHAR))
+ || cfgfile_string(option, value, _T("gui_active_page"), p->win32_guiactivepage, sizeof p->win32_guiactivepage / sizeof (TCHAR))
+ || cfgfile_intval(option, value, _T("guikey"), &p->win32_guikey, 1)
+ || cfgfile_intval(option, value, _T("kbledmode"), &p->win32_kbledmode, 1)
+ || cfgfile_yesno(option, value, _T("filesystem_mangle_reserved_names"), &p->win32_filesystem_mangle_reserved_names)
+ || cfgfile_yesno(option, value, _T("right_control_is_right_win"), &p->right_control_is_right_win_key)
+ || cfgfile_intval(option, value, _T("extraframewait"), &extraframewait, 1)
+ || cfgfile_intval(option, value, _T("framelatency"), &forcedframelatency, 1)
+ || cfgfile_intval(option, value, _T("cpu_idle"), &p->cpu_idle, 1));
if (cfgfile_string(option, value, _T("expansion_gui_page"), tmpbuf, sizeof tmpbuf / sizeof(TCHAR))) {
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("9")
+#define WINUAEBETA _T("10")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2015, 8, 20)
+#define WINUAEDATE MAKEBD(2015, 8, 28)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
for (i = 0; i < MAX_TOTAL_NET_DEVICES; i++) {
tds[i].active = 0;
}
+ enumerated = 0;
}
static struct netdriverdata *enumit (const TCHAR *name)
if (!done)
write_log (_T("- MAC %02X:%02X:%02X:%02X:%02X:%02X (%d)\n"),
tc->mac[0], tc->mac[1], tc->mac[2],
- tc->mac[3], tc->mac[4], tc->mac[5], cnt++);
+ tc->mac[3], tc->mac[4], tc->mac[5], cnt);
tc->type = UAENET_PCAP;
tc->active = 1;
tc->mtu = 1522;
tc->name = au (d->name);
tc->desc = au (d->description);
+ cnt++;
} else {
write_log (_T(" - failed to get MAC\n"));
}
PacketCloseAdapter (lpAdapter);
}
if (!done)
- write_log (_T("uaenet: end of detection\n"));
+ write_log (_T("uaenet: end of detection, %d devices found.\n"), cnt);
done = 1;
pcap_freealldevs (alldevs);
enumerated = 1;
currprefs.win32_iconified_nosound != changed_prefs.win32_iconified_nosound ||
currprefs.win32_iconified_pause != changed_prefs.win32_iconified_pause ||
currprefs.win32_iconified_input != changed_prefs.win32_iconified_input ||
- currprefs.win32_ctrl_F11_is_quit != changed_prefs.win32_ctrl_F11_is_quit)
+ currprefs.win32_ctrl_F11_is_quit != changed_prefs.win32_ctrl_F11_is_quit ||
+ currprefs.right_control_is_right_win_key != changed_prefs.right_control_is_right_win_key)
{
currprefs.win32_minimize_inactive = changed_prefs.win32_minimize_inactive;
currprefs.leds_on_screen = changed_prefs.leds_on_screen;
currprefs.win32_iconified_pause = changed_prefs.win32_iconified_pause;
currprefs.win32_iconified_input = changed_prefs.win32_iconified_input;
currprefs.win32_ctrl_F11_is_quit = changed_prefs.win32_ctrl_F11_is_quit;
+ currprefs.right_control_is_right_win_key = changed_prefs.right_control_is_right_win_key;
inputdevice_unacquire ();
currprefs.keyboard_leds_in_use = changed_prefs.keyboard_leds_in_use = (currprefs.keyboard_leds[0] | currprefs.keyboard_leds[1] | currprefs.keyboard_leds[2]) != 0;
pause_sound ();
127, 140, -1, -1, // kommos
128, -1, -1, // vector falcon
132, -1, -1, // add500
- 139, -1, -2, // nexus
+ 139, -1, -1, // nexus
+ 138, 146, -1, -2, // roctec
18, -1, 19, -1, 74, 23, -1, -1, // CD32 FMV
91, -1, -2, // Picasso IV
_T("Vector Falcon 8000 SCSI\0")
_T("Archos ADD-500\0")
_T("Preferred Technologies Nexus\0")
+ _T("Roctec RH800C\0")
_T("CD32 Full Motion Video\0")
_T("Picasso IV\0")
{ 0, 1, _T("100/120Hz VSync black frame insertion"), &workprefs.lightboost_strobo },
{ 0, 0, _T("Master floppy write protection"), &workprefs.floppy_read_only },
{ 0, 0, _T("Hide all UAE autoconfig boards"), &workprefs.uae_hide_autoconfig },
+ { 0, 1, _T("Right Control = Right Windows key"), &workprefs.right_control_is_right_win_key },
{ 0, NULL }
};
BOOL enable = FALSE, jitenable = FALSE;
BOOL cpu_based_enable = FALSE;
- ew (hDlg, IDC_SPEED, !workprefs.cpu_cycle_exact);
- ew (hDlg, IDC_COMPATIBLE24, workprefs.cpu_model <= 68030);
- //ew (hDlg, IDC_CS_HOST, !workprefs.cpu_cycle_exact);
- //ew (hDlg, IDC_CS_68000, !workprefs.cpu_cycle_exact);
- //ew (hDlg, IDC_CS_ADJUSTABLE, !workprefs.cpu_cycle_exact);
- ew (hDlg, IDC_CPUIDLE, workprefs.m68k_speed != 0 ? TRUE : FALSE);
- ew (hDlg, IDC_PPC_CPUIDLE, workprefs.ppc_mode != 0);
+ ew(hDlg, IDC_SPEED, !workprefs.cpu_cycle_exact);
+ ew(hDlg, IDC_COMPATIBLE24, workprefs.cpu_model <= 68030);
+ //ew(hDlg, IDC_CS_HOST, !workprefs.cpu_cycle_exact);
+ //ew(hDlg, IDC_CS_68000, !workprefs.cpu_cycle_exact);
+ //ew(hDlg, IDC_CS_ADJUSTABLE, !workprefs.cpu_cycle_exact);
+ ew(hDlg, IDC_CPUIDLE, workprefs.m68k_speed != 0 ? TRUE : FALSE);
+ ew(hDlg, IDC_PPC_CPUIDLE, workprefs.ppc_mode != 0);
+ ew(hDlg, IDC_SPEED_x86, is_x86_cpu(&workprefs));
+ ew(hDlg, IDC_CPUTEXT_x86, is_x86_cpu(&workprefs));
#if !defined(CPUEMU_0) || defined(CPUEMU_68000_ONLY)
- ew (hDlg, IDC_CPU1, FALSE);
- ew (hDlg, IDC_CPU2, FALSE);
- ew (hDlg, IDC_CPU3, FALSE);
- ew (hDlg, IDC_CPU4, FALSE);
- ew (hDlg, IDC_CPU5, FALSE);
+ ew(hDlg, IDC_CPU1, FALSE);
+ ew(hDlg, IDC_CPU2, FALSE);
+ ew(hDlg, IDC_CPU3, FALSE);
+ ew(hDlg, IDC_CPU4, FALSE);
+ ew(hDlg, IDC_CPU5, FALSE);
#endif
cpu_based_enable = workprefs.cpu_model >= 68020 && workprefs.address_space_24 == 0;
ew (hDlg, IDC_MMUENABLE, workprefs.cpu_model >= 68030 && workprefs.cachesize == 0);
ew (hDlg, IDC_CPU_PPC, workprefs.cpu_model >= 68040 && (workprefs.ppc_mode == 1 || (workprefs.ppc_mode == 0 && !is_ppc_cpu(&workprefs))));
- SendDlgItemMessage (hDlg, IDC_SPEED, TBM_SETRANGE, TRUE, workprefs.m68k_speed < 0 ? MAKELONG (-9, 0) : MAKELONG (-9, 50));
- SendDlgItemMessage (hDlg, IDC_SPEED, TBM_SETPAGESIZE, 0, 1);
+ SendDlgItemMessage(hDlg, IDC_SPEED, TBM_SETRANGE, TRUE, workprefs.m68k_speed < 0 ? MAKELONG(-9, 0) : MAKELONG(-9, 50));
+ SendDlgItemMessage(hDlg, IDC_SPEED, TBM_SETPAGESIZE, 0, 1);
+ SendDlgItemMessage(hDlg, IDC_SPEED_x86, TBM_SETRANGE, TRUE, MAKELONG(-1, 100));
+ SendDlgItemMessage(hDlg, IDC_SPEED_x86, TBM_SETPAGESIZE, 0, 1);
}
static double getcpufreq (int m)
TCHAR buffer[8] = _T("");
int cpu;
+ SendDlgItemMessage(hDlg, IDC_SPEED_x86, TBM_SETPOS, TRUE, (int)(workprefs.x86_speed_throttle / 100));
+ if (workprefs.x86_speed_throttle < 0)
+ _tcscpy(buffer, _T("Max"));
+ else
+ _stprintf(buffer, _T("%+d%%"), (int)(workprefs.x86_speed_throttle / 10));
+ SetDlgItemText(hDlg, IDC_CPUTEXT_x86, buffer);
+
SendDlgItemMessage (hDlg, IDC_SPEED, TBM_SETPOS, TRUE, (int)(workprefs.m68k_speed_throttle / 100));
_stprintf (buffer, _T("%+d%%"), (int)(workprefs.m68k_speed_throttle / 10));
SetDlgItemText (hDlg, IDC_CPUTEXT, buffer);
workprefs.m68k_speed_throttle = SendMessage (GetDlgItem (hDlg, IDC_SPEED), TBM_GETPOS, 0, 0) * 100;
if (workprefs.m68k_speed_throttle > 0 && workprefs.m68k_speed < 0)
workprefs.m68k_speed_throttle = 0;
+ workprefs.x86_speed_throttle = SendMessage(GetDlgItem(hDlg, IDC_SPEED_x86), TBM_GETPOS, 0, 0) * 100;
newcpu = ischecked (hDlg, IDC_CPU0) ? 68000
: ischecked (hDlg, IDC_CPU1) ? 68010
return ret;
}
+#ifndef WM_DPICHANGED
+#define WM_DPICHANGED 0x02E0
+#endif
+
static int dialogreturn;
static INT_PTR CALLBACK DialogProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
+ case WM_DPICHANGED:
+ {
+ int dx = LOWORD(wParam);
+ int dy = HIWORD(wParam);
+ RECT *r = (RECT*)lParam;
+ gui_width = r->right - r->left;
+ gui_height = r->bottom - r->top;
+ gui_size_changed = 1;
+ }
+ break;
case WM_SIZING:
{
if (!recursive && gui_resize_enabled) {
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.40121.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winuae", "winuae_msvc.vcxproj", "{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}"
EndProject
</Link>
<Manifest>
<AdditionalManifestFiles>../resources/winuae.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</Link>
<Manifest>
<AdditionalManifestFiles>..\resources\winuae64.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</Link>
<Manifest>
<AdditionalManifestFiles>../resources/winuae.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
<OutputManifestFile>$(IntDir)$(TargetName)$(TargetExt).embed.manifest</OutputManifestFile>
<AdditionalOptions>/validate_manifest %(AdditionalOptions)</AdditionalOptions>
</Manifest>
</Link>
<Manifest>
<AdditionalManifestFiles>../resources/winuae.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
<OutputManifestFile>$(IntDir)$(TargetName)$(TargetExt).embed.manifest</OutputManifestFile>
<AdditionalOptions>/validate_manifest %(AdditionalOptions)</AdditionalOptions>
</Manifest>
</Link>
<Manifest>
<AdditionalManifestFiles>..\resources\winuae64.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
</Link>
<Manifest>
<AdditionalManifestFiles>..\resources\winuae64.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'">
</Link>
<Manifest>
<AdditionalManifestFiles>../resources/winuae.exe.manifest</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='FullRelease|x64'">
</Link>
<Manifest>
<AdditionalManifestFiles>..\resources\winuae64.exe.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
- <EnableDPIAwareness>true</EnableDPIAwareness>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
</Manifest>
</ItemDefinitionGroup>
<ItemGroup>
+Beta 10:
+
+- IDE emulation internal operation change. Previously next block was read from hardfile after previous
+ block was transferred. Now all blocks are buffered first before transferring (or if write: all data
+ is received first and then all buffered data is written to HDF). Fixes A2286 BIOS built-in IDE driver
+ which does not wait for interrupt or DRQ status bit between transferred blocks. (Which technically is
+ a bug, driver is depending on some specific HD manufacturer/model internal implementation detail)
+- Amiga to PC bridgeboard interrupt enable/disable state fixed. A2286 Janus hardfile access does not hang
+ anymore.
+- Added x86 CPU speed adjustment (CPU panel, full left = fastest possible mode). Note that some BIOS
+ drivers use CPU delay loops, unexpected things can happen.. Fastest possible enables extra hack
+ ("immediate" floppy to prevent floppy detection fail). Speed adjustment is only enabled after initial
+ BIOS diagnostics checks have been done because some timer tests fail if CPU is too fast..
+- Added right control = right Windows key option. (Keyboards without right Windows key, quicker to use
+ than creating custom mapping, note that it also disables keyboard layout B RCTRL=fire mapping)
+- GUI window is now per-monitor high DPI aware.
+- 3-State Apollo 500/2000 IDE/SCSI combo HD controller fully implemented. ROM added to ROM scanner.
+ 3rd party replacement ROM available from Aminet. (http://aminet.net/package/disk/cdrom/AT_ApolloDev)
+- CDFS automount without physical drives mounted 10 empty image drives (b1).
+
Beta 9:
- x86 floppy controller EOT parameter was read from wrong offset. Note that previously 1.4M floppy in
return NULL;
}
-#define NEXT_ROM_ID 145
+#define NEXT_ROM_ID 147
static struct romheader romheaders[] = {
{ _T("Freezer Cartridges"), 1 },
0xe8201bad, 0xdefea015,0x596fce32,0x11e84397,0x23046a31,0x5a7726dc, NULL, NULL },
{ _T("Masoboshi MC-702"), 2, 201, 2, 201, _T("MASOBOSHI\0"), 32768, 120, 0, 0, ROMTYPE_MASOBOSHI, 0, 0, NULL,
0xcd99b98a, 0x3897e46a,0x66d5833f,0x849b8e81,0x30acb3cb,0x319a2fa0, NULL, NULL },
- { _T("Roctec RocHard RH800C"), 1, 0, 1, 0, _T("ROCHARD\0"), 16384, 138, 0, 0, ROMTYPE_ROCHARD, 0, 0, NULL,
+ { _T("Roctec RocHard RH800C v1"), 1, 0, 1, 0, _T("ROCHARD\0"), 16384, 138, 0, 0, ROMTYPE_ROCHARD, 0, 0, NULL,
0x0e980aec, 0xbcafa14d,0xe80576cb,0xe3e0c638,0x1ca90379,0xe078a8bd, NULL, NULL },
ALTROMPN(138, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0xde3a855b, 0xda2fe069, 0xd78c9ccc, 0xc221711f, 0x1e598298, 0x2bdabffd)
ALTROMPN(138, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0xb0ed3006, 0x0a88d84e, 0x2094f9e5, 0x18d37f90, 0x34764f22, 0x9696c3d9)
+ { _T("Roctec RocHard RH800C v2"), 2, 0, 2, 0, _T("ROCHARD\0"), 16384, 146, 0, 0, ROMTYPE_ROCHARD, 0, 0, NULL,
+ 0x5c27be3f, 0xacdb8bc7,0x64493f65,0x9da4c1e8,0x3005ceeb,0xced73dbc, NULL, NULL },
+ ALTROMPN(146, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0xc5b8f068, 0x6ada1205, 0x44d284d0, 0x326d68cb, 0x7a2d9fb4, 0x77f35852)
+ ALTROMPN(146, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0xc88843cb, 0x3d7eb1b6, 0x8139b81b, 0x0665684c, 0x536ab3d0, 0x52a5dd9d)
+ { _T("Apollo 500/2000"), 0, 0, 0, 0, _T("APOLLOHD\0"), 16384, 145, 0, 0, ROMTYPE_APOLLOHD, 0, 0, NULL,
+ 0x931bad25, 0x24b4ee4c,0x129c7a93,0xf83ad570,0x66afd80c,0x4179f39c, NULL, NULL },
{ _T("CyberStorm MK I 68040"), 0, 0, 0, 0, _T("CSMKI\0"), 32768, 95, 0, 0, ROMTYPE_CB_CSMK1, 0, 0, NULL,
0, 0, 0, 0, 0, 0, NULL, _T("cyberstormmk1_040.rom") },
void apollo_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
{
- generic_soft_scsi_add(ch, ci, rc, NONCR_APOLLO, -1, -1, ROMTYPE_APOLLO);
- // make sure IDE side is also initialized
- struct uaedev_config_info ci2 = { 0 };
- apollo_add_ide_unit(-1, &ci2, rc);
+ if (ch < 0) {
+ generic_soft_scsi_add(-1, ci, rc, NONCR_APOLLO, -1, -1, ROMTYPE_APOLLO);
+ // make sure IDE side is also initialized
+ struct uaedev_config_info ci2 = { 0 };
+ apollo_add_ide_unit(-1, &ci2, rc);
+ } else {
+ if (ci->controller_type < HD_CONTROLLER_TYPE_SCSI_FIRST) {
+ apollo_add_ide_unit(ch, ci, rc);
+ } else {
+ generic_soft_scsi_add(ch, ci, rc, NONCR_APOLLO, -1, -1, ROMTYPE_APOLLO);
+ }
+ }
}
uae_u8 ncr5380_bget(struct soft_scsi *scsi, int reg);
void x86_doirq(uint8_t irqnum);
static frame_time_t last_cycles;
+#define DEFAULT_X86_INSTRUCTION_COUNT 40
+static int x86_instruction_count;
static bool x86_turbo_allowed;
static bool x86_turbo_enabled;
bool x86_turbo_on;
#if X86_DEBUG_BRIDGE_IRQ
write_log(_T("IO_PC_INTERRUPT_CONTROL %02x\n"), v);
#endif
- if (xb->amiga_forced_interrupts) {
- if (v & 1)
- x86_doirq(1);
- if (xb->amiga_io[IO_CONTROL_REGISTER] & 8) {
- if (!(v & 2) || !(v & 4))
- x86_doirq(3);
- if (!(v & 8))
- x86_doirq(7);
- }
- }
+ if (xb->type < TYPE_2286 && (v & 1))
+ x86_doirq(1);
+ if (!(v & 2) || !(v & 4))
+ x86_doirq(3);
+ if (!(v & 8))
+ x86_doirq(7);
}
break;
case IO_CONTROL_REGISTER:
keyboardwaitack = 1;
}
-bool x86_is_keyboard(void);
+void x86_doirq_keyboard(void)
+{
+ x86_doirq(1);
+}
void check_x86_irq(void)
{
floppy_idx = 0;
floppy_dir = 0;
floppy_did_reset = true;
- if (0 && xb->type == TYPE_2286) {
+ if (xb->type == TYPE_2286) {
// apparently A2286 BIOS AT driver assumes
// floppy reset also resets IDE.
// Perhaps this is forgotten feature from
}
}
+static void check_floppy_delay(void)
+{
+ for (int i = 0; i < 4; i++) {
+ if (floppy_seeking[i]) {
+ bool neg = floppy_seeking[i] < 0;
+ if (floppy_seeking[i] > 0)
+ floppy_seeking[i]--;
+ else if (neg)
+ floppy_seeking[i]++;
+ if (floppy_seeking[i] == 0)
+ do_floppy_seek(i, neg);
+ }
+ }
+ if (floppy_delay_hsync > 1 || floppy_delay_hsync < -1) {
+ if (floppy_delay_hsync > 0)
+ floppy_delay_hsync--;
+ else
+ floppy_delay_hsync++;
+ if (floppy_delay_hsync == 1 || floppy_delay_hsync == -1)
+ do_floppy_irq();
+ }
+}
+
+
static void x86_cpu_execute(int cnt)
{
struct x86_bridge *xb = bridges[0];
exec86(cnt);
}
}
+
+ // BIOS has CPU loop delays in floppy driver...
+ check_floppy_delay();
}
void x86_bridge_execute_until(int until)
if (!xb)
return;
- for (int i = 0; i < 4; i++) {
- if (floppy_seeking[i]) {
- bool neg = floppy_seeking[i] < 0;
- if (floppy_seeking[i] > 0)
- floppy_seeking[i]--;
- else if (neg)
- floppy_seeking[i]++;
- if (floppy_seeking[i] == 0)
- do_floppy_seek(i, neg);
- }
- }
- if (floppy_delay_hsync > 1 || floppy_delay_hsync < -1) {
- if (floppy_delay_hsync > 0)
- floppy_delay_hsync--;
- else
- floppy_delay_hsync++;
- if (floppy_delay_hsync == 1 || floppy_delay_hsync == -1)
- do_floppy_irq();
- }
+ check_floppy_delay();
for (int i = 0; i < 3; i++) {
- x86_cpu_execute(40);
+ x86_cpu_execute(x86_instruction_count);
timing(maxhpos / 3);
}
+ if (currprefs.x86_speed_throttle != changed_prefs.x86_speed_throttle) {
+ currprefs.x86_speed_throttle = changed_prefs.x86_speed_throttle;
+ x86_instruction_count = DEFAULT_X86_INSTRUCTION_COUNT;
+ if (currprefs.x86_speed_throttle < 0) {
+ x86_turbo_enabled = true;
+ } else {
+ x86_turbo_enabled = false;
+ x86_instruction_count = DEFAULT_X86_INSTRUCTION_COUNT + DEFAULT_X86_INSTRUCTION_COUNT * currprefs.x86_speed_throttle / 1000;
+ }
+ }
+
if (x86_turbo_allowed && x86_turbo_enabled && !x86_turbo_on) {
x86_turbo_on = true;
} else if ((!x86_turbo_allowed || !x86_turbo_enabled) && x86_turbo_on) {
x86_turbo_on = false;
}
-
}
static void ew(uae_u8 *acmemory, int addr, uae_u8 value)
xb->pc_irq3a = xb->pc_irq3b = xb->pc_irq7 = false;
x86_turbo_allowed = false;
x86_cpu_active = false;
+ x86_instruction_count = DEFAULT_X86_INSTRUCTION_COUNT;
memset(xb->amiga_io, 0, 0x10000);
memset(xb->io_ports, 0, 0x10000);
for (int i = 0; i < 2; i++) {
return X86_STATE_STOP;
else if (x86_found < 0)
return X86_STATE_INACTIVE;
- if (is_device_rom(&currprefs, ROMTYPE_A1060, 0) < 0 &&
- is_device_rom(&currprefs, ROMTYPE_A2088, 0) < 0 &&
- is_device_rom(&currprefs, ROMTYPE_A2088T, 0) < 0 &&
- is_device_rom(&currprefs, ROMTYPE_A2286, 0) < 0 &&
- is_device_rom(&currprefs, ROMTYPE_A2386, 0) < 0) {
- x86_found = -1;
+ if (is_device_rom(p, ROMTYPE_A1060, 0) < 0 &&
+ is_device_rom(p, ROMTYPE_A2088, 0) < 0 &&
+ is_device_rom(p, ROMTYPE_A2088T, 0) < 0 &&
+ is_device_rom(p, ROMTYPE_A2286, 0) < 0 &&
+ is_device_rom(p, ROMTYPE_A2386, 0) < 0) {
+ if (p == &currprefs)
+ x86_found = -1;
return X86_STATE_INACTIVE;
} else {
- x86_found = 1;
+ if (p == &currprefs)
+ x86_found = 1;
}
}
if (!xb || xb->x86_reset)