MassCommit(tm) to fix the MCA ESDI driver, clean up all RLL-ESDI stuff, rename HDD-related files, and another version of the AHA-1640, which now works. Not done yet, but getting close!

This commit is contained in:
waltje
2017-08-25 02:21:26 -04:00
parent 274cdbc2f0
commit 17b64b064e
38 changed files with 1699 additions and 1157 deletions

View File

@@ -8,7 +8,7 @@
#
# Modified Makefile for Win32 (MinGW32) environment.
#
# Version: @(#)Makefile.mingw 1.0.37 2017/08/23
# Version: @(#)Makefile.mingw 1.0.38 2017/08/24
#
# Authors: Miran Grca, <mgrca8@gmail.com>
# Fred N. van Kempen, <decwiz@yahoo.com>
@@ -197,7 +197,8 @@ DEVOBJ = bugger.o lpt.o $(SERIAL) \
mouse.o mouse_serial.o mouse_ps2.o mouse_bus.o \
fdd.o fdc.o fdi2raw.o \
hdd.o hdd_image.o \
esdi_at.o mfm_at.o mfm_xebec.o hdd_esdi.o ide.o xtide.o piix.o \
hdd_mfm_at.o hdd_mfm_xebec.o hdd_esdi_at.o hdd_esdi_mca.o \
hdd_ide_at.o hdd_ide_xt.o piix.o \
disc.o \
disc_86f.o disc_fdi.o disc_imd.o disc_img.o \
disc_random.o disc_td0.o \
@@ -341,7 +342,7 @@ amstrad.o: ibm.h CPU/cpu.h io.h device.h model.h keyboard.h lpt.h mouse.h
bugger.o: ibm.h io.h bugger.h
cdrom.o: 86box.h cdrom.h ibm.h ide.h piix.h scsi.h timer.h \
cdrom.o: 86box.h cdrom.h ibm.h hdd_ide_at.h piix.h scsi.h timer.h \
WIN/plat_iodev.h
cdrom_dosbox.o: cdrom_dosbox.h
@@ -355,7 +356,7 @@ cdrom_null.o: ibm.h cdrom.h cdrom_ioctl.h
compaq.o: ibm.h CPU/cpu.h mem.h device.h model.h
config.o: cdrom.h config.h device.h disc.h fdc.h fdd.h ibm.h \
CPU/cpu.h gameport.h ide.h hdd.h model.h mouse.h \
CPU/cpu.h gameport.h hdd_ide_at.h hdd.h model.h mouse.h \
NETWORK/network.h nvr.h scsi.h WIN/plat_joystick.h \
WIN/plat_midi.h SOUND/snd_dbopl.h SOUND/snd_mpu401.h \
SOUND/snd_opl.h SOUND/sound.h VIDEO/video.h WIN/win.h \
@@ -370,8 +371,8 @@ disc_86f.o: LZF/lzf.h config.h dma.h disc.h disc_86f.h disc_random.h \
fdc.h fdd.h ibm.h
disc_fdi.o: ibm.h disc.h disc_img.h disc_fdi.h fdc.h fdd.h fdi2raw.h \
ibm.h disc.h disc_imd.h fdc.h fdd.h ibm.h config.h disc.h \
disc_img.h fdc.h fdd.h
disc.h disc_imd.h fdc.h fdd.h config.h disc.h disc_img.h \
fdc.h fdd.h
disc_random.o: disc_random.h
@@ -379,17 +380,14 @@ disc_td0.o: ibm.h disc.h disc_td0.h fdc.h fdd.h
dma.o: ibm.h CPU/x86.h mem.h io.h dma.h
esdi_at.o: ibm.h device.h hdd_image.h io.h mem.h pic.h rom.h timer.h \
esdi_at.h
fdc.o: ibm.h disc.h dma.h fdc.h fdd.h io.h pic.h timer.h
fdc37c665.o: ibm.h disc.h fdc.h fdd.h ide.h io.h lpt.h serial.h \
fdc37c665.h ibm.h disc.h fdc.h fdd.h io.h ide.h \
fdc37c665.o: ibm.h disc.h fdc.h fdd.h hdd_ide_at.h io.h lpt.h serial.h \
fdc37c665.h disc.h fdc.h fdd.h io.h hdd_ide_at.h \
lpt.h serial.h fdc37c669.h
fdc37c932fr.o: ibm.h disc.h fdc.h fdd.h ide.h io.h lpt.h serial.h \
fdc37c932fr.h
fdc37c932fr.o: ibm.h disc.h fdc.h fdd.h hdd_ide_at.h io.h lpt.h \
serial.h fdc37c932fr.h
fdd.o: ibm.h disc.h fdc.h fdd.h
@@ -399,13 +397,26 @@ gameport.o: ibm.h CPU/cpu.h device.h io.h timer.h gameport.h \
joystick_ch_flightstick_pro.h joystick_standard.h \
joystick_sw_pad.h joystick_tm_fcs.h plat_joystick.h
hdd.o: ibm.h CPU/cpu.h device.h hdd.h model.h esdi_at.h \
hdd_esdi.h mfm_at.h mfm_xebec.h xtide.h
hdd.o: ibm.h CPU/cpu.h device.h hdd.h model.h hdd_esdi_at.h \
hdd_esdi_mca.h hdd_mfm_at.h hdd_mfm_xebec.h hdd_ide_xt.h
hdd_image.o: ibm.h ide.h hdd_image.h
hdd_image.o: ibm.h hdd_ide_at.h hdd_image.h
hdd_esdi.o: ibm.h device.h dma.h hdd_image.h io.h mca.h mem.h \
pic.h rom.h timer.h hdd_esdi.h
hdd_esdi_at.o: ibm.h device.h hdd_image.h io.h mem.h pic.h rom.h timer.h \
hdd_esdi_at.h
hdd_esdi_mca.o: ibm.h device.h dma.h hdd_image.h io.h mca.h mem.h \
pic.h rom.h timer.h hdd_esdi_mca.h
hdd_ide_at.o: 86box.h cdrom.h hdd_image.h ibm.h io.h pic.h timer.h \
cdrom.h scsi.h hdd_ide_at.h
hdd_ide_xt.o: ibm.h io.h mem.h rom.h device.h hdd_ide_at.h hdd_ide_xt.h
hdd_mfm_at.o: ibm.h device.h hdd_image.h io.h pic.h timer.h hdd_mfm_at.h
hdd_mfm_xebec.o: ibm.h device.h dma.h hdd_image.h io.h mem.h pic.h rom.h \
timer.h hdd_mfm_xebec.h
headland.o: ibm.h CPU/cpu.h io.h mem.h device.h model.h
@@ -421,8 +432,6 @@ i430vx.o: ibm.h CPU/cpu.h io.h mem.h pci.h device.h model.h
i440fx.o: ibm.h CPU/cpu.h io.h mem.h pci.h device.h model.h
ide.o: 86box.h cdrom.h hdd_image.h ibm.h io.h pic.h timer.h cdrom.h scsi.h ide.h
intel.o: ibm.h CPU/cpu.h io.h mem.h pit.h timer.h intel.h
intel_flash.o: ibm.h CPU/cpu.h device.h mem.h model.h rom.h
@@ -474,21 +483,16 @@ mem.o: ibm.h CPU/cpu.h CPU/x86_ops.h CPU/x86.h config.h \
memregs.o: ibm.h io.h memregs.h
mfm_at.o: ibm.h device.h hdd_image.h io.h pic.h timer.h mfm_at.h
mfm_xebec.o: ibm.h device.h dma.h hdd_image.h io.h mem.h pic.h rom.h timer.h mfm_xebec.h
model.o: ibm.h io.h mem.h rom.h device.h model.h CPU/cpu.h \
mouse.h cdrom.h disc.h dma.h fdc.h \
fdc37c665.h fdc37c669.h fdc37c932fr.h \
gameport.h ide.h intel.h intel_flash.h \
mouse.h cdrom.h disc.h dma.h fdc.h fdc37c665.h fdc37c669.h \
fdc37c932fr.h gameport.h hdd_ide_at.h intel.h intel_flash.h \
keyboard_amstrad.h keyboard_at.h keyboard_olim24.h \
keyboard_pcjr.h keyboard_xt.h lpt.h mem.h memregs.h \
nmi.h nvr.h pc87306.h pci.h pic.h piix.h pit.h ps2_mca.h \
serial.h sis85c471.h sio.h SOUND/snd_ps1.h SOUND/snd_pssj.h \
SOUND/snd_sn76489.h tandy_eeprom.h tandy_rom.h \
VIDEO/vid_pcjr.h VIDEO/vid_tandy.h w83877f.h wd76c10.h \
xtide.h bugger.h
hdd_ide_xt.h bugger.h
mouse.o: ibm.h CPU/cpu.h device.h model.h mouse.h keyboard_olim24.h
@@ -513,21 +517,22 @@ pc.o: 86box.h ibm.h mem.h CPU/cpu.h CPU/x86_ops.h CPU/codegen.h \
dma.h nvr.h pic.h pit.h timer.h device.h model.h disc.h \
disc_86f.h disc_fdi.h disc_imd.h disc_img.h disc_td0.h \
disc_random.h config.h fdc.h fdd.h gameport.h plat_joystick.h \
plat_midi.h hdd.h ide.h cdrom.h cdrom_ioctl.h cdrom_image.h \
cdrom_null.h scsi.h keyboard.h plat_keyboard.h keyboard_at.h \
mouse.h plat_mouse.h NETWORK/network.h serial.h \
plat_midi.h hdd.h hdd_ide_at.h cdrom.h cdrom_ioctl.h \
cdrom_image.h cdrom_null.h scsi.h keyboard.h plat_keyboard.h \
keyboard_at.h mouse.h plat_mouse.h NETWORK/network.h serial.h \
SOUND/sound.h SOUND/snd_cms.h SOUND/snd_dbopl.h \
SOUND/snd_mpu401.h SOUND/snd_opl.h SOUND/snd_gus.h \
SOUND/snd_sb.h SOUND/snd_speaker.h SOUND/snd_ssi2001.h \
VIDEO/video.h VIDEO/vid_voodoo.h WIN/plat_ui.h
pc87306.o: ibm.h disc.h fdc.h fdd.h ide.h io.h lpt.h serial.h pc87306.h
pc87306.o: ibm.h disc.h fdc.h fdd.h hdd_ide_at.h io.h lpt.h serial.h \
pc87306.h
pci.o: ibm.h io.h mem.h pic.h pci.h
pic.o: ibm.h io.h pic.h pit.h
piix.o: ibm.h dma.h ide.h io.h mem.h pci.h piix.h
piix.o: ibm.h dma.h hdd_ide_at.h io.h mem.h pci.h piix.h
pit.o: ibm.h CPU/cpu.h dma.h io.h pic.h pit.h device.h timer.h \
model.h SOUND/snd_speaker.h video/video.h
@@ -561,21 +566,21 @@ scsi_buslogic.o: ibm.h io.h mem.h rom.h dma.h pic.h pci.h timer.h \
device.h scsi.h scsi_device.h scsi_disk.h cdrom.h \
scsi_buslogic.h
scsi_disk.o: 86box.h cdrom.h hdd_image.h ibm.h ide.h piix.h scsi.h \
scsi_disk.o: 86box.h cdrom.h hdd_image.h ibm.h hdd_ide_at.h piix.h scsi.h \
scsi_disk.h timer.h WIN/plat_iodev.h
serial.o: ibm.h io.h pic.h timer.h serial.h plat_serial.h
serial_old.o: ibm.h io.h mouse.h pic.h serial.h timer.h
sio.o: ibm.h cdrom.h disc.h dma.h fdc.h keyboard_at.h ide.h \
io.h mem.h pci.h sio.h
sio.o: ibm.h cdrom.h disc.h dma.h fdc.h keyboard_at.h io.h mem.h \
hdd_ide_at.h pci.h sio.h
sis496.o: ibm.h CPU/cpu.h io.h mem.h pci.h device.h model.h
sis50x.o: ibm.h device.h io.h mem.h pci.h sis50x.h
sis85c471.o: ibm.h ide.h disc.h fdc.h fdd.h io.h lpt.h serial.h sis85c471.h
sis85c471.o: ibm.h hdd_ide_at.h disc.h fdc.h fdd.h io.h lpt.h serial.h sis85c471.h
superio_detect.o: ibm.h io.h disc.h fdd.h fdc.h superio_detect.h
@@ -591,8 +596,6 @@ w83877f.o: ibm.h disc.h fdc.h fdd.h io.h lpt.h serial.h w83877f.h
wd76c10.o: ibm.h disc.h fdc.h io.h mem.h serial.h wd76c10.h
xtide.o: ibm.h io.h mem.h rom.h device.h ide.h xtide.h
386.o: ibm.h CPU/cpu.h CPU/x86.h CPU/x87.h mem.h disc.h fdc.h pic.h timer.h CPU/386_common.h
386_dynarec.o: ibm.h CPU/cpu.h CPU/x86.h CPU/x86_ops.h CPU/x87.h mem.h CPU/codegen.h disc.h fdc.h pic.h timer.h CPU/386_common.h \
@@ -772,7 +775,7 @@ video.o: ibm.h CPU/cpu.h io.h mem.h rom.h config.h device.h timer.h WIN/plat_th
VIDEO/vid_pc200.h VIDEO/vid_pcjr.h VIDEO/vid_ps1_svga.h VIDEO/vid_s3.h VIDEO/vid_s3_virge.h VIDEO/vid_tandy.h \
VIDEO/vid_tandysl.h VIDEO/vid_tgui9440.h VIDEO/vid_tvga.h VIDEO/vid_vga.h VIDEO/vid_wy700.h
win.o: 86box.h device.h disc.h fdd.h hdd.h ibm.h CPU/cpu.h mem.h rom.h nvr.h config.h model.h ide.h cdrom.h cdrom_null.h \
win.o: 86box.h device.h disc.h fdd.h hdd.h ibm.h CPU/cpu.h mem.h rom.h nvr.h config.h model.h hdd_ide_at.h cdrom.h cdrom_null.h \
cdrom_ioctl.h cdrom_image.h scsi.h scsi_disk.h VIDEO/video.h VIDEO/vid_ega.h mouse.h SOUND/sound.h SOUND/snd_dbopl.h \
WIN/plat_keyboard.h WIN/plat_iodev.h WIN/plat_mouse.h WIN/plat_midi.h WIN/plat_thread.h WIN/plat_ticks.h WIN/plat_ui.h \
WIN/resource.h WIN/win.h WIN/win_cgapal.h WIN/win_ddraw.h WIN/win_d3d.h WIN/win_language.h
@@ -799,7 +802,7 @@ win_joystickconfig.o: ibm.h config.h device.h gameport.h WIN/plat_joystick.h WIN
win_keyboard.o: device.h WIN/plat_keyboard.h WIN/resource.h WIN/win.h
win_language.o: ibm.h device.h ide.h WIN/plat_ui.h WIN/resource.h WIN/win.h WIN/win_language.h io.h mem.h rom.h device.h ide.h xtide.h
win_language.o: ibm.h device.h WIN/plat_ui.h WIN/resource.h WIN/win.h WIN/win_language.h
win_midi.o: ibm.h config.h SOUND/midi.h WIN/plat_midi.h WIN/resource.h
@@ -809,7 +812,7 @@ win_opendir.o: ibm.h WIN/plat_dir.h WIN/resource.h
win_serial.o: WIN/plat_thread.h WIN/plat_serial.h WIN/resource.h
win_settings.o: ibm.h mem.h CPU/cpu.h nvr.h device.h model.h cdrom.h disc.h fdd.h hdd.h ide.h scsi.h NETWORK/network.h SOUND/midi.h \
win_settings.o: ibm.h mem.h CPU/cpu.h nvr.h device.h model.h cdrom.h disc.h fdd.h hdd.h hdd_ide_at.h scsi.h NETWORK/network.h SOUND/midi.h \
SOUND/sound.h SOUND/snd_dbopl.h SOUND/snd_mpu401.h VIDEO/video.h VIDEO/vid_voodoo.h gameport.h mouse.h WIN/plat_midi.h \
WIN/resource.h WIN/win.h WIN/win_language.h

