Added the NCR 53C810 PCI SCSI controller;

Fixed the behavior of the CD-ROM GET CONFIGURATION command when unimplemented features are requested;
Fixed the behavior of the CD-ROM READ DVD STRUCTURE command in some situations and made it correctly report 05/30/02 for incompatible format;
Reworked the PS/2 Model 80 Type 2 memory handling a bit;
The emulator now allocates the few MB of space needed for pages for the entire 4 GB RAM space at the startup and only memset's it to 0 on hard reset - should make sure DMA page reads from/writes to memory-mapped devices no longer crash the emulator on invalidating the memory range;
Applied app applicable PCem patches;
The PS/1 Model 2133 now also applies PS/2-style NMI mask handling - fixes the 486 recompiler on this machine;
Added the missing #include of "cpu/cpu.h" in io.c, fixes compiling when I/O tracing is enabled.
This commit is contained in:
OBattler
2017-12-10 15:16:24 +01:00
parent c7946fbce7
commit f050810e2f
20 changed files with 397 additions and 129 deletions

View File

@@ -32,6 +32,8 @@
#include "../device.h"
#include "../io.h"
#include "../pic.h"
#include "../cpu/cpu.h"
#include "../machine/machine.h"
#include "../timer.h"
#include "../plat.h"
#include "../ui.h"
@@ -223,7 +225,7 @@ mfm_cmd(mfm_t *mfm, uint8_t val)
mfm->drvsel, val);
mfm->command = 0xff;
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 200LL*MFM_TIME;
timer_update_outstanding();
@@ -250,7 +252,7 @@ mfm_cmd(mfm_t *mfm, uint8_t val)
drive->steprate = (val & 0x0f);
mfm->command = (val & 0xf0);
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 200LL*MFM_TIME;
timer_update_outstanding();
break;
@@ -269,7 +271,7 @@ mfm_cmd(mfm_t *mfm, uint8_t val)
if (val & 2)
fatal("WD1003: READ with ECC\n");
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 200LL*MFM_TIME;
timer_update_outstanding();
break;
@@ -293,7 +295,7 @@ mfm_cmd(mfm_t *mfm, uint8_t val)
case CMD_VERIFY+1:
mfm->command = (val & 0xfe);
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 200LL*MFM_TIME;
timer_update_outstanding();
break;
@@ -307,7 +309,7 @@ mfm_cmd(mfm_t *mfm, uint8_t val)
case CMD_DIAGNOSE:
mfm->command = val;
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 200LL*MFM_TIME;
timer_update_outstanding();
break;
@@ -350,7 +352,7 @@ mfm_cmd(mfm_t *mfm, uint8_t val)
default:
pclog("WD1003: bad command %02X\n", val);
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 200LL*MFM_TIME;
timer_update_outstanding();
break;
@@ -370,7 +372,7 @@ mfm_writew(uint16_t port, uint16_t val, void *priv)
if (mfm->pos >= 512) {
mfm->pos = 0;
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 6LL*MFM_TIME;
timer_update_outstanding();
}
@@ -428,7 +430,7 @@ mfm_write(uint16_t port, uint8_t val, void *priv)
if ((mfm->fdisk & 0x04) && !(val & 0x04)) {
mfm->status = STAT_BUSY;
mfm->reset = 1;
timer_process();
timer_clock();
mfm->callback = 500LL*MFM_TIME;
timer_update_outstanding();
}
@@ -437,7 +439,7 @@ mfm_write(uint16_t port, uint8_t val, void *priv)
/* Drive held in reset. */
mfm->status = STAT_BUSY;
mfm->callback = 0LL;
timer_process();
timer_clock();
timer_update_outstanding();
}
mfm->fdisk = val;
@@ -462,7 +464,7 @@ mfm_readw(uint16_t port, void *priv)
if (mfm->secount) {
next_sector(mfm);
mfm->status = STAT_BUSY;
timer_process();
timer_clock();
mfm->callback = 6LL*MFM_TIME;
timer_update_outstanding();
} else {