uint16_t address = eeprom->address;
uint8_t command = eeprom->command;
- //write_log("CS=%u SK=%u DI=%u DO=%u, tick = %u\n", eecs, eesk, eedi, eedo, tick);
+#if EEPROM_LOG
+ write_log("CS=%u SK=%u DI=%u DO=%u, tick = %u\n", eecs, eesk, eedi, eedo, tick);
+#endif
if (!eeprom->eecs && eecs) {
/* Start chip select cycle. */
- //write_log("Cycle start, waiting for 1st start bit (0)\n");
+#if EEPROM_LOG
+ write_log("Cycle start, waiting for 1st start bit (0)\n");
+#endif
tick = 0;
command = 0x0;
address = 0x0;
if (tick == 0) {
/* Wait for 1st start bit. */
if (eedi == 0) {
- //write_log("Got correct 1st start bit, waiting for 2nd start bit (1)\n");
+#if EEPROM_LOG
+ write_log("Got correct 1st start bit, waiting for 2nd start bit (1)\n");
+#endif
tick++;
}
else {
- //write_log("wrong 1st start bit (is 1, should be 0)\n");
+#if EEPROM_LOG
+ write_log("wrong 1st start bit (is 1, should be 0)\n");
+#endif
tick = 2;
//~ assert(!"wrong start bit");
}
else if (tick == 1) {
/* Wait for 2nd start bit. */
if (eedi != 0) {
- //write_log("Got correct 2nd start bit, getting command + address\n");
+#if EEPROM_LOG
+ write_log("Got correct 2nd start bit, getting command + address\n");
+#endif
tick++;
}
else {
- ;//write_log("1st start bit is longer than needed\n");
+#if EEPROM_LOG
+
+ write_log("1st start bit is longer than needed\n");
+#endif
}
}
else if (tick < 2 + 2) {
tick++;
address = ((address << 1) | eedi);
if (tick == 2 + 2 + eeprom->addrbits) {
- //write_log("%s command, address = 0x%02x (value 0x%04x)\n", opstring[command], address, eeprom->contents[address]);
+#if EEPROM_LOG
+ write_log("%s command, address = 0x%02x (value 0x%04x)\n", opstring[command], address, eeprom->contents[address]);
+#endif
if (command == 2) {
eedo = 0;
}
/* Command code in upper 2 bits of address. */
switch (address >> (eeprom->addrbits - 2)) {
case 0:
- //write_log("write disable command\n");
+#if EEPROM_LOG
+ write_log("write disable command\n");
+#endif
eeprom->writeable = 0;
break;
case 1:
- //write_log("write all command\n");
+#if EEPROM_LOG
+ write_log("write all command\n");
+#endif
break;
case 2:
- //write_log("erase all command\n");
+#if EEPROM_LOG
+ write_log("erase all command\n");
+#endif
break;
case 3:
- //write_log("write enable command\n");
+#if EEPROM_LOG
+ write_log("write enable command\n");
+#endif
eeprom->writeable = 1;
break;
}
eeprom->data += eedi;
}
else {
- ;//write_log("additional unneeded tick, not processed\n");
+#if EEPROM_LOG
+ write_log("additional unneeded tick, not processed\n");
+#endif
}
}
/* Save status of EEPROM. */
{
eeprom93xx_eeprom_t *eeprom = (eeprom93xx_eeprom_t*)eepromp;
/* Return status of pin DO (0 or 1). */
- //write_log("CS=%u DO=%u\n", eeprom->eecs, eeprom->eedo);
+#if EEPROM_LOG
+ write_log("CS=%u DO=%u\n", eeprom->eecs, eeprom->eedo);
+#endif
return eeprom->eedo;
}
\r
-JIT Direct current rules are less complex now. It automatically switches off only in following situations:\r
- - Accelerator mirrored maprom address space is not JIT Direct compatible. (CyberStorm, Blizzards etc)\r
- - RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel.\r
- Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)\r
+Beta 4:\r
+\r
+- Show only every 10th frame in D3D11 warp mode. For some reason Present() blocks if rate is higher than current max monitor refresh rate, not even DXGI_PRESENT_ALLOW_TEARING or DXGI_PRESENT_DO_NOT_WAIT help.\r
+- Normal windowed D3D11 vsync mode should work correctly again.\r
+- Default WASAPI audio device now follows Windows default audio device if default gets changed and emulation is already running.\r
+- Renamed new low latency vsync to official "Lagless VSYNC (Beamraced)".\r
+- Flip first slice early, before vblank (Early flip won't cause tearing as long as it happens during last slice). This should fix tearing in topmost slice when flip gets delayed (which for some unknown reason seems to regularly happen if flipping is done during vblank). This change makes last debug color bar shorter which is normal.\r
+- Use NtDelayExecution and ZwSetTimerResolution (if available) for sub 1ms delays in non-fastest possible CPU low latency vsync modes.\r
+- Replaced FastLane ROM with full 32k dump.\r
+- Emulated (partially) C-Ltd Kronos.\r
+- Removed CDTV SCSI from Advanced Chipset. It is optional hardware module and should be only in Expansion panel. Old CDTV SCSI configured config files are still supported but this and future versions won't write old CDTV SCSI config file entry to config file anymore.\r
+\r
+C-Ltd Kronos:\r
+- 5380 based SCSI controller with buffer RAM.\r
+- Boot ROM added ("CLtd RomBoot 3.4, Copyright 1989, Wayne E. Miller")\r
+- Boot ROM is only small driver loader from drive's custom partition table.\r
+- SCSI settings are stored in 256 bit 93C06 serial EEPROM. EEPROM is emulated but data is static (boot enabled, SCSI ID=7)\r
+- Install disk is MIA: Emulation is not yet complete, for example buffer RAM/fake DMA is not emulated.\r
+\r
+Beta 3:\r
\r
+- New low latency vsync should now work under Windows XP, D3D9 only.\r
+- Added ICD AdSCSI ROM with icddisk.device v33.0 (unknown ROM version, most likely v2.0 or v2.1) and v34.0 (v2.2 ROM version)\r
+- Added MacroSystem DraCo v1.3 Boot ROM. Set it as extended ROM, A3000 KS 3.1 as normal ROM. (Boots and hangs like Casablanca)\r
+- Fixed MOVE16 debugger disassembly.\r
+- Fixed HDF/directory harddrive unit number conflict (if directory was between HDFs in harddrives list) introduced in b1.\r
+- Fixed randomly occurring timing issue. Reported refresh rate suddenly increased and it looked like warp mode was activated.\r
+- Full-window mode is now supported in virtual multi monitor mode. Native mode window opens on selected monitor, next virtual monitor opens on following real monitor and so on (or on top of existing window if not enough real monitors)\r
\r
Beta 2:\r
\r
omti_check_state(scsi);
}
-static int suprareg(struct soft_scsi *ncr, uaecptr addr, bool write)
+static int supra_reg(struct soft_scsi *ncr, uaecptr addr, bool write)
{
int reg = (addr & 0x0f) >> 1;
if ((addr & 0x20) && ncr->subtype == 0) {
return reg;
}
-static int stardrivereg(struct soft_scsi *ncr, uaecptr addr)
+static int stardrive_reg(struct soft_scsi *ncr, uaecptr addr)
{
if ((addr & 0x0191) == 0x191) {
// "dma" data in/out register
return reg;
}
-static int cltdreg(struct soft_scsi *ncr, uaecptr addr)
+static int cltd_reg(struct soft_scsi *ncr, uaecptr addr)
{
if (!(addr & 1)) {
return -1;
return reg;
}
-static int protarreg(struct soft_scsi *ncr, uaecptr addr)
+static int protar_reg(struct soft_scsi *ncr, uaecptr addr)
{
int reg = -1;
if ((addr & 0x24) == 0x20) {
return reg;
}
-static int add500reg(struct soft_scsi *ncr, uaecptr addr)
+static int add500_reg(struct soft_scsi *ncr, uaecptr addr)
{
int reg = -1;
if ((addr & 0x8048) == 0x8000) {
return reg;
}
-static int adscsireg(struct soft_scsi *ncr, uaecptr addr, bool write)
+static int adscsi_reg(struct soft_scsi *ncr, uaecptr addr, bool write)
{
int reg = -1;
if ((addr == 0x38 || addr == 0x39) && !write) {
return reg;
}
-static int ptnexusreg(struct soft_scsi *ncr, uaecptr addr)
+static int ptnexus_reg(struct soft_scsi *ncr, uaecptr addr)
{
int reg = -1;
if ((addr & 0x8ff0) == 0) {
}
// this is clone of trumpcardpro!
-static int addhardreg(uaecptr addr)
+static int addhard_reg(uaecptr addr)
{
if (addr & 1)
return -1;
return addr;
}
-static int emplantreg(uaecptr addr)
+static int emplant_reg(uaecptr addr)
{
if (addr & 1)
return -1;
return addr;
}
-static int malibureg(uaecptr addr)
+static int malibu_reg(uaecptr addr)
{
if ((addr & 0xc000) == 0x8000)
return 8; // long read port
if ((addr & 0xc000) == 0x4000) {
v = ncr->rom[addr & 0x3fff];
} else {
- reg = malibureg(addr);
+ reg = malibu_reg(addr);
if (reg >= 0) {
v = ncr5380_bget(ncr, reg);
}
if (addr & 0x8000) {
v = ncr->rom[addr & 0x7fff];
} else {
- reg = addhardreg(addr);
+ reg = addhard_reg(addr);
if (reg >= 0) {
if (reg == 8 && !ncr->dma_active) {
v = 0;
if ((addr & 0xf000) >= 0xc000) {
v = ncr->rom[addr & 0x3fff];
} else {
- reg = emplantreg(addr);
+ reg = emplant_reg(addr);
if (reg == 8 && !ncr->dma_active)
reg = -1;
if (reg >= 0) {
if (addresstype == 1) {
v = ncr->rom[addr & 0x7fff];
} else if (addresstype == 0) {
- reg = suprareg(ncr, addr, false);
+ reg = supra_reg(ncr, addr, false);
if (reg >= 0)
v = ncr5380_bget(ncr, reg);
}
if (addr < sizeof ncr->acmemory) {
v = ncr->acmemory[addr];
} else {
- reg = stardrivereg(ncr, addr);
+ reg = stardrive_reg(ncr, addr);
if (reg >= 0) {
v = ncr5380_bget(ncr, reg);
} else if (addr == 0x104) {
if (!ncr->configured && addr < sizeof ncr->acmemory) {
v = ncr->acmemory[addr];
} else {
- reg = cltdreg(ncr, addr);
+ reg = cltd_reg(ncr, addr);
if (reg >= 0)
v = ncr5380_bget(ncr, reg);
}
} else if (addr & 0x8000) {
v = ncr->rom[addr & 16383];
} else {
- reg = ptnexusreg(ncr, addr);
+ reg = ptnexus_reg(ncr, addr);
if (reg >= 0) {
v = ncr5380_bget(ncr, reg);
} else if (addr == 0x11) {
if (!ncr->configured) {
v = ncr->acmemory[addr];
} else {
- reg = protarreg(ncr, addr);
+ reg = protar_reg(ncr, addr);
if (reg >= 0) {
v = ncr5380_bget(ncr, reg);
}
v = ncr->databuffer[0] >> 8;
ncr->databuffer[0] <<= 8;
} else {
- reg = add500reg(ncr, addr);
+ reg = add500_reg(ncr, addr);
if (reg >= 0) {
v = ncr5380_bget(ncr, reg);
} else if ((addr & 0x8049) == 0x8009) {
struct raw_scsi *rs = &ncr->rscsi;
if (ncr->configured)
- reg = adscsireg(ncr, addr, false);
+ reg = adscsi_reg(ncr, addr, false);
if (reg >= 0) {
v = ncr5380_bget(ncr, reg);
} else {
}
#if NCR5380_DEBUG > 1
- if (1 || origaddr < 0x8000)
+ if (0 || origaddr < 0x8000)
write_log(_T("GET %08x %02x %d %08x %d\n"), origaddr, v, reg, M68K_GETPC, regs.intmask);
#endif
if (ncr->type == NCR5380_MALIBU) {
- reg = malibureg(addr);
+ reg = malibu_reg(addr);
if (reg >= 0) {
ncr5380_bput(ncr, reg, val);
}
} else if (ncr->type == NCR5380_ADDHARD) {
- reg = addhardreg(addr);
+ reg = addhard_reg(addr);
if (reg >= 0) {
if (reg == 8 && !ncr->dma_active) {
;
} else if (ncr->type == NCR5380_EMPLANT) {
- reg = emplantreg(addr);
+ reg = emplant_reg(addr);
if (reg == 8 && !ncr->dma_active)
reg = -1;
if (reg >= 0) {
addresstype = 0;
}
if (addresstype == 0) {
- reg = suprareg(ncr, addr, true);
+ reg = supra_reg(ncr, addr, true);
if (reg >= 0)
ncr5380_bput(ncr, reg, val);
}
} else if (ncr->type == NCR5380_STARDRIVE) {
- reg = stardrivereg(ncr, addr);
+ reg = stardrive_reg(ncr, addr);
if (reg >= 0)
ncr5380_bput(ncr, reg, val);
} else if (ncr->type == NCR5380_CLTD) {
if (ncr->configured) {
- reg = cltdreg(ncr, addr);
+ reg = cltd_reg(ncr, addr);
if (reg >= 0)
ncr5380_bput(ncr, reg, val);
}
} else if (ncr->type == NCR5380_PTNEXUS) {
if (ncr->configured) {
- reg = ptnexusreg(ncr, addr);
+ reg = ptnexus_reg(ncr, addr);
if (reg >= 0) {
ncr5380_bput(ncr, reg, val);
} else if (addr == 0x11) {
} else if (ncr->type == NCR5380_PROTAR) {
- reg = protarreg(ncr, addr);
+ reg = protar_reg(ncr, addr);
if (reg >= 0)
ncr5380_bput(ncr, reg, val);
struct raw_scsi *rs = &ncr->rscsi;
ncr->databuffer_empty = true;
} else {
- reg = add500reg(ncr, addr);
+ reg = add500_reg(ncr, addr);
if (reg >= 0) {
ncr5380_bput(ncr, reg, val);
}
} else if (ncr->type == NCR5380_ADSCSI) {
if (ncr->configured)
- reg = adscsireg(ncr, addr, true);
+ reg = adscsi_reg(ncr, addr, true);
if (reg >= 0) {
ncr5380_bput(ncr, reg, val);
}