View File

@@ -8,11 +8,11 @@
*
* Windows resource script.
*
* Version: @(#)86Box.rc 1.0.5 2017/08/08
* Version: @(#)86Box.rc 1.0.6 2017/08/24
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include <inttypes.h>
#define IN_RESOURCE_H
@@ -833,10 +833,10 @@ BEGIN
IDS_4111 "This image exists and will be overwritten.\nAre you sure you want to use it?"
IDS_4112 "Please enter a valid file name"
IDS_4113 "Remember to partition and format the new drive"
IDS_4114 "MFM or ESDI CD-ROM drives never existed"
IDS_4114 "MFM/RLL or ESDI CD-ROM drives never existed"
IDS_4115 "Removable disk %i (SCSI): %ws"
IDS_4352 "MFM"
IDS_4352 "MFM/RLL"
IDS_4353 "XT IDE"
IDS_4354 "ESDI"
IDS_4355 "IDE (PIO-only)"
@@ -844,7 +844,7 @@ BEGIN
IDS_4357 "SCSI"
IDS_4358 "SCSI (removable)"
IDS_4608 "MFM (%01i:%01i)"
IDS_4608 "MFM/RLL (%01i:%01i)"
IDS_4609 "XT IDE (%01i:%01i)"
IDS_4610 "ESDI (%01i:%01i)"
IDS_4611 "IDE (PIO-only) (%01i:%01i)"

View File

@@ -9,14 +9,15 @@
* Windows resource defines.
*
* NOTE: FIXME: Strings 2176 and 2193 are same.
* NOTE: FIXME: string 2095 not in use.
*
* Version: @(#)resource.h 1.0.4 2017/06/16
* Version: @(#)resource.h 1.0.5 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempem, <decwiz@yahoo.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#ifndef WIN_RESOURCE_H
# define WIN_RESOURCE_H
@@ -245,7 +246,7 @@
#define IDS_2092 2092 // "Bus"
#define IDS_2093 2093 // "DMA"
#define IDS_2094 2094 // "KB"
#define IDS_2095 2095 // "MFM, RLL, or ESDI CD-ROM.."
#define IDS_2095 2095
#define IDS_2096 2096 // "Slave"
#define IDS_2097 2097 // "SCSI (ID %s, LUN %s)"
#define IDS_2098 2098 // "Adapter Type"
@@ -317,7 +318,7 @@
#define IDS_2164 2164 // "Invalid number of sectors.."
#define IDS_2165 2165 // "MFM"
#define IDS_2166 2166 // "XT IDE"
#define IDS_2167 2167 // "RLL"
#define IDS_2167 2167 // "ESDI"
#define IDS_2168 2168 // "IDE (PIO-only)"
#define IDS_2169 2169 // "%01i:%01i"
#define IDS_2170 2170 // "%01i:%01i"

View File

@@ -8,7 +8,7 @@
*
* The Emulator's Windows core.
*
* Version: @(#)win.c 1.0.4 2017/08/23
* Version: @(#)win.c 1.0.6 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -33,7 +33,7 @@
#include "../nvr.h"
#include "../config.h"
#include "../model.h"
#include "../ide.h"
#include "../hdd_ide_at.h"
#include "../cdrom.h"
#include "../cdrom_null.h"
#include "../cdrom_ioctl.h"
@@ -1056,7 +1056,7 @@ void update_status_bar_panes(HWND hwnds)
int edge = 0;
int c_mfm = 0;
int c_rll = 0;
int c_esdi = 0;
int c_xtide = 0;
int c_ide_pio = 0;
int c_ide_dma = 0;
@@ -1067,7 +1067,7 @@ void update_status_bar_panes(HWND hwnds)
sb_ready = 0;
c_mfm = count_hard_disks(HDD_BUS_MFM);
c_rll = count_hard_disks(HDD_BUS_RLL);
c_esdi = count_hard_disks(HDD_BUS_ESDI);
c_xtide = count_hard_disks(HDD_BUS_XTIDE);
c_ide_pio = count_hard_disks(HDD_BUS_IDE_PIO_ONLY);
c_ide_dma = count_hard_disks(HDD_BUS_IDE_PIO_AND_DMA);
@@ -1148,7 +1148,7 @@ void update_status_bar_panes(HWND hwnds)
{
sb_parts++;
}
if (c_rll && !memcmp(hdd_controller_name, "esdi", 4))
if (c_esdi && !memcmp(hdd_controller_name, "esdi", 4))
{
sb_parts++;
}
@@ -1240,11 +1240,11 @@ void update_status_bar_panes(HWND hwnds)
sb_part_meanings[sb_parts] = SB_HDD | HDD_BUS_MFM;
sb_parts++;
}
if (c_rll && !memcmp(hdd_controller_name, "esdi", 4))
if (c_esdi && !memcmp(hdd_controller_name, "esdi", 4))
{
edge += SB_ICON_WIDTH;
iStatusWidths[sb_parts] = edge;
sb_part_meanings[sb_parts] = SB_HDD | HDD_BUS_RLL;
sb_part_meanings[sb_parts] = SB_HDD | HDD_BUS_ESDI;
sb_parts++;
}
if (c_xtide && !memcmp(hdd_controller_name, "xtide", 5))

View File

@@ -8,12 +8,12 @@
*
* Windows localization core.
*
* Version: @(#)win_language.c 1.0.0 2017/05/30
* Version: @(#)win_language.c 1.0.1 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include <inttypes.h>
#define UNICODE
@@ -27,7 +27,6 @@
#include "../ibm.h"
#include "../device.h"
#include "../ide.h"
#include "plat_ui.h"
#include "win.h"
#include "win_language.h"

View File

@@ -8,10 +8,10 @@
*
* Windows 86Box Settings dialog handler.
*
* Version: @(#)win_settings.c 1.0.7 2017/08/23
* Version: @(#)win_settings.c 1.0.8 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#define UNICODE
#define BITMAP WINDOWS_BITMAP
@@ -31,7 +31,7 @@
#include "../disc.h"
#include "../fdd.h"
#include "../hdd.h"
#include "../ide.h"
#include "../hdd_ide_at.h"
#include "../scsi.h"
#include "../NETWORK/network.h"
#include "../SOUND/sound.h"
@@ -1980,7 +1980,7 @@ static void recalc_location_controls(HWND hdlg, int is_add_dlg)
EnableWindow(h, TRUE);
SendMessage(h, CB_SETCURSEL, is_add_dlg ? new_hdc.xtide_channel : temp_hdc[hdlv_current_sel].xtide_channel, 0);
break;
case HDD_BUS_RLL: /* RLL */
case HDD_BUS_ESDI: /* ESDI */
h = GetDlgItem(hdlg, IDT_1722);
ShowWindow(h, SW_SHOW);
EnableWindow(h, TRUE);
@@ -1988,7 +1988,7 @@ static void recalc_location_controls(HWND hdlg, int is_add_dlg)
h = GetDlgItem(hdlg, IDC_COMBO_HD_CHANNEL);
ShowWindow(h, SW_SHOW);
EnableWindow(h, TRUE);
SendMessage(h, CB_SETCURSEL, is_add_dlg ? new_hdc.rll_channel : temp_hdc[hdlv_current_sel].rll_channel, 0);
SendMessage(h, CB_SETCURSEL, is_add_dlg ? new_hdc.esdi_channel : temp_hdc[hdlv_current_sel].esdi_channel, 0);
break;
case HDD_BUS_IDE_PIO_ONLY: /* IDE (PIO-only) */
case HDD_BUS_IDE_PIO_AND_DMA: /* IDE (PIO and DMA) */
@@ -2050,7 +2050,7 @@ static void recalc_next_free_id(HWND hdlg)
int i;
int c_mfm = 0;
int c_rll = 0;
int c_esdi = 0;
int c_xtide = 0;
int c_ide_pio = 0;
int c_ide_dma = 0;
@@ -2065,9 +2065,9 @@ static void recalc_next_free_id(HWND hdlg)
{
c_mfm++;
}
else if (temp_hdc[i].bus == HDD_BUS_RLL)
else if (temp_hdc[i].bus == HDD_BUS_ESDI)
{
c_rll++;
c_esdi++;
}
else if (temp_hdc[i].bus == HDD_BUS_XTIDE)
{
@@ -2104,7 +2104,7 @@ static void recalc_next_free_id(HWND hdlg)
enable_add = enable_add || (next_free_id >= 0);
/* pclog("Enable add: %i\n", enable_add); */
enable_add = enable_add && ((c_mfm < MFM_NUM) || (c_rll < RLL_NUM) || (c_xtide < XTIDE_NUM) || (c_ide_pio < IDE_NUM) || (c_ide_dma < IDE_NUM) || (c_scsi < SCSI_NUM));
enable_add = enable_add && ((c_mfm < MFM_NUM) || (c_esdi < ESDI_NUM) || (c_xtide < XTIDE_NUM) || (c_ide_pio < IDE_NUM) || (c_ide_dma < IDE_NUM) || (c_scsi < SCSI_NUM));
/* pclog("Enable add: %i\n", enable_add); */
h = GetDlgItem(hdlg, IDC_BUTTON_HDD_ADD_NEW);
@@ -2131,7 +2131,7 @@ static void recalc_next_free_id(HWND hdlg)
h = GetDlgItem(hdlg, IDC_BUTTON_HDD_REMOVE);
if ((c_mfm == 0) && (c_rll == 0) && (c_xtide == 0) && (c_ide_pio == 0) && (c_ide_dma == 0) && (c_scsi == 0))
if ((c_mfm == 0) && (c_esdi == 0) && (c_xtide == 0) && (c_ide_pio == 0) && (c_ide_dma == 0) && (c_scsi == 0))
{
EnableWindow(h, FALSE);
}
@@ -2162,8 +2162,8 @@ static void win_settings_hard_disks_update_item(HWND hwndList, int i, int column
case HDD_BUS_XTIDE:
wsprintf(szText, win_language_get_string_from_id(IDS_4609), temp_hdc[i].xtide_channel >> 1, temp_hdc[i].xtide_channel & 1);
break;
case HDD_BUS_RLL:
wsprintf(szText, win_language_get_string_from_id(IDS_4610), temp_hdc[i].rll_channel >> 1, temp_hdc[i].rll_channel & 1);
case HDD_BUS_ESDI:
wsprintf(szText, win_language_get_string_from_id(IDS_4610), temp_hdc[i].esdi_channel >> 1, temp_hdc[i].esdi_channel & 1);
break;
case HDD_BUS_IDE_PIO_ONLY:
wsprintf(szText, win_language_get_string_from_id(IDS_4611), temp_hdc[i].ide_channel >> 1, temp_hdc[i].ide_channel & 1);
@@ -2246,8 +2246,8 @@ static BOOL win_settings_hard_disks_recalc_list(HWND hwndList)
case HDD_BUS_XTIDE:
wsprintf(szText, win_language_get_string_from_id(IDS_4609), temp_hdc[i].xtide_channel >> 1, temp_hdc[i].xtide_channel & 1);
break;
case HDD_BUS_RLL:
wsprintf(szText, win_language_get_string_from_id(IDS_4610), temp_hdc[i].rll_channel >> 1, temp_hdc[i].rll_channel & 1);
case HDD_BUS_ESDI:
wsprintf(szText, win_language_get_string_from_id(IDS_4610), temp_hdc[i].esdi_channel >> 1, temp_hdc[i].esdi_channel & 1);
break;
case HDD_BUS_IDE_PIO_ONLY:
wsprintf(szText, win_language_get_string_from_id(IDS_4611), temp_hdc[i].ide_channel >> 1, temp_hdc[i].ide_channel & 1);
@@ -2650,9 +2650,9 @@ static BOOL CALLBACK win_settings_hard_disks_add_proc(HWND hdlg, UINT message, W
h = GetDlgItem(hdlg, IDC_COMBO_HD_CHANNEL);
hdc_ptr->mfm_channel = SendMessage(h, CB_GETCURSEL, 0, 0);
break;
case HDD_BUS_RLL:
case HDD_BUS_ESDI:
h = GetDlgItem(hdlg, IDC_COMBO_HD_CHANNEL);
hdc_ptr->rll_channel = SendMessage(h, CB_GETCURSEL, 0, 0);
hdc_ptr->esdi_channel = SendMessage(h, CB_GETCURSEL, 0, 0);
break;
case HDD_BUS_XTIDE:
h = GetDlgItem(hdlg, IDC_COMBO_HD_CHANNEL);
@@ -3093,7 +3093,7 @@ hdd_add_file_open_error:
max_hpc = 15;
max_tracks = 1023;
break;
case HDD_BUS_RLL:
case HDD_BUS_ESDI:
case HDD_BUS_XTIDE:
max_spt = 63;
max_hpc = 16;
@@ -3315,9 +3315,9 @@ hd_bus_skip:
{
temp_hdc[hdlv_current_sel].mfm_channel = SendMessage(h, CB_GETCURSEL, 0, 0);
}
else if (temp_hdc[hdlv_current_sel].bus == HDD_BUS_RLL)
else if (temp_hdc[hdlv_current_sel].bus == HDD_BUS_ESDI)
{
temp_hdc[hdlv_current_sel].rll_channel = SendMessage(h, CB_GETCURSEL, 0, 0);
temp_hdc[hdlv_current_sel].esdi_channel = SendMessage(h, CB_GETCURSEL, 0, 0);
}
else if (temp_hdc[hdlv_current_sel].bus == HDD_BUS_XTIDE)
{

View File

@@ -9,24 +9,23 @@
* Implementation of the CD-ROM drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage.
*
* Version: @(#)cdrom.c 1.0.2 2017/08/23
* Version: @(#)cdrom.c 1.0.3 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "86box.h"
#include "cdrom.h"
#include "ibm.h"
#include "ide.h"
#include "piix.h"
#include "scsi.h"
#include "timer.h"
#include "hdd_ide_at.h"
#include "WIN/plat_iodev.h"
/* Bits of 'status' */

View File

@@ -8,15 +8,15 @@
*
* Configuration file handler.
*
* Version: @(#)config.c 1.0.1 2017/08/23
* Version: @(#)config.c 1.0.2 2017/08/24
*
* Authors: Sarah Walker,
* Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
* Overdoze,
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2017-2017 Fred N. van Kempen.
* Copyright 2016,2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.
*
* NOTE: Forcing config files to be in Unicode encoding breaks it on
* Windows XP, and possibly also Vista. Use -DANSI_CFG for use
@@ -37,8 +37,8 @@
#include "ibm.h"
#include "CPU/cpu.h"
#include "gameport.h"
#include "ide.h"
#include "hdd.h"
#include "hdd_ide_at.h"
#include "model.h"
#include "mouse.h"
#include "NETWORK/network.h"
@@ -1172,18 +1172,12 @@ static int config_string_to_bus(char *str, int cdrom)
return HDD_BUS_MFM;
}
if (!strcmp(str, "rll"))
/* FIXME: delete 'rll' in a year or so.. --FvK */
if (!strcmp(str, "esdi") || !strcmp(str, "rll"))
{
if (cdrom) goto no_mfm_cdrom;
return HDD_BUS_RLL;
}
if (!strcmp(str, "esdi"))
{
if (cdrom) goto no_mfm_cdrom;
return HDD_BUS_RLL;
return HDD_BUS_ESDI;
}
if (!strcmp(str, "ide_pio_only"))
@@ -1362,7 +1356,7 @@ static void loadconfig_hard_disks(void)
max_hpc = 15;
max_tracks = 1023;
break;
case HDD_BUS_RLL:
case HDD_BUS_ESDI:
case HDD_BUS_XTIDE:
max_spt = 63;
max_hpc = 16;
@@ -1417,11 +1411,11 @@ static void loadconfig_hard_disks(void)
config_delete_var(cat, temps);
}
/* RLL (ESDI) */
sprintf(temps, "hdd_%02i_rll_channel", c + 1);
if (hdc[c].bus == HDD_BUS_RLL)
/* ESDI */
sprintf(temps, "hdd_%02i_esdi_channel", c + 1);
if (hdc[c].bus == HDD_BUS_ESDI)
{
hdc[c].rll_channel = !!config_get_int(cat, temps, c & 1);
hdc[c].esdi_channel = !!config_get_int(cat, temps, c & 1);
}
else
{
@@ -2296,8 +2290,8 @@ static char *config_bus_to_string(int bus, int cdrom)
case HDD_BUS_XTIDE:
return "xtide";
break;
case HDD_BUS_RLL:
return "rll";
case HDD_BUS_ESDI:
return "esdi";
break;
case HDD_BUS_IDE_PIO_ONLY:
return cdrom ? "atapi_pio_only" : "ide_pio_only";
@@ -2361,14 +2355,14 @@ static void saveconfig_hard_disks(void)
config_set_int(cat, temps, hdc[c].xtide_channel);
}
sprintf(temps, "hdd_%02i_rll_channel", c + 1);
if (!hard_disk_is_valid(c) || (hdc[c].bus != HDD_BUS_RLL))
sprintf(temps, "hdd_%02i_esdi_channel", c + 1);
if (!hard_disk_is_valid(c) || (hdc[c].bus != HDD_BUS_ESDI))
{
config_delete_var(cat, temps);
}
else
{
config_set_int(cat, temps, hdc[c].rll_channel);
config_set_int(cat, temps, hdc[c].esdi_channel);
}
sprintf(temps, "hdd_%02i_ide_channel", c + 1);

View File

@@ -9,12 +9,12 @@
* Implementation of the generic device interface to handle
* all devices attached to the emulator.
*
* Version: @(#)device.c 1.0.1 2017/06/03
* Version: @(#)device.c 1.0.2 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2016 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include "ibm.h"
#include "CPU/cpu.h"
@@ -24,30 +24,34 @@
#include "SOUND/sound.h"
static void *device_priv[256];
static device_t *devices[256];
#define DEVICE_MAX 256 /* max # of devices */
static void *device_priv[DEVICE_MAX];
static device_t *devices[DEVICE_MAX];
static device_t *current_device;
void device_init(void)
{
memset(devices, 0, sizeof(devices));
memset(devices, 0x00, sizeof(devices));
}
void device_add(device_t *d)
{
int c = 0;
void *priv = NULL;
int c = 0;
void *priv = NULL;
while (devices[c] != NULL && c < 256)
while (devices[c] != NULL && c < 256)
c++;
if (c >= 256)
if (c >= DEVICE_MAX)
fatal("device_add : too many devices\n");
current_device = d;
current_device = d;
if (d->init != NULL)
if (d->init != NULL)
{
priv = d->init();
if (priv == NULL)
@@ -58,11 +62,12 @@ void device_add(device_t *d)
device_priv[c] = priv;
}
void device_close_all()
void device_close_all(void)
{
int c;
for (c = 0; c < 256; c++)
for (c=0; c<DEVICE_MAX; c++)
{
if (devices[c] != NULL)
{
@@ -73,11 +78,12 @@ void device_close_all()
}
}
void *device_get_priv(device_t *d)
{
int c;
for (c = 0; c < 256; c++)
for (c=0; c<DEVICE_MAX; c++)
{
if (devices[c] != NULL)
{
@@ -89,6 +95,7 @@ void *device_get_priv(device_t *d)
return NULL;
}
int device_available(device_t *d)
{
#ifdef RELEASE_BUILD
@@ -101,11 +108,12 @@ int device_available(device_t *d)
return 1;
}
void device_speed_changed(void)
{
int c;
for (c = 0; c < 256; c++)
for (c=0; c<DEVICE_MAX; c++)
{
if (devices[c] != NULL)
{
@@ -119,11 +127,12 @@ void device_speed_changed(void)
sound_speed_changed();
}
void device_force_redraw(void)
{
int c;
for (c = 0; c < 256; c++)
for (c=0; c<DEVICE_MAX; c++)
{
if (devices[c] != NULL)
{
@@ -135,11 +144,12 @@ void device_force_redraw(void)
}
}
char *device_add_status_info(char *s, int max_len)
{
int c;
for (c = 0; c < 256; c++)
for (c=0; c<DEVICE_MAX; c++)
{
if (devices[c] != NULL)
{
@@ -151,11 +161,12 @@ char *device_add_status_info(char *s, int max_len)
return NULL;
}
int device_get_config_int(char *s)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_int(current_device->name, s, config->default_int);
@@ -165,11 +176,12 @@ int device_get_config_int(char *s)
return 0;
}
int device_get_config_int_ex(char *s, int default_int)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_int(current_device->name, s, default_int);
@@ -179,11 +191,12 @@ int device_get_config_int_ex(char *s, int default_int)
return default_int;
}
int device_get_config_hex16(char *s)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_hex16(current_device->name, s, config->default_int);
@@ -193,11 +206,12 @@ int device_get_config_hex16(char *s)
return 0;
}
int device_get_config_hex20(char *s)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_hex20(current_device->name, s, config->default_int);
@@ -207,11 +221,12 @@ int device_get_config_hex20(char *s)
return 0;
}
int device_get_config_mac(char *s, int default_int)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_mac(current_device->name, s, default_int);
@@ -221,11 +236,12 @@ int device_get_config_mac(char *s, int default_int)
return default_int;
}
void device_set_config_int(char *s, int val)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
{
@@ -235,14 +251,14 @@ void device_set_config_int(char *s, int val)
config++;
}
return;
}
void device_set_config_hex16(char *s, int val)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
{
@@ -252,14 +268,14 @@ void device_set_config_hex16(char *s, int val)
config++;
}
return;
}
void device_set_config_hex20(char *s, int val)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
{
@@ -269,14 +285,14 @@ void device_set_config_hex20(char *s, int val)
config++;
}
return;
}
void device_set_config_mac(char *s, int val)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
{
@@ -286,14 +302,14 @@ void device_set_config_mac(char *s, int val)
config++;
}
return;
}
char *device_get_config_string(char *s)
{
device_config_t *config = current_device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_string(current_device->name, s, config->default_string);
@@ -303,6 +319,7 @@ char *device_get_config_string(char *s)
return NULL;
}
int model_get_config_int(char *s)
{
device_t *device = model_getdevice(model);
@@ -313,7 +330,7 @@ int model_get_config_int(char *s)
config = device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_int(device->name, s, config->default_int);
@@ -323,6 +340,7 @@ int model_get_config_int(char *s)
return 0;
}
char *model_get_config_string(char *s)
{
device_t *device = model_getdevice(model);
@@ -333,7 +351,7 @@ char *model_get_config_string(char *s)
config = device->config;
while (config->type != -1)
while (config && config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_string(device->name, s, config->default_string);

View File

@@ -8,7 +8,7 @@
*
* Implementation of the SMC FDC37C665 Super I/O Chip.
*
* Version: @(#)fdc37c665.c 1.0.1 2017/08/23
* Version: @(#)fdc37c665.c 1.0.2 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -16,14 +16,13 @@
* Copyright 2016-2017 Miran Grca.
*/
#include "ibm.h"
#include "disc.h"
#include "fdc.h"
#include "fdd.h"
#include "ide.h"
#include "io.h"
#include "lpt.h"
#include "serial.h"
#include "hdd_ide_at.h"
#include "fdc37c665.h"
static uint8_t fdc37c665_lock[2];

View File

@@ -8,21 +8,19 @@
*
* Implementation of the SMC FDC37C669 Super I/O Chip.
*
* Version: @(#)fdc37c669.c 1.0.0 2017/05/30
* Version: @(#)fdc37c669.c 1.0.1 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include "ibm.h"
#include "disc.h"
#include "fdc.h"
#include "fdd.h"
#include "io.h"
#include "ide.h"
#include "lpt.h"
#include "serial.h"
#include "hdd_ide_at.h"
#include "fdc37c669.h"
static int fdc37c669_locked;

View File

@@ -8,21 +8,19 @@
*
* Implementation of the SMC FDC37C932FR Super I/O Chip.
*
* Version: @(#)fdc37c932fr.c 1.0.0 2017/05/30
* Version: @(#)fdc37c932fr.c 1.0.1 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include "ibm.h"
#include "disc.h"
#include "fdc.h"
#include "fdd.h"
#include "ide.h"
#include "io.h"
#include "lpt.h"
#include "serial.h"
#include "hdd_ide_at.h"
#include "fdc37c932fr.h"
static int fdc37c932fr_locked;

View File

@@ -4,11 +4,11 @@
#include "hdd.h"
#include "model.h"
#include "esdi_at.h"
#include "hdd_esdi.h"
#include "mfm_at.h"
#include "mfm_xebec.h"
#include "xtide.h"
#include "hdd_esdi_at.h"
#include "hdd_esdi_mca.h"
#include "hdd_mfm_at.h"
#include "hdd_mfm_xebec.h"
#include "hdd_ide_xt.h"
char hdd_controller_name[16];

View File

@@ -1,883 +0,0 @@
#include <malloc.h>
#include "ibm.h"
#include "device.h"
#include "dma.h"
#include "hdd_image.h"
#include "io.h"
#include "mca.h"
#include "mem.h"
#include "pic.h"
#include "rom.h"
#include "timer.h"
#include "hdd_esdi.h"
#define ESDI_TIME (2000 * TIMER_USEC)
#define CMD_ADAPTER 0
typedef struct esdi_drive_t
{
int spt, hpc;
int tracks;
int sectors;
int present;
int hdc_num;
} esdi_drive_t;
typedef struct esdi_t
{
rom_t bios_rom;
uint8_t basic_ctrl;
uint8_t status;
uint8_t irq_status;
int irq_in_progress;
int cmd_req_in_progress;
int cmd_pos;
uint16_t cmd_data[4];
int cmd_dev;
int status_pos, status_len;
uint16_t status_data[256];
int data_pos;
uint16_t data[256];
uint16_t sector_buffer[256][256];
int sector_pos;
int sector_count;
int command;
int cmd_state;
int in_reset;
int callback;
uint32_t rba;
struct
{
int req_in_progress;
} cmds[3];
esdi_drive_t drives[2];
uint8_t pos_regs[8];
} esdi_t;
#define STATUS_DMA_ENA (1 << 7)
#define STATUS_IRQ_PENDING (1 << 6)
#define STATUS_CMD_IN_PROGRESS (1 << 5)
#define STATUS_BUSY (1 << 4)
#define STATUS_STATUS_OUT_FULL (1 << 3)
#define STATUS_CMD_IR_FULL (1 << 2)
#define STATUS_TRANSFER_REQ (1 << 1)
#define STATUS_IRQ (1 << 0)
#define CTRL_RESET (1 << 7)
#define CTRL_DMA_ENA (1 << 1)
#define CTRL_IRQ_ENA (1 << 0)
#define IRQ_HOST_ADAPTER (7 << 5)
#define IRQ_DEVICE_0 (0 << 5)
#define IRQ_CMD_COMPLETE_SUCCESS 0x1
#define IRQ_RESET_COMPLETE 0xa
#define IRQ_DATA_TRANSFER_READY 0xb
#define IRQ_CMD_COMPLETE_FAILURE 0xc
#define ATTN_DEVICE_SEL (7 << 5)
#define ATTN_HOST_ADAPTER (7 << 5)
#define ATTN_DEVICE_0 (0 << 5)
#define ATTN_DEVICE_1 (1 << 5)
#define ATTN_REQ_MASK 0xf
#define ATTN_CMD_REQ 1
#define ATTN_EOI 2
#define ATTN_RESET 4
#define CMD_SIZE_4 (1 << 14)
#define CMD_DEVICE_SEL (7 << 5)
#define CMD_MASK 0x1f
#define CMD_READ 0x01
#define CMD_WRITE 0x02
#define CMD_READ_VERIFY 0x03
#define CMD_WRITE_VERIFY 0x04
#define CMD_SEEK 0x05
#define CMD_GET_DEV_CONFIG 0x09
#define CMD_GET_POS_INFO 0x0a
#define STATUS_LEN(x) ((x) << 8)
#define STATUS_DEVICE_HOST_ADAPTER (7 << 5)
static __inline void esdi_set_irq(esdi_t *esdi)
{
if (esdi->basic_ctrl & CTRL_IRQ_ENA)
picint(1 << 14);
}
static __inline void esdi_clear_irq()
{
picintc(1 << 14);
}
static uint8_t esdi_read(uint16_t port, void *p)
{
esdi_t *esdi = (esdi_t *)p;
uint8_t temp = 0xff;
switch (port)
{
case 0x3512: /*Basic status register*/
temp = esdi->status;
break;
case 0x3513: /*IRQ status*/
esdi->status &= ~STATUS_IRQ;
temp = esdi->irq_status;
break;
default:
fatal("esdi_read port=%04x\n", port);
}
return temp;
}
static void esdi_write(uint16_t port, uint8_t val, void *p)
{
esdi_t *esdi = (esdi_t *)p;
switch (port)
{
case 0x3512: /*Basic control register*/
if ((esdi->basic_ctrl & CTRL_RESET) && !(val & CTRL_RESET))
{
esdi->in_reset = 1;
esdi->callback = ESDI_TIME * 50;
esdi->status = STATUS_BUSY;
}
esdi->basic_ctrl = val;
if (!(esdi->basic_ctrl & CTRL_IRQ_ENA))
picintc(1 << 14);
break;
case 0x3513: /*Attention register*/
switch (val & ATTN_DEVICE_SEL)
{
case ATTN_HOST_ADAPTER:
switch (val & ATTN_REQ_MASK)
{
case ATTN_CMD_REQ:
if (esdi->cmd_req_in_progress)
fatal("Try to start command on in_progress adapter\n");
esdi->cmd_req_in_progress = 1;
esdi->cmd_dev = ATTN_HOST_ADAPTER;
esdi->status |= STATUS_BUSY;
esdi->cmd_pos = 0;
break;
case ATTN_EOI:
esdi->irq_in_progress = 0;
esdi->status &= ~STATUS_IRQ;
esdi_clear_irq();
break;
case ATTN_RESET:
esdi->in_reset = 1;
esdi->callback = ESDI_TIME * 50;
esdi->status = STATUS_BUSY;
break;
default:
fatal("Bad attention request %02x\n", val);
}
break;
case ATTN_DEVICE_0:
switch (val & ATTN_REQ_MASK)
{
case ATTN_CMD_REQ:
if (esdi->cmd_req_in_progress)
fatal("Try to start command on in_progress device0\n");
esdi->cmd_req_in_progress = 1;
esdi->cmd_dev = ATTN_DEVICE_0;
esdi->status |= STATUS_BUSY;
esdi->cmd_pos = 0;
break;
case ATTN_EOI:
esdi->irq_in_progress = 0;
esdi->status &= ~STATUS_IRQ;
esdi_clear_irq();
break;
default:
fatal("Bad attention request %02x\n", val);
}
break;
case ATTN_DEVICE_1:
switch (val & ATTN_REQ_MASK)
{
case ATTN_CMD_REQ:
if (esdi->cmd_req_in_progress)
fatal("Try to start command on in_progress device0\n");
esdi->cmd_req_in_progress = 1;
esdi->cmd_dev = ATTN_DEVICE_1;
esdi->status |= STATUS_BUSY;
esdi->cmd_pos = 0;
break;
case ATTN_EOI:
esdi->irq_in_progress = 0;
esdi->status &= ~STATUS_IRQ;
esdi_clear_irq();
break;
default:
fatal("Bad attention request %02x\n", val);
}
break;
default:
fatal("Attention to unknown device %02x\n", val);
}
break;
default:
fatal("esdi_write port=%04x val=%02x\n", port, val);
}
}
static uint16_t esdi_readw(uint16_t port, void *p)
{
esdi_t *esdi = (esdi_t *)p;
uint16_t temp = 0xffff;
switch (port)
{
case 0x3510: /*Status Interface Register*/
if (esdi->status_pos >= esdi->status_len)
return 0;
temp = esdi->status_data[esdi->status_pos++];
if (esdi->status_pos >= esdi->status_len)
{
esdi->status &= ~STATUS_STATUS_OUT_FULL;
esdi->status_pos = esdi->status_len = 0;
}
break;
default:
fatal("esdi_readw port=%04x\n", port);
}
return temp;
}
static void esdi_writew(uint16_t port, uint16_t val, void *p)
{
esdi_t *esdi = (esdi_t *)p;
switch (port)
{
case 0x3510: /*Command Interface Register*/
if (esdi->cmd_pos >= 4)
fatal("CIR pos 4\n");
esdi->cmd_data[esdi->cmd_pos++] = val;
if ( ((esdi->cmd_data[0] & CMD_SIZE_4) && esdi->cmd_pos == 4) ||
(!(esdi->cmd_data[0] & CMD_SIZE_4) && esdi->cmd_pos == 2))
{
esdi->cmd_pos = 0;
esdi->cmd_req_in_progress = 0;
esdi->cmd_state = 0;
if ((esdi->cmd_data[0] & CMD_DEVICE_SEL) != esdi->cmd_dev)
fatal("Command device mismatch with attn\n");
esdi->command = esdi->cmd_data[0] & CMD_MASK;
esdi->callback = ESDI_TIME;
esdi->status = STATUS_BUSY;
esdi->data_pos = 0;
}
break;
default:
fatal("esdi_writew port=%04x val=%04x\n", port, val);
}
}
static void cmd_unsupported(esdi_t *esdi)
{
esdi->status_len = 9;
esdi->status_data[0] = esdi->command | STATUS_LEN(9) | esdi->cmd_dev;
esdi->status_data[1] = 0x0f03; /*Attention error, command not supported*/
esdi->status_data[2] = 0x0002; /*Interface fault*/
esdi->status_data[3] = 0;
esdi->status_data[4] = 0;
esdi->status_data[5] = 0;
esdi->status_data[6] = 0;
esdi->status_data[7] = 0;
esdi->status_data[8] = 0;
esdi->status = STATUS_IRQ | STATUS_STATUS_OUT_FULL;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_FAILURE;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
}
static void device_not_present(esdi_t *esdi)
{
esdi->status_len = 9;
esdi->status_data[0] = esdi->command | STATUS_LEN(9) | esdi->cmd_dev;
esdi->status_data[1] = 0x0c11; /*Command failed, internal hardware error*/
esdi->status_data[2] = 0x000b; /*Selection error*/
esdi->status_data[3] = 0;
esdi->status_data[4] = 0;
esdi->status_data[5] = 0;
esdi->status_data[6] = 0;
esdi->status_data[7] = 0;
esdi->status_data[8] = 0;
esdi->status = STATUS_IRQ | STATUS_STATUS_OUT_FULL;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_FAILURE;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
}
#define ESDI_ADAPTER_ONLY() do \
{ \
if (esdi->cmd_dev != ATTN_HOST_ADAPTER) \
{ \
cmd_unsupported(esdi); \
return; \
} \
} while (0)
#define ESDI_DRIVE_ONLY() do \
{ \
if (esdi->cmd_dev != ATTN_DEVICE_0 && esdi->cmd_dev != ATTN_DEVICE_1) \
{ \
cmd_unsupported(esdi); \
return; \
} \
if (esdi->cmd_dev == ATTN_DEVICE_0) \
drive = &esdi->drives[0]; \
else \
drive = &esdi->drives[1]; \
} while (0)
static void esdi_callback(void *p)
{
esdi_t *esdi = (esdi_t *)p;
esdi_drive_t *drive;
esdi->callback = 0;
if (esdi->in_reset)
{
esdi->in_reset = 0;
esdi->status = STATUS_IRQ;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_RESET_COMPLETE;
return;
}
switch (esdi->command)
{
case CMD_READ:
ESDI_DRIVE_ONLY();
if (!drive->present)
{
device_not_present(esdi);
return;
}
switch (esdi->cmd_state)
{
case 0:
esdi->rba = (esdi->cmd_data[2] | (esdi->cmd_data[3] << 16)) & 0x0fffffff;
esdi->sector_pos = 0;
esdi->sector_count = esdi->cmd_data[1];
esdi->status = STATUS_IRQ | STATUS_CMD_IN_PROGRESS | STATUS_TRANSFER_REQ;
esdi->irq_status = esdi->cmd_dev | IRQ_DATA_TRANSFER_READY;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
esdi->cmd_state = 1;
esdi->callback = ESDI_TIME;
esdi->data_pos = 0;
break;
case 1:
if (!(esdi->basic_ctrl & CTRL_DMA_ENA))
{
esdi->callback = ESDI_TIME;
return;
}
while (esdi->sector_pos < esdi->sector_count)
{
if (!esdi->data_pos)
{
if (esdi->rba >= drive->sectors)
fatal("Read past end of drive\n");
hdd_image_read(drive->hdc_num, esdi->rba, 1, (uint8_t *) esdi->data);
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 1);
}
while (esdi->data_pos < 256)
{
int val = dma_channel_write(5, esdi->data[esdi->data_pos]);
if (val == DMA_NODATA)
{
esdi->callback = ESDI_TIME;
return;
}
esdi->data_pos++;
}
esdi->data_pos = 0;
esdi->sector_pos++;
esdi->rba++;
}
esdi->status = STATUS_CMD_IN_PROGRESS;
esdi->cmd_state = 2;
esdi->callback = ESDI_TIME;
break;
case 2:
esdi->status = STATUS_IRQ;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
}
break;
case CMD_WRITE:
case CMD_WRITE_VERIFY:
ESDI_DRIVE_ONLY();
if (!drive->present)
{
device_not_present(esdi);
return;
}
switch (esdi->cmd_state)
{
case 0:
esdi->rba = (esdi->cmd_data[2] | (esdi->cmd_data[3] << 16)) & 0x0fffffff;
esdi->sector_pos = 0;
esdi->sector_count = esdi->cmd_data[1];
esdi->status = STATUS_IRQ | STATUS_CMD_IN_PROGRESS | STATUS_TRANSFER_REQ;
esdi->irq_status = esdi->cmd_dev | IRQ_DATA_TRANSFER_READY;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
esdi->cmd_state = 1;
esdi->callback = ESDI_TIME;
esdi->data_pos = 0;
break;
case 1:
if (!(esdi->basic_ctrl & CTRL_DMA_ENA))
{
esdi->callback = ESDI_TIME;
return;
}
while (esdi->sector_pos < esdi->sector_count)
{
while (esdi->data_pos < 256)
{
int val = dma_channel_read(5);
if (val == DMA_NODATA)
{
esdi->callback = ESDI_TIME;
return;
}
esdi->data[esdi->data_pos++] = val & 0xffff;
}
if (esdi->rba >= drive->sectors)
fatal("Write past end of drive\n");
hdd_image_write(drive->hdc_num, esdi->rba, 1, (uint8_t *) esdi->data);
esdi->rba++;
esdi->sector_pos++;
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 1);
esdi->data_pos = 0;
}
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 0);
esdi->status = STATUS_CMD_IN_PROGRESS;
esdi->cmd_state = 2;
esdi->callback = ESDI_TIME;
break;
case 2:
esdi->status = STATUS_IRQ;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
}
break;
case CMD_READ_VERIFY:
ESDI_DRIVE_ONLY();
if (!drive->present)
{
device_not_present(esdi);
return;
}
esdi->status = STATUS_IRQ;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
case CMD_SEEK:
ESDI_DRIVE_ONLY();
if (!drive->present)
{
device_not_present(esdi);
return;
}
esdi->status = STATUS_IRQ;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
case CMD_GET_DEV_CONFIG:
ESDI_DRIVE_ONLY();
if (!drive->present)
{
device_not_present(esdi);
return;
}
if (esdi->status_pos)
fatal("Status send in progress\n");
if ((esdi->status & STATUS_IRQ) || esdi->irq_in_progress)
fatal("IRQ in progress %02x %i\n", esdi->status, esdi->irq_in_progress);
esdi->status_len = 6;
esdi->status_data[0] = CMD_GET_POS_INFO | STATUS_LEN(6) | STATUS_DEVICE_HOST_ADAPTER;
esdi->status_data[1] = 0x10; /*Zero defect*/
esdi->status_data[2] = drive->sectors & 0xffff;
esdi->status_data[3] = drive->sectors >> 16;
esdi->status_data[4] = drive->tracks;
esdi->status_data[5] = drive->hpc | (drive->spt << 16);
/* pclog("CMD_GET_DEV_CONFIG %i %04x %04x %04x %04x %04x %04x\n", drive->sectors,
esdi->status_data[0], esdi->status_data[1],
esdi->status_data[2], esdi->status_data[3],
esdi->status_data[4], esdi->status_data[5]);*/
esdi->status = STATUS_IRQ | STATUS_STATUS_OUT_FULL;
esdi->irq_status = esdi->cmd_dev | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
case CMD_GET_POS_INFO:
ESDI_ADAPTER_ONLY();
if (esdi->status_pos)
fatal("Status send in progress\n");
if ((esdi->status & STATUS_IRQ) || esdi->irq_in_progress)
fatal("IRQ in progress %02x %i\n", esdi->status, esdi->irq_in_progress);
esdi->status_len = 5;
esdi->status_data[0] = CMD_GET_POS_INFO | STATUS_LEN(5) | STATUS_DEVICE_HOST_ADAPTER;
esdi->status_data[1] = 0xffdd; /*MCA ID*/
esdi->status_data[2] = esdi->pos_regs[3] | (esdi->pos_regs[2] << 8);
esdi->status_data[3] = 0xff;
esdi->status_data[4] = 0xff;
esdi->status = STATUS_IRQ | STATUS_STATUS_OUT_FULL;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
case 0x11:
ESDI_ADAPTER_ONLY();
switch (esdi->cmd_state)
{
case 0:
esdi->sector_pos = 0;
esdi->sector_count = esdi->cmd_data[1];
if (esdi->sector_count > 256)
fatal("Read sector buffer count %04x\n", esdi->cmd_data[1]);
esdi->status = STATUS_IRQ | STATUS_CMD_IN_PROGRESS | STATUS_TRANSFER_REQ;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_DATA_TRANSFER_READY;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
esdi->cmd_state = 1;
esdi->callback = ESDI_TIME;
esdi->data_pos = 0;
break;
case 1:
if (!(esdi->basic_ctrl & CTRL_DMA_ENA))
{
esdi->callback = ESDI_TIME;
return;
}
while (esdi->sector_pos < esdi->sector_count)
{
if (!esdi->data_pos)
memcpy(esdi->data, esdi->sector_buffer[esdi->sector_pos++], 512);
while (esdi->data_pos < 256)
{
int val = dma_channel_write(5, esdi->data[esdi->data_pos]);
if (val == DMA_NODATA)
{
esdi->callback = ESDI_TIME;
return;
}
esdi->data_pos++;
}
esdi->data_pos = 0;
}
esdi->status = STATUS_CMD_IN_PROGRESS;
esdi->cmd_state = 2;
esdi->callback = ESDI_TIME;
break;
case 2:
esdi->status = STATUS_IRQ;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
}
break;
case 0x10:
ESDI_ADAPTER_ONLY();
switch (esdi->cmd_state)
{
case 0:
esdi->sector_pos = 0;
esdi->sector_count = esdi->cmd_data[1];
if (esdi->sector_count > 256)
fatal("Write sector buffer count %04x\n", esdi->cmd_data[1]);
esdi->status = STATUS_IRQ | STATUS_CMD_IN_PROGRESS | STATUS_TRANSFER_REQ;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_DATA_TRANSFER_READY;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
esdi->cmd_state = 1;
esdi->callback = ESDI_TIME;
esdi->data_pos = 0;
break;
case 1:
if (!(esdi->basic_ctrl & CTRL_DMA_ENA))
{
esdi->callback = ESDI_TIME;
return;
}
while (esdi->sector_pos < esdi->sector_count)
{
while (esdi->data_pos < 256)
{
int val = dma_channel_read(5);
if (val == DMA_NODATA)
{
esdi->callback = ESDI_TIME;
return;
}
esdi->data[esdi->data_pos++] = val & 0xffff;;
}
memcpy(esdi->sector_buffer[esdi->sector_pos++], esdi->data, 512);
esdi->data_pos = 0;
}
esdi->status = STATUS_CMD_IN_PROGRESS;
esdi->cmd_state = 2;
esdi->callback = ESDI_TIME;
break;
case 2:
esdi->status = STATUS_IRQ;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
}
break;
case 0x12:
ESDI_ADAPTER_ONLY();
if (esdi->status_pos)
fatal("Status send in progress\n");
if ((esdi->status & STATUS_IRQ) || esdi->irq_in_progress)
fatal("IRQ in progress %02x %i\n", esdi->status, esdi->irq_in_progress);
esdi->status_len = 2;
esdi->status_data[0] = 0x12 | STATUS_LEN(5) | STATUS_DEVICE_HOST_ADAPTER;
esdi->status_data[1] = 0;
esdi->status = STATUS_IRQ | STATUS_STATUS_OUT_FULL;
esdi->irq_status = IRQ_HOST_ADAPTER | IRQ_CMD_COMPLETE_SUCCESS;
esdi->irq_in_progress = 1;
esdi_set_irq(esdi);
break;
default:
fatal("Bad command %02x %i\n", esdi->command, esdi->cmd_dev);
}
}
static uint8_t esdi_mca_read(int port, void *p)
{
esdi_t *esdi = (esdi_t *)p;
return esdi->pos_regs[port & 7];
}
static void esdi_mca_write(int port, uint8_t val, void *p)
{
esdi_t *esdi = (esdi_t *)p;
if (port < 0x102)
return;
esdi->pos_regs[port & 7] = val;
io_removehandler(0x3510, 0x0008, esdi_read, esdi_readw, NULL, esdi_write, esdi_writew, NULL, esdi);
mem_mapping_disable(&esdi->bios_rom.mapping);
if (esdi->pos_regs[2] & 1)
{
io_sethandler(0x3510, 0x0008, esdi_read, esdi_readw, NULL, esdi_write, esdi_writew, NULL, esdi);
if (!(esdi->pos_regs[3] & 8))
{
mem_mapping_enable(&esdi->bios_rom.mapping);
mem_mapping_set_addr(&esdi->bios_rom.mapping, ((esdi->pos_regs[3] & 7) * 0x4000) + 0xc0000, 0x4000);
}
}
}
static void loadhd(esdi_t *esdi, int hdc_num, int d, const wchar_t *fn)
{
esdi_drive_t *drive = &esdi->drives[d];
int ret = 0;
ret = hdd_image_load(hdc_num);
if (!ret)
{
drive->present = 0;
return;
}
drive->spt = hdc[hdc_num].spt;
drive->hpc = hdc[hdc_num].hpc;
drive->tracks = hdc[hdc_num].tracks;
drive->sectors = hdc[hdc_num].spt * hdc[hdc_num].hpc * hdc[hdc_num].tracks;
drive->hdc_num = hdc_num;
drive->present = 1;
}
static void *esdi_init()
{
int i = 0;
int c = 0;
esdi_t *esdi = malloc(sizeof(esdi_t));
memset(esdi, 0, sizeof(esdi_t));
rom_init_interleaved(&esdi->bios_rom, L"roms/hdd/esdi/90x8970.bin", L"roms/hdd/esdi/90x8969.bin", 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
mem_mapping_disable(&esdi->bios_rom.mapping);
esdi->drives[0].present = esdi->drives[1].present = 0;
for (i = 0; i < HDC_NUM; i++)
{
if ((hdc[i].bus == HDD_BUS_RLL) && (hdc[i].rll_channel < RLL_NUM))
{
loadhd(esdi, i, hdc[i].rll_channel, hdc[i].fn);
c++;
if (c >= RLL_NUM) break;
}
}
timer_add(esdi_callback, &esdi->callback, &esdi->callback, esdi);
mca_add(esdi_mca_read, esdi_mca_write, esdi);
esdi->pos_regs[0] = 0xff;
esdi->pos_regs[1] = 0xdd;
esdi->in_reset = 1;
esdi->callback = ESDI_TIME * 50;
esdi->status = STATUS_BUSY;
return esdi;
}
static void esdi_close(void *p)
{
esdi_t *esdi = (esdi_t *)p;
esdi_drive_t *drive;
int d;
esdi->drives[0].present = esdi->drives[1].present = 0;
for (d = 0; d < 2; d++)
{
drive = &esdi->drives[d];
hdd_image_close(drive->hdc_num);
}
free(esdi);
}
static int esdi_available()
{
return rom_present(L"roms/hdd/esdi/90x8969.bin") && rom_present(L"roms/hdd/esdi/90x8970.bin");
}
device_t hdd_esdi_device =
{
"IBM ESDI Fixed Disk Adapter (MCA)",
DEVICE_MCA,
esdi_init,
esdi_close,
esdi_available,
NULL,
NULL,
NULL,
NULL
};

View File

@@ -18,7 +18,7 @@
#include "rom.h"
#include "timer.h"
#include "esdi_at.h"
#include "hdd_esdi_at.h"
#define IDE_TIME (TIMER_USEC*10)
@@ -501,7 +501,7 @@ void esdi_callback(void *p)
esdi->pos = 0;
esdi->status = STAT_DRQ | STAT_READY | STAT_DSC;
esdi_irq_raise(esdi);
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 1);
update_status_bar_icon(SB_HDD | HDD_BUS_ESDI, 1);
}
break;
@@ -538,7 +538,7 @@ void esdi_callback(void *p)
}
else
esdi->status = STAT_READY | STAT_DSC;
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 1);
update_status_bar_icon(SB_HDD | HDD_BUS_ESDI, 1);
}
break;
@@ -565,7 +565,7 @@ void esdi_callback(void *p)
esdi_irq_raise(esdi);
break;
}
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 1);
update_status_bar_icon(SB_HDD | HDD_BUS_ESDI, 1);
esdi_next_sector(esdi);
esdi->secount = (esdi->secount - 1) & 0xff;
if (esdi->secount)
@@ -604,7 +604,7 @@ void esdi_callback(void *p)
}
esdi->status = STAT_READY | STAT_DSC;
esdi_irq_raise(esdi);
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 1);
update_status_bar_icon(SB_HDD | HDD_BUS_ESDI, 1);
}
break;
@@ -744,7 +744,7 @@ void esdi_callback(void *p)
break;
}
update_status_bar_icon(SB_HDD | HDD_BUS_RLL, 0);
update_status_bar_icon(SB_HDD | HDD_BUS_ESDI, 0);
}
static void esdi_rom_write(uint32_t addr, uint8_t val, void *p)
@@ -789,11 +789,11 @@ void *wd1007vse1_init()
for (i = 0; i < HDC_NUM; i++)
{
if ((hdc[i].bus == HDD_BUS_RLL) && (hdc[i].rll_channel < RLL_NUM))
if ((hdc[i].bus == HDD_BUS_ESDI) && (hdc[i].esdi_channel < ESDI_NUM))
{
loadhd(esdi, i, hdc[i].rll_channel, hdc[i].fn);
loadhd(esdi, i, hdc[i].esdi_channel, hdc[i].fn);
c++;
if (c >= RLL_NUM) break;
if (c >= ESDI_NUM) break;
}
}

1057
src/hdd_esdi_mca.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -9,14 +9,13 @@
* Implementation of the IDE emulation for hard disks and ATAPI
* CD-ROM devices.
*
* Version: @(#)ide.c 1.0.4 2017/06/20
* Version: @(#)hdd_ide_at.c 1.0.5 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* TheCollector1995, <mariogplayer8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016-2017 TheCollector1995.
* Copyright 2016,2017 Miran Grca.
*/
#include <stdint.h>
#include <sys/types.h>
@@ -32,7 +31,7 @@
#include "timer.h"
#include "cdrom.h"
#include "scsi.h"
#include "ide.h"
#include "hdd_ide_at.h"
/* Bits of 'atastat' */
#define ERR_STAT 0x01

View File

@@ -9,14 +9,13 @@
* Implementation of the IDE emulation for hard disks and ATAPI
* CD-ROM devices.
*
* Version: @(#)ide.h 1.0.1 2017/08/23
* Version: @(#)hdd_ide_at.h 1.0.2 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* TheCollector1995, <mariogplayer8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
* Copyright 2016,2017 TheCollector1995.
*/
#ifndef EMU_IDE_H
# define EMU_IDE_H

View File

@@ -8,7 +8,7 @@
*
* XT IDE controller emulation.
*
* Version: @(#)xtide.c 1.0.1 2017/06/03
* Version: @(#)xtide.c 1.0.3 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -21,8 +21,8 @@
#include "mem.h"
#include "rom.h"
#include "device.h"
#include "ide.h"
#include "xtide.h"
#include "hdd_ide_at.h"
#include "hdd_ide_xt.h"
#define XTIDE_ROM_PATH L"roms/hdd/xtide/ide_xt.bin"

View File

@@ -8,7 +8,7 @@
#include <stdint.h>
#include "ibm.h"
#include "ide.h"
#include "hdd_ide_at.h"
#include "hdd_image.h"
typedef struct

View File

@@ -6,7 +6,7 @@
#include "io.h"
#include "pic.h"
#include "timer.h"
#include "mfm_at.h"
#include "hdd_mfm_at.h"
#define IDE_TIME (TIMER_USEC*10)

View File

@@ -10,7 +10,7 @@
#include "pic.h"
#include "rom.h"
#include "timer.h"
#include "mfm_xebec.h"
#include "hdd_mfm_xebec.h"
#define XEBEC_TIME (2000 * TIMER_USEC)

View File

@@ -8,12 +8,12 @@
*
* General include file.
*
* Version: @(#)ibm.h 1.0.1 2017/06/03
* Version: @(#)ibm.h 1.0.2 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include <stdio.h>
#include <stdint.h>
@@ -593,7 +593,7 @@ enum
HDD_BUS_DISABLED = 0,
HDD_BUS_MFM,
HDD_BUS_XTIDE,
HDD_BUS_RLL,
HDD_BUS_ESDI,
HDD_BUS_IDE_PIO_ONLY,
HDD_BUS_IDE_PIO_AND_DMA,
HDD_BUS_SCSI,
@@ -603,7 +603,7 @@ enum
#define HDC_NUM 30
#define MFM_NUM 2
#define RLL_NUM 2
#define ESDI_NUM 2
#define XTIDE_NUM 2
#define IDE_NUM 8
#define SCSI_NUM 16 /* Theoretically the controller can have at least 64 devices, or even 128 in case of a wide bus, but
@@ -618,9 +618,9 @@ typedef struct {
int wp;
uint32_t base;
uint64_t at_spt,at_hpc; /*[Translation] Sectors per track, heads per cylinder*/
unsigned int bus; /* 0 = none, 1 = MFM/RLL, 2 = IDE, 3 = SCSI */
unsigned int bus;
unsigned int mfm_channel;
unsigned int rll_channel;
unsigned int esdi_channel;
unsigned int xtide_channel;
unsigned int ide_channel;
unsigned int scsi_id;

View File

@@ -8,16 +8,15 @@
*
* Handling of the emulated machines.
*
* Version: @(#)model.c 1.0.6 2017/08/23
* Version: @(#)model.c 1.0.7 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include <stdint.h>
#include <stdio.h>
#include "ibm.h"
#include "CPU/cpu.h"
#include "io.h"
@@ -36,7 +35,7 @@
#include "fdc37c932fr.h"
#include "gameport.h"
#include "i82335.h"
#include "ide.h"
#include "hdd_ide_at.h"
#include "intel.h"
#include "intel_flash.h"
#include "keyboard_amstrad.h"
@@ -71,7 +70,7 @@
#include "VIDEO/vid_tandy.h"
#include "w83877f.h"
#include "wd76c10.h"
#include "xtide.h"
#include "hdd_ide_xt.h"
#include "bugger.h"

View File

@@ -32,11 +32,11 @@
* Based on an early driver for MINIX 1.5.
* Based on the 86Box PS/2 mouse driver as a framework.
*
* Version: @(#)mouse_bus.c 1.0.7 2017/07/27
* Version: @(#)mouse_bus.c 1.0.8 2017/08/03
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
* TheCollector1995,
* Copyright 1989-2017 Fred N. van Kempen, TheCollector1995.
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* TheCollector1995
* Copyright 1989-2017 Fred N. van Kempen.
*/
#include <stdio.h>
#include <stdlib.h>
@@ -47,6 +47,395 @@
#include "mouse.h"
#define BUSMOUSE_PORT 0x023c
#define BUSMOUSE_PORTLEN 4
#define BUSMOUSE_IRQ 5
#define ENABLE_3BTN 1 /* enable 3-button mode */
/* Our mouse device. */
typedef struct mouse_bus {
int8_t type;
uint8_t flags; /* device flags */
uint16_t port; /* I/O port range start */
uint16_t portlen; /* length of I/O port range */
int8_t irq; /* IRQ channel to use */
uint8_t r_magic; /* MAGIC register */
uint8_t r_ctrl; /* CONTROL register (WR) */
uint8_t r_intr; /* INTSTAT register (RO) */
uint8_t r_conf; /* CONFIG register */
int8_t x, y; /* current mouse status */
uint8_t but;
uint8_t (*read)(struct mouse_bus *, uint16_t);
void (*write)(struct mouse_bus *, uint16_t, uint8_t);
} mouse_bus_t;
#define MOUSE_ENABLED 0x80 /* device is enabled for use */
#define MOUSE_FROZEN 0x01 /* do not update counters */
/* Definitions for Logitech. */
#define LTMOUSE_DATA 0 /* DATA register */
#define LTMOUSE_MAGIC 1 /* signature magic register */
# define MAGIC_BYTE1 0xa5 /* most drivers use this */
# define MAGIC_BYTE2 0x5a /* some drivers use this */
#define LTMOUSE_CTRL 2 /* CTRL register */
# define CTRL_FREEZE 0x80 /* do not sample when set */
# define CTRL_RD_Y_HI 0x60 /* plus FREEZE */
# define CTRL_RD_Y_LO 0x40 /* plus FREEZE */
# define CTRL_RD_X_HI 0x20 /* plus FREEZE */
# define CTRL_RD_X_LO 0x00 /* plus FREEZE */
# define CTRL_RD_MASK 0x60
# define CTRL_IDIS 0x10
# define CTRL_IENB 0x00
#define LTMOUSE_CONFIG 3 /* CONFIG register */
/* Definitions for Microsoft. */
#define MSMOUSE_CTRL 0 /* CTRL register */
# define MSCTRL_RESET 0x80
# define MSCTRL_MODE 0x07
# define MSCTRL_RD_Y 0x02
# define MSCTRL_RD_X 0x01
# define MSCTRL_RD_BUT 0x00
#define MSMOUSE_DATA 1 /* DATA register */
# define MSDATA_BASE 0x10
# define MSDATA_IRQ 0x01
#define MSMOUSE_MAGIC 2 /* MAGIC register */
# define MAGIC_MSBYTE1 0xde /* indicates MS InPort */
# define MAGIC_MSBYTE2 0xad
#define MSMOUSE_CONFIG 3 /* CONFIG register */
/* Handle a WRITE to a LOGITECH register. */
static void
lt_write(mouse_bus_t *ms, uint16_t port, uint8_t val)
{
uint8_t b = (ms->r_ctrl ^ val);
#if 0
pclog("BUSMOUSE: lt_write(%d,%02x)\n", port, val);
#endif
switch (port) {
case LTMOUSE_DATA: /* [00] data register */
break;
case LTMOUSE_MAGIC: /* [01] magic data register */
if (val == MAGIC_BYTE1 || val == MAGIC_BYTE2) {
ms->r_magic = val;
}
break;
case LTMOUSE_CTRL: /* [02] control register */
if (b & CTRL_FREEZE) {
if (val & CTRL_FREEZE) {
/* Hold the sampling while we do something. */
ms->flags |= MOUSE_FROZEN;
} else {
/* Reset current state. */
ms->x = ms->y = 0;
if (ms->but)
/* One more POLL for button-release. */
ms->but = 0x80;
ms->flags &= ~MOUSE_FROZEN;
}
}
if (b & CTRL_IDIS) {
/* Disable or enable interrupts. */
/* (we don't do anything for that here..) */
}
/* Save new register value. */
ms->r_ctrl = val;
break;
case LTMOUSE_CONFIG: /* [03] config register */
ms->r_conf = val;
break;
default:
break;
}
}
/* Handle a READ from a LOGITECH register. */
static uint8_t
lt_read(mouse_bus_t *ms, uint16_t port)
{
uint8_t r = 0xff;
switch (port) {
case LTMOUSE_DATA: /* [00] data register */
if (! (ms->r_ctrl & CTRL_FREEZE)) {
r = 0x00;
} else switch(ms->r_ctrl & CTRL_RD_MASK) {
case CTRL_RD_X_LO: /* X, low bits */
/*
* Some drivers expect the buttons to
* be in this byte. Others want it in
* the Y-LO byte. --FvK
*/
r = 0x07;
if (ms->but & 0x01) /*LEFT*/
r &= ~0x04;
if (ms->but & 0x02) /*RIGHT*/
r &= ~0x01;
#if ENABLE_3BTN
if (ms->but & 0x04) /*MIDDLE*/
r &= ~0x02;
#endif
r <<= 5;
r |= (ms->x & 0x0f);
break;
case CTRL_RD_X_HI: /* X, high bits */
r = (ms->x >> 4) & 0x0f;
break;
case CTRL_RD_Y_LO: /* Y, low bits */
r = (ms->y & 0x0f);
break;
case CTRL_RD_Y_HI: /* Y, high bits */
/*
* Some drivers expect the buttons to
* be in this byte. Others want it in
* the X-LO byte. --FvK
*/
r = 0x07;
if (ms->but & 0x01) /*LEFT*/
r &= ~0x04;
if (ms->but & 0x02) /*RIGHT*/
r &= ~0x01;
#if ENABLE_3BTN
if (ms->but & 0x04) /*MIDDLE*/
r &= ~0x02;
#endif
r <<= 5;
r |= (ms->y >> 4) & 0x0f;
break;
}
break;
case LTMOUSE_MAGIC: /* [01] magic data register */
/*
* Logitech drivers start out by blasting their magic
* value (0xA5) into this register, and then read it
* back to see if that worked. If it did (and we do
* support this) the controller is assumed to be a
* Logitech-protocol one, and not InPort.
*/
r = ms->r_magic;
break;
case LTMOUSE_CTRL: /* [02] control register */
/*
* This is the weird stuff mentioned in the file header
* above. Microsoft's "mouse.exe" does some whacky stuff
* to extract the configured IRQ channel from the board.
*
* First, it reads the current value, and then re-reads
* it another 10,000 (yes, really) times. It keeps track
* of whether or not the data has changed, most likely
* to de-bounce reading of a DIP switch for example. This
* first value is assumed to be the 2's complement of the
* actual IRQ value.
* Next, it does this a second time, but now with the
* IDIS bit clear (so, interrupts enabled), which is
* our cue to return the regular (not complemented) value
* to them.
*
* Since we have to fake the initial value and the settling
* of the data a bit later on, we first return a bunch of
* invalid ("random") data, and then the real value.
*
* Yes, this is weird. --FvK
*/
if (ms->r_intr++ < 250)
/* Still settling, return invalid data. */
r = (ms->r_ctrl&CTRL_IDIS)?0xff:0x00;
else {
/* OK, all good, return correct data. */
r = (ms->r_ctrl&CTRL_IDIS)?-ms->irq:ms->irq;
ms->r_intr = 0;
}
break;
case LTMOUSE_CONFIG: /* [03] config register */
r = ms->r_conf;
break;
default:
break;
}
#if 0
pclog("BUSMOUSE: lt_read(%d): %02x\n", port, r);
#endif
return(r);
}
/* Initialize the Logitech Bus Mouse interface. */
static void
lt_init(mouse_bus_t *ms)
{
pclog("Logitech Bus Mouse, I/O=%04x, IRQ=%d\n", ms->port, ms->irq);
/* Initialize registers. */
ms->r_magic = 0x00;
ms->r_conf = 0x91; /* 8255 controller config */
ms->r_ctrl = (CTRL_IDIS);
/* Initialize I/O handlers. */
ms->read = lt_read;
ms->write = lt_write;
/* All done. */
ms->flags = 0x00;
}
/* Handle a WRITE operation to one of our registers. */
static void
busmouse_write(uint16_t port, uint8_t val, void *priv)
{
mouse_bus_t *ms = (mouse_bus_t *)priv;
ms->write(ms, port-ms->port, val);
}
/* Handle a READ operation from one of our registers. */
static uint8_t
busmouse_read(uint16_t port, void *priv)
{
mouse_bus_t *ms = (mouse_bus_t *)priv;
uint8_t r;
r = ms->read(ms, port-ms->port);
return(r);
}
/* The emulator calls us with an update on the host mouse device. */
static uint8_t
busmouse_poll(int x, int y, int z, int b, void *priv)
{
mouse_bus_t *ms = (mouse_bus_t *)priv;
/* Return early if nothing to do. */
if (!x && !y && !z && (ms->but == b)) return(1);
/* If we are not interested, return. */
if (!(ms->flags & MOUSE_ENABLED) || (ms->flags & MOUSE_FROZEN)) return(0);
#if 0
pclog("BUSMOUSE: poll(%d,%d,%d, %02x)\n", x, y, z, b);
#endif
/* Add the delta to our state. */
x += ms->x;
if (x > 127)
x = 127;
if (x < -128)
x = -128;
ms->x = (int8_t)x;
y += ms->y;
if (y > 127)
y = 127;
if (y < -128)
y = -128;
ms->y = (int8_t)y;
ms->but = b;
/* All set, generate an interrupt. */
if (! (ms->r_ctrl & CTRL_IDIS))
picint(1 << ms->irq);
return(0);
}
/* Release all resources held by the device. */
static void
busmouse_close(void *priv)
{
mouse_bus_t *ms = (mouse_bus_t *)priv;
/* Release our I/O range. */
io_removehandler(ms->port, ms->portlen,
busmouse_read, NULL, NULL, busmouse_write, NULL, NULL, ms);
free(ms);
}
/* Initialize the device for use by the user. */
static void *
busmouse_init(int type)
{
mouse_bus_t *ms;
ms = (mouse_bus_t *)malloc(sizeof(mouse_bus_t));
memset(ms, 0x00, sizeof(mouse_bus_t));
ms->type = type;
ms->port = BUSMOUSE_PORT;
ms->portlen = BUSMOUSE_PORTLEN;
#if BUSMOUSE_IRQ
ms->irq = BUSMOUSE_IRQ;
#else
ms->irq = -1;
#endif
switch(ms->type) {
case MOUSE_TYPE_LOGIBUS:
lt_init(ms);
break;
case MOUSE_TYPE_INPORT:
// ms_init(ms);
break;
}
ms->flags |= MOUSE_ENABLED;
/* Request an I/O range. */
io_sethandler(ms->port, ms->portlen,
busmouse_read, NULL, NULL, busmouse_write, NULL, NULL, ms);
/* Return our private data to the I/O layer. */
return(ms);
}
static void *
logibus_init(void)
{
return(busmouse_init(MOUSE_TYPE_LOGIBUS));
}
static void *
inport_init(void)
{
return(busmouse_init(MOUSE_TYPE_LOGIBUS));
}
#if 0
@@@@
#define BUS_MOUSE_IRQ 5
#define IRQ_MASK ((1<<5) >> BUS_MOUSE_IRQ)
@@ -394,44 +783,6 @@ static uint8_t busmouse_poll(int x, int y, int z, int b, void *priv)
return(0);
}
/* Release all resources held by the device. */
static void busmouse_close(void *priv)
{
mouse_bus_t *busmouse = (mouse_bus_t *)priv;
/* Release our I/O range. */
io_removehandler(0x023C, 0x0004, busmouse_read, NULL, NULL, busmouse_write, NULL, NULL, busmouse);
free(busmouse);
}
/* Initialize the device for use by the user. */
static void *busmouse_init(void)
{
mouse_bus_t *busmouse;
busmouse = (mouse_bus_t *)malloc(sizeof(mouse_bus_t));
memset(busmouse, 0x00, sizeof(mouse_bus_t));
busmouse->is_inport = 0;
busmouse->irq = BUS_MOUSE_IRQ;
/* Initialize registers. */
busmouse->control_val = 0x1f; /* The control port value */
busmouse->config_val = 0x0e; /* The config port value */
/* Common. */
busmouse->command_val = 0;
busmouse->toggle_counter = 0;
busmouse->interrupts = 0;
/* Request an I/O range. */
io_sethandler(0x023C, 0x0004, busmouse_read, NULL, NULL, busmouse_write, NULL, NULL, busmouse);
timer_add(busmouse_timer_handler, &busmouse->timer_index, TIMER_ALWAYS_ENABLED, busmouse);
/* Return our private data to the I/O layer. */
return(busmouse);
}
/* Initialize the device for use by the user. */
static void *inport_init(void)
@@ -460,21 +811,21 @@ static void *inport_init(void)
/* Return our private data to the I/O layer. */
return(inport);
}
#endif
mouse_t mouse_bus_logitech =
{
mouse_t mouse_bus_logitech = {
"Logitech Bus Mouse",
"msbus",
"logibus",
MOUSE_TYPE_LOGIBUS,
busmouse_init,
logibus_init,
busmouse_close,
busmouse_poll
};
mouse_t mouse_bus_msinport =
{
"InPort Mouse",
"inport",
mouse_t mouse_bus_msinport = {
"Microsoft Bus Mouse (InPort)",
"msbus",
MOUSE_TYPE_INPORT,
inport_init,
busmouse_close,

View File

@@ -10,7 +10,7 @@
*
* Based on the 86Box Serial Mouse driver as a framework.
*
* Version: @(#)mouse_serial.c 1.0.7 2017/07/27
* Version: @(#)mouse_serial.c 1.0.8 2017/08/03
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
*/

View File

@@ -8,17 +8,16 @@
*
* Emulation core dispatcher.
*
* Version: @(#)pc.c 1.0.6 2017/06/17
* Version: @(#)pc.c 1.0.7 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include "86box.h"
#include "ibm.h"
#include "mem.h"
@@ -45,7 +44,7 @@
#include "fdd.h"
#include "gameport.h"
#include "hdd.h"
#include "ide.h"
#include "hdd_ide_at.h"
#include "cdrom.h"
#include "cdrom_ioctl.h"
#include "cdrom_image.h"

View File

@@ -9,21 +9,19 @@
* Emulation of the National Semiconductors PC87306 Super I/O
* chip.
*
* Version: @(#)pc87306.c 1.0.0 2017/05/30
* Version: @(#)pc87306.c 1.0.1 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
#include "ibm.h"
#include "disc.h"
#include "fdc.h"
#include "fdd.h"
#include "ide.h"
#include "io.h"
#include "lpt.h"
#include "serial.h"
#include "hdd_ide_at.h"
#include "pc87306.h"
static int pc87306_curreg;

View File

@@ -8,12 +8,12 @@
*
* Emulation core dispatcher.
*
* Version: @(#)piix.c 1.0.1 2017/08/23
* Version: @(#)piix.c 1.0.2 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
* Copyright 2016,2017 Miran Grca.
*/
/*PRD format :
@@ -25,10 +25,10 @@
#include "ibm.h"
#include "dma.h"
#include "ide.h"
#include "io.h"
#include "mem.h"
#include "pci.h"
#include "hdd_ide_at.h"
#include "piix.h"

View File

@@ -12,7 +12,7 @@
*
* NOTE: THIS IS CURRENTLY A MESS, but will be cleaned up as I go.
*
* Version: @(#)scsi_aha154x.c 1.0.11 2017/08/23
* Version: @(#)scsi_aha154x.c 1.0.12 2017/08/24
*
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Original Buslogic version by SA1988 and Miran Grca.
@@ -654,6 +654,10 @@ aha_reset(aha_t *dev)
static void
aha_reset_ctrl(aha_t *dev, uint8_t Reset)
{
/* Say hello! */
pclog("Adaptec %s (IO=0x%04X, IRQ=%d, DMA=%d)\n",
dev->name, dev->Base, dev->Irq, dev->DmaChannel);
aha_reset(dev);
if (Reset) {
dev->Status |= STAT_STST;
@@ -1730,13 +1734,19 @@ aha_mca_write(int port, uint8_t val, void *priv)
if (dev->pos_regs[2] & 1) {
addr = aha_mca_get_port(dev->pos_regs[3]);
dev->Base = addr;
io_sethandler(addr, 4,
aha_read, aha_readw, NULL,
aha_write, aha_writew, NULL, dev);
}
dev->Irq = (dev->pos_regs[4] & 0x7) + 8;
dev->DmaChannel = dev->pos_regs[5] & 0xf;
dev->Irq = (dev->pos_regs[4] & 0x07) + 8;
dev->DmaChannel = dev->pos_regs[5] & 0x0f;
/* Initialize the device if fully configured. */
if (dev->Base != 0 && dev->Irq != 0 && dev->DmaChannel != 0) {
aha_reset_ctrl(dev, CTRL_HRST);
}
}
@@ -1936,7 +1946,13 @@ aha_init(int type)
memset(dev, 0x00, sizeof(aha_t));
dev->type = type;
/* Set up the (initial) I/O address, IRQ and DMA info. */
/*
* Set up the (initial) I/O address, IRQ and DMA info.
*
* Note that on MCA, configuration is handled by the BIOS,
* and so any info we get here will be overwritten by the
* MCA-assigned values later on!
*/
dev->Base = device_get_config_hex16("base");
dev->Irq = device_get_config_int("irq");
dev->DmaChannel = device_get_config_int("dma");
@@ -1992,6 +2008,8 @@ aha_init(int type)
break;
case AHA_1640:
strcpy(dev->name, "AHA-1640");
/* Enable MCA. */
dev->pos_regs[0] = 0x1F;
dev->pos_regs[1] = 0x0F;
@@ -2014,15 +2032,11 @@ aha_init(int type)
io_sethandler(dev->Base, 4,
aha_read, aha_readw, NULL,
aha_write, aha_writew, NULL, dev);
/* Initialize the device. */
aha_reset_ctrl(dev, CTRL_HRST);
}
/* Say hello! */
pclog("Adaptec %s (IO=0x%04X, IRQ=%d, DMA=%d)\n",
dev->name, dev->Base, dev->Irq, dev->DmaChannel);
/* Reset the device. */
aha_reset_ctrl(dev, CTRL_HRST);
return(dev);
}

View File

@@ -6,7 +6,7 @@
*
* Emulation of SCSI fixed and removable disks.
*
* Version: @(#)scsi_disk.c 1.0.5 2017/08/23
* Version: @(#)scsi_disk.c 1.0.6 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2017 Miran Grca.
@@ -20,7 +20,7 @@
#include "cdrom.h"
#include "ibm.h"
#include "hdd_image.h"
#include "ide.h"
#include "hdd_ide_at.h"
#include "piix.h"
#include "scsi.h"
#include "scsi_disk.h"

View File

@@ -6,7 +6,7 @@
*
* Emulation of Intel System I/O PCI chip.
*
* Version: @(#)sio.c 1.0.2 2017/08/23
* Version: @(#)sio.c 1.0.3 2017/08/24
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -20,7 +20,7 @@
#include "dma.h"
#include "fdc.h"
#include "keyboard_at.h"
#include "ide.h"
#include "hdd_ide_at.h"
#include "io.h"
#include "mem.h"
#include "pci.h"

View File

@@ -9,19 +9,19 @@
* SiS sis85c471 Super I/O Chip
* Used by Batman's Revenge
*
* Version: @(#)sis85c471.c 1.0.1 2017/08/23
* Version: @(#)sis85c471.c 1.0.2 2017/08/24
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2017 Miran Grca.
*/
#include "ibm.h"
#include "ide.h"
#include "io.h"
#include "lpt.h"
#include "disc.h"
#include "fdc.h"
#include "fdd.h"
#include "io.h"
#include "lpt.h"
#include "serial.h"
#include "hdd_ide_at.h"
#include "sis85c471.h"