Changes to logging - nothing (other than some parts of pc.c) uses the global pclog anymore (and logs will be almost empty (until the base set logging flags is agreed upon);
Fixes to various hard disk controllers; Added the Packard Bell PB640; Fixed the InPort mouse emulation - now it works correctly on Windows NT 3.1; Removed the status window and the associated variables; Completely removed the Green B 486 machine; Fixed the MDSI Genius; Fixed the single-sided 5.25" floppy drive; Ported a CPU-related commit from VARCem.
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
* Since all controllers (including the ones made by DTC) use
|
||||
* (mostly) the same API, we keep them all in this module.
|
||||
*
|
||||
* Version: @(#)hdc_mfm_xt.c 1.0.16 2018/04/26
|
||||
* Version: @(#)hdc_mfm_xt.c 1.0.17 2018/04/29
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
@@ -52,11 +52,13 @@
|
||||
#define __USE_LARGEFILE64
|
||||
#define _LARGEFILE_SOURCE
|
||||
#define _LARGEFILE64_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <wchar.h>
|
||||
#define HAVE_STDARG_H
|
||||
#include "../86box.h"
|
||||
#include "../device.h"
|
||||
#include "../dma.h"
|
||||
@@ -153,6 +155,26 @@ typedef struct {
|
||||
#define ERR_ILLEGAL_SECTOR_ADDRESS 0x21
|
||||
|
||||
|
||||
#ifdef ENABLE_MFM_XT_LOG
|
||||
int mfm_xt_do_log = ENABLE_MFM_XT_LOG;
|
||||
#endif
|
||||
|
||||
|
||||
static void
|
||||
mfm_xt_log(const char *fmt, ...)
|
||||
{
|
||||
#ifdef ENABLE_MFM_XT_LOG
|
||||
va_list ap;
|
||||
|
||||
if (mfm_xt_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static uint8_t
|
||||
mfm_read(uint16_t port, void *priv)
|
||||
{
|
||||
@@ -279,7 +301,7 @@ mfm_error(mfm_t *mfm, uint8_t error)
|
||||
mfm->completion_byte |= 0x02;
|
||||
mfm->error = error;
|
||||
|
||||
pclog("mfm_error - %02x\n", mfm->error);
|
||||
mfm_xt_log("mfm_error - %02x\n", mfm->error);
|
||||
}
|
||||
|
||||
|
||||
@@ -290,22 +312,22 @@ get_sector(mfm_t *mfm, off64_t *addr)
|
||||
int heads = drive->cfg_hpc;
|
||||
|
||||
if (drive->current_cylinder != mfm->cylinder) {
|
||||
pclog("mfm_get_sector: wrong cylinder\n");
|
||||
mfm_xt_log("mfm_get_sector: wrong cylinder\n");
|
||||
mfm->error = ERR_ILLEGAL_SECTOR_ADDRESS;
|
||||
return(1);
|
||||
}
|
||||
if (mfm->head > heads) {
|
||||
pclog("mfm_get_sector: past end of configured heads\n");
|
||||
mfm_xt_log("mfm_get_sector: past end of configured heads\n");
|
||||
mfm->error = ERR_ILLEGAL_SECTOR_ADDRESS;
|
||||
return(1);
|
||||
}
|
||||
if (mfm->head > drive->hpc) {
|
||||
pclog("mfm_get_sector: past end of heads\n");
|
||||
mfm_xt_log("mfm_get_sector: past end of heads\n");
|
||||
mfm->error = ERR_ILLEGAL_SECTOR_ADDRESS;
|
||||
return(1);
|
||||
}
|
||||
if (mfm->sector >= 17) {
|
||||
pclog("mfm_get_sector: past end of sectors\n");
|
||||
mfm_xt_log("mfm_get_sector: past end of sectors\n");
|
||||
mfm->error = ERR_ILLEGAL_SECTOR_ADDRESS;
|
||||
return(1);
|
||||
}
|
||||
@@ -396,7 +418,7 @@ mfm_callback(void *priv)
|
||||
mfm->sector_count = mfm->command[4];
|
||||
do {
|
||||
if (get_sector(mfm, &addr)) {
|
||||
pclog("get_sector failed\n");
|
||||
mfm_xt_log("get_sector failed\n");
|
||||
mfm_error(mfm, mfm->error);
|
||||
mfm_complete(mfm);
|
||||
return;
|
||||
@@ -423,7 +445,7 @@ mfm_callback(void *priv)
|
||||
mfm->head = mfm->command[1] & 0x1f;
|
||||
|
||||
if (get_sector(mfm, &addr)) {
|
||||
pclog("get_sector failed\n");
|
||||
mfm_xt_log("get_sector failed\n");
|
||||
mfm_error(mfm, mfm->error);
|
||||
mfm_complete(mfm);
|
||||
return;
|
||||
@@ -471,7 +493,7 @@ mfm_callback(void *priv)
|
||||
int val = dma_channel_write(3, mfm->sector_buf[mfm->data_pos]);
|
||||
|
||||
if (val == DMA_NODATA) {
|
||||
pclog("CMD_READ_SECTORS out of data!\n");
|
||||
mfm_xt_log("CMD_READ_SECTORS out of data!\n");
|
||||
mfm->status = STAT_BSY | STAT_CD | STAT_IO | STAT_REQ;
|
||||
mfm->callback = MFM_TIME;
|
||||
return;
|
||||
@@ -544,7 +566,7 @@ mfm_callback(void *priv)
|
||||
int val = dma_channel_read(3);
|
||||
|
||||
if (val == DMA_NODATA) {
|
||||
pclog("CMD_WRITE_SECTORS out of data!\n");
|
||||
mfm_xt_log("CMD_WRITE_SECTORS out of data!\n");
|
||||
mfm->status = STAT_BSY | STAT_CD | STAT_IO | STAT_REQ;
|
||||
mfm->callback = MFM_TIME;
|
||||
return;
|
||||
@@ -619,7 +641,7 @@ mfm_callback(void *priv)
|
||||
case STATE_RECEIVED_DATA:
|
||||
drive->cfg_cyl = mfm->data[1] | (mfm->data[0] << 8);
|
||||
drive->cfg_hpc = mfm->data[2];
|
||||
pclog("Drive %i: cylinders=%i, heads=%i\n", mfm->drive_sel, drive->cfg_cyl, drive->cfg_hpc);
|
||||
mfm_xt_log("Drive %i: cylinders=%i, heads=%i\n", mfm->drive_sel, drive->cfg_cyl, drive->cfg_hpc);
|
||||
mfm_complete(mfm);
|
||||
break;
|
||||
|
||||
@@ -648,7 +670,7 @@ mfm_callback(void *priv)
|
||||
int val = dma_channel_read(3);
|
||||
|
||||
if (val == DMA_NODATA) {
|
||||
pclog("CMD_WRITE_SECTOR_BUFFER out of data!\n");
|
||||
mfm_xt_log("CMD_WRITE_SECTOR_BUFFER out of data!\n");
|
||||
mfm->status = STAT_BSY | STAT_CD | STAT_IO | STAT_REQ;
|
||||
mfm->callback = MFM_TIME;
|
||||
return;
|
||||
@@ -697,7 +719,7 @@ mfm_callback(void *priv)
|
||||
mfm->data[0] = drive->tracks & 0xff;
|
||||
mfm->data[1] = 17 | ((drive->tracks >> 2) & 0xc0);
|
||||
mfm->data[2] = drive->hpc-1;
|
||||
pclog("Get drive params %02x %02x %02x %i\n", mfm->data[0], mfm->data[1], mfm->data[2], drive->tracks);
|
||||
mfm_xt_log("Get drive params %02x %02x %02x %i\n", mfm->data[0], mfm->data[1], mfm->data[2], drive->tracks);
|
||||
break;
|
||||
|
||||
case STATE_SENT_DATA:
|
||||
@@ -803,7 +825,7 @@ mfm_set_switches(mfm_t *mfm)
|
||||
}
|
||||
|
||||
if (c == 4)
|
||||
pclog("WARNING: Drive %c: has format not supported by Fixed Disk Adapter", d ? 'D' : 'C');
|
||||
mfm_xt_log("WARNING: Drive %c: has format not supported by Fixed Disk Adapter", d ? 'D' : 'C');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -816,16 +838,16 @@ xebec_init(const device_t *info)
|
||||
mfm_t *xebec = malloc(sizeof(mfm_t));
|
||||
memset(xebec, 0x00, sizeof(mfm_t));
|
||||
|
||||
pclog("MFM: looking for disks..\n");
|
||||
mfm_xt_log("MFM: looking for disks..\n");
|
||||
for (i=0; i<HDD_NUM; i++) {
|
||||
if ((hdd[i].bus == HDD_BUS_MFM) && (hdd[i].mfm_channel < MFM_NUM)) {
|
||||
pclog("Found MFM hard disk on channel %i\n", hdd[i].mfm_channel);
|
||||
mfm_xt_log("Found MFM hard disk on channel %i\n", hdd[i].mfm_channel);
|
||||
loadhd(xebec, i, hdd[i].mfm_channel, hdd[i].fn);
|
||||
|
||||
if (++c > MFM_NUM) break;
|
||||
}
|
||||
}
|
||||
pclog("MFM: %d disks loaded.\n", c);
|
||||
mfm_xt_log("MFM: %d disks loaded.\n", c);
|
||||
|
||||
mfm_set_switches(xebec);
|
||||
|
||||
@@ -881,16 +903,16 @@ dtc5150x_init(const device_t *info)
|
||||
mfm_t *dtc = malloc(sizeof(mfm_t));
|
||||
memset(dtc, 0x00, sizeof(mfm_t));
|
||||
|
||||
pclog("MFM: looking for disks..\n");
|
||||
mfm_xt_log("MFM: looking for disks..\n");
|
||||
for (i=0; i<HDD_NUM; i++) {
|
||||
if ((hdd[i].bus == HDD_BUS_MFM) && (hdd[i].mfm_channel < MFM_NUM)) {
|
||||
pclog("Found MFM hard disk on channel %i (%ls)\n", hdd[i].mfm_channel, hdd[i].fn);
|
||||
mfm_xt_log("Found MFM hard disk on channel %i (%ls)\n", hdd[i].mfm_channel, hdd[i].fn);
|
||||
loadhd(dtc, i, hdd[i].mfm_channel, hdd[i].fn);
|
||||
|
||||
if (++c > MFM_NUM) break;
|
||||
}
|
||||
}
|
||||
pclog("MFM: %d disks loaded.\n", c);
|
||||
mfm_xt_log("MFM: %d disks loaded.\n", c);
|
||||
|
||||
dtc->switches = 0xff;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user