Applied mainline PCem commit that fixed the AWE32 OPL volume;

Removed the Award 430VX PCI and all UMC Super I/O chip emulation (that was pure guesswork anyway).
This commit is contained in:
OBattler
2017-06-08 00:01:10 +02:00
parent 172ab6839f
commit 112ee420a5
10 changed files with 33 additions and 271 deletions

View File

@@ -148,7 +148,7 @@ SYSOBJ = model.o \
olivetti_m24.o ps1.o ps2.o ps2_mca.o \ olivetti_m24.o ps1.o ps2.o ps2_mca.o \
tandy_eeprom.o tandy_rom.o tandy_eeprom.o tandy_rom.o
DEVOBJ = bugger.o lpt.o serial.o \ DEVOBJ = bugger.o lpt.o serial.o \
um8669f.o pc87306.o sis85c471.o w83877f.o \ pc87306.o sis85c471.o w83877f.o \
keyboard.o \ keyboard.o \
keyboard_xt.o keyboard_at.o keyboard_pcjr.o \ keyboard_xt.o keyboard_at.o keyboard_pcjr.o \
keyboard_amstrad.o keyboard_olim24.o \ keyboard_amstrad.o keyboard_olim24.o \

View File

@@ -187,8 +187,8 @@ static void sb_get_buffer_emu8k(int32_t *buffer, int len, void *p)
int c_emu8k = (((c/2) * 44100) / 48000)*2; int c_emu8k = (((c/2) * 44100) / 48000)*2;
int32_t out_l, out_r; int32_t out_l, out_r;
out_l = (((int32_t)sb->opl.buffer[c] * (int32_t)mixer->fm_l) >> 16); out_l = ((((sb->opl.buffer[c] * mixer->fm_l) >> 16) * (opl3_type ? 47000 : 51000)) >> 16);
out_r = (((int32_t)sb->opl.buffer[c + 1] * (int32_t)mixer->fm_r) >> 16); out_r = ((((sb->opl.buffer[c + 1] * mixer->fm_r) >> 16) * (opl3_type ? 47000 : 51000)) >> 16);
out_l += ((sb->emu8k.buffer[c_emu8k] * mixer->fm_l) >> 16); out_l += ((sb->emu8k.buffer[c_emu8k] * mixer->fm_l) >> 16);
out_r += ((sb->emu8k.buffer[c_emu8k + 1] * mixer->fm_l) >> 16); out_r += ((sb->emu8k.buffer[c_emu8k + 1] * mixer->fm_l) >> 16);

View File

@@ -179,9 +179,11 @@ void *intel_flash_init(uint8_t type)
case ROM_REVENGE: case ROM_REVENGE:
wcscpy(flash_path, L"revenge.bin"); wcscpy(flash_path, L"revenge.bin");
break; break;
#if 0
case ROM_586MC1: case ROM_586MC1:
wcscpy(flash_path, L"586mc1.bin"); wcscpy(flash_path, L"586mc1.bin");
break; break;
#endif
case ROM_PLATO: case ROM_PLATO:
wcscpy(flash_path, L"plato.bin"); wcscpy(flash_path, L"plato.bin");
break; break;
@@ -203,12 +205,14 @@ void *intel_flash_init(uint8_t type)
case ROM_ACERM3A: case ROM_ACERM3A:
wcscpy(flash_path, L"acerm3a.bin"); wcscpy(flash_path, L"acerm3a.bin");
break; break;
#if 0
case ROM_ACERV35N: case ROM_ACERV35N:
wcscpy(flash_path, L"acerv35n.bin"); wcscpy(flash_path, L"acerv35n.bin");
break; break;
case ROM_430VX: case ROM_430VX:
wcscpy(flash_path, L"430vx.bin"); wcscpy(flash_path, L"430vx.bin");
break; break;
#endif
case ROM_P55VA: case ROM_P55VA:
wcscpy(flash_path, L"p55va.bin"); wcscpy(flash_path, L"p55va.bin");
break; break;

View File

@@ -434,6 +434,7 @@ int loadbios()
pclog("Load SIS496 %x %x\n", rom[0x1fff0], rom[0xfff0]); pclog("Load SIS496 %x %x\n", rom[0x1fff0], rom[0xfff0]);
return 1; return 1;
#if 0
case ROM_430VX: case ROM_430VX:
f = romfopen(L"roms/430vx/55XWUQ0E.BIN", L"rb"); f = romfopen(L"roms/430vx/55XWUQ0E.BIN", L"rb");
if (!f) break; if (!f) break;
@@ -441,6 +442,7 @@ int loadbios()
fclose(f); fclose(f);
biosmask = 0x1ffff; biosmask = 0x1ffff;
return 1; return 1;
#endif
case ROM_REVENGE: case ROM_REVENGE:
f = romfopen(L"roms/revenge/1009AF2_.BIO", L"rb"); f = romfopen(L"roms/revenge/1009AF2_.BIO", L"rb");
@@ -650,6 +652,7 @@ int loadbios()
pclog("Load R418 %x %x\n", rom[0x1fff0], rom[0xfff0]); pclog("Load R418 %x %x\n", rom[0x1fff0], rom[0xfff0]);
return 1; return 1;
#if 0
case ROM_586MC1: case ROM_586MC1:
f = romfopen(L"roms/586mc1/IS.34", L"rb"); f = romfopen(L"roms/586mc1/IS.34", L"rb");
if (!f) break; if (!f) break;
@@ -657,6 +660,7 @@ int loadbios()
fclose(f); fclose(f);
biosmask = 0x1ffff; biosmask = 0x1ffff;
return 1; return 1;
#endif
case ROM_PLATO: case ROM_PLATO:
f = romfopen(L"roms/plato/1016AX1_.BIO", L"rb"); f = romfopen(L"roms/plato/1016AX1_.BIO", L"rb");
@@ -712,6 +716,7 @@ int loadbios()
biosmask = 0x1ffff; biosmask = 0x1ffff;
return 1; return 1;
#if 0
case ROM_ACERV35N: case ROM_ACERV35N:
f = romfopen(L"roms/acerv35n/V35ND1S1.BIN", L"rb"); f = romfopen(L"roms/acerv35n/V35ND1S1.BIN", L"rb");
if (!f) break; if (!f) break;
@@ -719,6 +724,7 @@ int loadbios()
fclose(f); fclose(f);
biosmask = 0x1ffff; biosmask = 0x1ffff;
return 1; return 1;
#endif
case ROM_P55VA: case ROM_P55VA:
f = romfopen(L"roms/p55va/VA021297.BIN", L"rb"); f = romfopen(L"roms/p55va/VA021297.BIN", L"rb");

View File

@@ -84,7 +84,9 @@
#include "sound/snd_sn76489.h" #include "sound/snd_sn76489.h"
#include "tandy_eeprom.h" #include "tandy_eeprom.h"
#include "tandy_rom.h" #include "tandy_rom.h"
#if 0
#include "um8669f.h" #include "um8669f.h"
#endif
#include "video/vid_pcjr.h" #include "video/vid_pcjr.h"
#include "video/vid_tandy.h" #include "video/vid_tandy.h"
#include "w83877f.h" #include "w83877f.h"
@@ -118,7 +120,9 @@ extern void at_ali1429_init(void);
extern void at_headland_init(void); extern void at_headland_init(void);
extern void at_opti495_init(void); extern void at_opti495_init(void);
extern void at_sis496_init(void); extern void at_sis496_init(void);
#if 0
extern void at_i430vx_init(void); extern void at_i430vx_init(void);
#endif
extern void at_batman_init(void); extern void at_batman_init(void);
extern void at_endeavor_init(void); extern void at_endeavor_init(void);
@@ -226,7 +230,9 @@ MODEL models[] =
{"Acer V35N", ROM_ACERV35N, "acerv3n", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_acerv35n_init, NULL}, {"Acer V35N", ROM_ACERV35N, "acerv3n", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_acerv35n_init, NULL},
#endif #endif
{"ASUS P/I-P55T2P4", ROM_P55T2P4, "p55r2p4", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_p55t2p4_init, NULL}, {"ASUS P/I-P55T2P4", ROM_P55T2P4, "p55r2p4", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_p55t2p4_init, NULL},
#if 0
{"Award 430VX PCI", ROM_430VX, "430vx", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_i430vx_init, NULL}, {"Award 430VX PCI", ROM_430VX, "430vx", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_i430vx_init, NULL},
#endif
{"Epox P55-VA", ROM_P55VA, "p55va", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_p55va_init, NULL}, {"Epox P55-VA", ROM_P55VA, "p55va", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_p55va_init, NULL},
{"ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_p55tvp4_init, NULL}, {"ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_p55tvp4_init, NULL},
{"Tyan Titan-Pro AT", ROM_440FX, "440fx", { "Intel", cpus_PentiumPro, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_i440fx_init, NULL}, {"Tyan Titan-Pro AT", ROM_440FX, "440fx", { "Intel", cpus_PentiumPro, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 256, 1, at_i440fx_init, NULL},
@@ -818,6 +824,7 @@ void at_p55t2p4_init(void)
device_add(&intel_flash_bxt_device); device_add(&intel_flash_bxt_device);
} }
#if 0
void at_i430vx_init(void) void at_i430vx_init(void)
{ {
at_ide_init(); at_ide_init();
@@ -832,6 +839,7 @@ void at_i430vx_init(void)
um8669f_init(); um8669f_init();
device_add(&intel_flash_bxt_device); device_add(&intel_flash_bxt_device);
} }
#endif
void at_p55tvp4_init(void) void at_p55tvp4_init(void)
{ {

View File

@@ -240,7 +240,9 @@ void loadnvr(void)
case ROM_AMI486: f = nvrfopen(L"ami486.nvr", L"rb"); nvrmask = 127; break; case ROM_AMI486: f = nvrfopen(L"ami486.nvr", L"rb"); nvrmask = 127; break;
case ROM_WIN486: f = nvrfopen(L"win486.nvr", L"rb"); nvrmask = 127; break; case ROM_WIN486: f = nvrfopen(L"win486.nvr", L"rb"); nvrmask = 127; break;
case ROM_SIS496: f = nvrfopen(L"sis496.nvr", L"rb"); nvrmask = 127; break; case ROM_SIS496: f = nvrfopen(L"sis496.nvr", L"rb"); nvrmask = 127; break;
#if 0
case ROM_430VX: f = nvrfopen(L"430vx.nvr", L"rb"); nvrmask = 127; break; case ROM_430VX: f = nvrfopen(L"430vx.nvr", L"rb"); nvrmask = 127; break;
#endif
case ROM_REVENGE: f = nvrfopen(L"revenge.nvr", L"rb"); nvrmask = 127; break; case ROM_REVENGE: f = nvrfopen(L"revenge.nvr", L"rb"); nvrmask = 127; break;
case ROM_ENDEAVOR: f = nvrfopen(L"endeavor.nvr", L"rb"); nvrmask = 127; break; case ROM_ENDEAVOR: f = nvrfopen(L"endeavor.nvr", L"rb"); nvrmask = 127; break;
case ROM_DTK386: f = nvrfopen(L"dtk386.nvr", L"rb"); nvrmask = 127; break; case ROM_DTK386: f = nvrfopen(L"dtk386.nvr", L"rb"); nvrmask = 127; break;
@@ -248,14 +250,18 @@ void loadnvr(void)
case ROM_AMI386DX_OPTI495: f = nvrfopen(L"ami386dx_opti495.nvr", L"rb"); nvrmask = 127; break; case ROM_AMI386DX_OPTI495: f = nvrfopen(L"ami386dx_opti495.nvr", L"rb"); nvrmask = 127; break;
case ROM_DTK486: f = nvrfopen(L"dtk486.nvr", L"rb"); nvrmask = 127; break; case ROM_DTK486: f = nvrfopen(L"dtk486.nvr", L"rb"); nvrmask = 127; break;
case ROM_R418: f = nvrfopen(L"r418.nvr", L"rb"); nvrmask = 127; break; case ROM_R418: f = nvrfopen(L"r418.nvr", L"rb"); nvrmask = 127; break;
#if 0
case ROM_586MC1: f = nvrfopen(L"586mc1.nvr", L"rb"); nvrmask = 127; break; case ROM_586MC1: f = nvrfopen(L"586mc1.nvr", L"rb"); nvrmask = 127; break;
#endif
case ROM_PLATO: f = nvrfopen(L"plato.nvr", L"rb"); nvrmask = 127; break; case ROM_PLATO: f = nvrfopen(L"plato.nvr", L"rb"); nvrmask = 127; break;
case ROM_MB500N: f = nvrfopen(L"mb500n.nvr", L"rb"); nvrmask = 127; break; case ROM_MB500N: f = nvrfopen(L"mb500n.nvr", L"rb"); nvrmask = 127; break;
case ROM_P54TP4XE: f = nvrfopen(L"p54tp4xe.nvr", L"rb"); nvrmask = 127; break; case ROM_P54TP4XE: f = nvrfopen(L"p54tp4xe.nvr", L"rb"); nvrmask = 127; break;
case ROM_AP53: f = nvrfopen(L"ap53.nvr", L"rb"); nvrmask = 127; break; case ROM_AP53: f = nvrfopen(L"ap53.nvr", L"rb"); nvrmask = 127; break;
case ROM_P55T2S: f = nvrfopen(L"p55t2s.nvr", L"rb"); nvrmask = 127; break; case ROM_P55T2S: f = nvrfopen(L"p55t2s.nvr", L"rb"); nvrmask = 127; break;
case ROM_ACERM3A: f = nvrfopen(L"acerm3a.nvr", L"rb"); nvrmask = 127; break; case ROM_ACERM3A: f = nvrfopen(L"acerm3a.nvr", L"rb"); nvrmask = 127; break;
#if 0
case ROM_ACERV35N: f = nvrfopen(L"acerv35n.nvr", L"rb"); nvrmask = 127; break; case ROM_ACERV35N: f = nvrfopen(L"acerv35n.nvr", L"rb"); nvrmask = 127; break;
#endif
case ROM_P55VA: f = nvrfopen(L"p55va.nvr", L"rb"); nvrmask = 127; break; case ROM_P55VA: f = nvrfopen(L"p55va.nvr", L"rb"); nvrmask = 127; break;
case ROM_P55T2P4: f = nvrfopen(L"p55t2p4.nvr", L"rb"); nvrmask = 127; break; case ROM_P55T2P4: f = nvrfopen(L"p55t2p4.nvr", L"rb"); nvrmask = 127; break;
case ROM_P55TVP4: f = nvrfopen(L"p55tvp4.nvr", L"rb"); nvrmask = 127; break; case ROM_P55TVP4: f = nvrfopen(L"p55tvp4.nvr", L"rb"); nvrmask = 127; break;
@@ -325,7 +331,9 @@ void savenvr(void)
case ROM_AMI486: f = nvrfopen(L"ami486.nvr", L"wb"); break; case ROM_AMI486: f = nvrfopen(L"ami486.nvr", L"wb"); break;
case ROM_WIN486: f = nvrfopen(L"win486.nvr", L"wb"); break; case ROM_WIN486: f = nvrfopen(L"win486.nvr", L"wb"); break;
case ROM_SIS496: f = nvrfopen(L"sis496.nvr", L"wb"); break; case ROM_SIS496: f = nvrfopen(L"sis496.nvr", L"wb"); break;
#if 0
case ROM_430VX: f = nvrfopen(L"430vx.nvr", L"wb"); break; case ROM_430VX: f = nvrfopen(L"430vx.nvr", L"wb"); break;
#endif
case ROM_REVENGE: f = nvrfopen(L"revenge.nvr", L"wb"); break; case ROM_REVENGE: f = nvrfopen(L"revenge.nvr", L"wb"); break;
case ROM_ENDEAVOR: f = nvrfopen(L"endeavor.nvr", L"wb"); break; case ROM_ENDEAVOR: f = nvrfopen(L"endeavor.nvr", L"wb"); break;
case ROM_DTK386: f = nvrfopen(L"dtk386.nvr", L"wb"); break; case ROM_DTK386: f = nvrfopen(L"dtk386.nvr", L"wb"); break;
@@ -333,14 +341,18 @@ void savenvr(void)
case ROM_AMI386DX_OPTI495: f = nvrfopen(L"ami386dx_opti495.nvr", L"wb"); break; case ROM_AMI386DX_OPTI495: f = nvrfopen(L"ami386dx_opti495.nvr", L"wb"); break;
case ROM_DTK486: f = nvrfopen(L"dtk486.nvr", L"wb"); break; case ROM_DTK486: f = nvrfopen(L"dtk486.nvr", L"wb"); break;
case ROM_R418: f = nvrfopen(L"r418.nvr", L"wb"); break; case ROM_R418: f = nvrfopen(L"r418.nvr", L"wb"); break;
#if 0
case ROM_586MC1: f = nvrfopen(L"586mc1.nvr", L"wb"); break; case ROM_586MC1: f = nvrfopen(L"586mc1.nvr", L"wb"); break;
#endif
case ROM_PLATO: f = nvrfopen(L"plato.nvr", L"wb"); break; case ROM_PLATO: f = nvrfopen(L"plato.nvr", L"wb"); break;
case ROM_MB500N: f = nvrfopen(L"mb500n.nvr", L"wb"); break; case ROM_MB500N: f = nvrfopen(L"mb500n.nvr", L"wb"); break;
case ROM_P54TP4XE: f = nvrfopen(L"p54tp4xe.nvr", L"wb"); break; case ROM_P54TP4XE: f = nvrfopen(L"p54tp4xe.nvr", L"wb"); break;
case ROM_AP53: f = nvrfopen(L"ap53.nvr", L"wb"); break; case ROM_AP53: f = nvrfopen(L"ap53.nvr", L"wb"); break;
case ROM_P55T2S: f = nvrfopen(L"p55t2s.nvr", L"wb"); break; case ROM_P55T2S: f = nvrfopen(L"p55t2s.nvr", L"wb"); break;
case ROM_ACERM3A: f = nvrfopen(L"acerm3a.nvr", L"wb"); break; case ROM_ACERM3A: f = nvrfopen(L"acerm3a.nvr", L"wb"); break;
#if 0
case ROM_ACERV35N: f = nvrfopen(L"acerv35n.nvr", L"wb"); break; case ROM_ACERV35N: f = nvrfopen(L"acerv35n.nvr", L"wb"); break;
#endif
case ROM_P55VA: f = nvrfopen(L"p55va.nvr", L"wb"); break; case ROM_P55VA: f = nvrfopen(L"p55va.nvr", L"wb"); break;
case ROM_P55T2P4: f = nvrfopen(L"p55t2p4.nvr", L"wb"); break; case ROM_P55T2P4: f = nvrfopen(L"p55t2p4.nvr", L"wb"); break;
case ROM_P55TVP4: f = nvrfopen(L"p55tvp4.nvr", L"wb"); break; case ROM_P55TVP4: f = nvrfopen(L"p55tvp4.nvr", L"wb"); break;

View File

@@ -1,172 +0,0 @@
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Emulation of the UMC UM8669F Super I/O Chip.
*
* Version: @(#)um8669f.c 1.0.0 2017/05/30
*
* Author: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
*/
/*um8669f :
aa to 108 unlocks
next 108 write is register select (Cx?)
data read/write to 109
55 to 108 locks
C0
bit 3 = LPT1 enable
bit 2 = COM2 enable
bit 1 = COM1 enable
bit 0 = FDC enable
C1
bits 7-6 = LPT1 mode : 11 = ECP/EPP, 01 = EPP, 10 = SPP
bit 3 = clear when LPT1 = 278
Added by OBattler based on more sources:
C2
bit 2 = I430FX: floppy drive swap (1 = swap, 0 = do not swap)
I430VX: DENSEL polarity
bits 3-6 = IR stuff
bits 3-4 = 00 = Normal, 01 = Infrared (HPSIR), 10 - Amplitude Shift Keyed IR (ASKIR), 11 - Reserved
C3
bits 7-6 = LPT1 DMA mode : 11 = ECP/EPP DMA1, 10 = ECP/EPP DMA3, 01 = EPP/SPP, 00 = ECP
bits 5-4 = LPT1 addr : 10 = 278/IRQ5, 01 = 3BC/IRQ7, 00 = 378/IRQ7
COM1 :
3f8, IRQ4 - C1 = BF, C3 = 00
2f8, IRQ3 - C1 = BF, C3 = 03
3e8, IRQ4 - C1 = BD, C3 = 00
2e8, IRQ3 - B1 = BD, C3 = 03
COM2 :
3f8, IRQ4 - C1 = BF, C3 = 0C
2f8, IRQ3 - C1 = BF, C3 = 00
3e8, IRQ4 - C1 = BB, C3 = 0C
2e8, IRQ3 - C1 = BB, C3 = 00
*/
#include "ibm.h"
#include "disc.h"
#include "fdc.h"
#include "fdd.h"
#include "io.h"
#include "lpt.h"
#include "serial.h"
#include "um8669f.h"
static int um8669f_locked;
static int um8669f_curreg;
static uint8_t um8669f_regs[256];
void um8669f_write(uint16_t port, uint8_t val, void *priv)
{
int temp;
if (um8669f_locked)
{
if (port == 0x108 && val == 0xaa)
um8669f_locked = 0;
}
else
{
if (port == 0x108)
{
if (val == 0x55)
um8669f_locked = 1;
else
um8669f_curreg = val;
}
else
{
um8669f_regs[um8669f_curreg] = val;
fdc_remove();
if (um8669f_regs[0xc0] & 1)
fdc_add();
if (um8669f_regs[0xc0] & 2)
{
temp = um8669f_regs[0xc3] & 1; /*might be & 2*/
if (!(um8669f_regs[0xc1] & 2))
temp |= 2;
switch (temp)
{
case 0: serial_setup(1, 0x3f8, 4); break;
case 1: serial_setup(1, 0x2f8, 4); break;
case 2: serial_setup(1, 0x3e8, 4); break;
case 3: serial_setup(1, 0x2e8, 4); break;
}
}
if (um8669f_regs[0xc0] & 4)
{
temp = (um8669f_regs[0xc3] & 4) ? 0 : 1; /*might be & 8*/
if (!(um8669f_regs[0xc1] & 4))
temp |= 2;
switch (temp)
{
case 0: serial_setup(2, 0x3f8, 3); break;
case 1: serial_setup(2, 0x2f8, 3); break;
case 2: serial_setup(2, 0x3e8, 3); break;
case 3: serial_setup(2, 0x2e8, 3); break;
}
}
if (um8669f_curreg == 0xC2)
{
/* Make sure to invert this. */
if (romset == ROM_430VX)
{
fdc_update_densel_polarity(val & 4 ? 0 : 1);
}
else
{
fdd_setswap(val & 4 ? 1 : 0);
}
}
lpt1_remove();
lpt2_remove();
temp = (um8669f_regs[0xc3] >> 4) & 3;
switch (temp)
{
case 0: lpt1_init(0x378); break;
case 1: lpt1_init(0x3bc); break;
case 2: lpt1_init(0x278); break;
}
}
}
}
uint8_t um8669f_read(uint16_t port, void *priv)
{
if (um8669f_locked)
return 0xff;
if (port == 0x108)
return um8669f_curreg; /*???*/
else
return um8669f_regs[um8669f_curreg];
}
void um8669f_init()
{
io_sethandler(0x0108, 0x0002, um8669f_read, NULL, NULL, um8669f_write, NULL, NULL, NULL);
um8669f_locked = 1;
}

View File

@@ -1,19 +0,0 @@
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Emulation of the UMC UM8669F Super I/O Chip.
*
* Version: @(#)um8669f.h 1.0.0 2017/05/30
*
* Author: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016-2017 Miran Grca.
*/
extern void um8669f_init();

View File

@@ -1,73 +0,0 @@
/* Copyright holders: Sarah Walker
see COPYING for more details
*/
#include "ibm.h"
#include "io.h"
#include "mem.h"
#include "pci.h"
#include "um8881f.h"
static uint8_t card_16[256];
static uint8_t card_18[256];
void um8881f_write(int func, int addr, uint8_t val, void *priv)
{
// pclog("um8881f_write : addr=%02x val=%02x %04x:%04x\n", addr, val, CS, pc);
if (addr == 0x54)
{
/* if ((card_16[0x54] ^ val) & 0x01)
{
if (val & 1)
mem_bios_set_state(0xe0000, 0x10000, 1, 1);
else
mem_bios_set_state(0xe0000, 0x10000, 0, 0);
}*/
flushmmucache_nopc();
}
if (addr == 0x55)
{
if ((card_16[0x55] ^ val) & 0xc0)
{
/* switch (val & 0xc0)
{
case 0x00: mem_bios_set_state(0xf0000, 0x10000, 0, 1); break;
case 0x40: mem_bios_set_state(0xf0000, 0x10000, 0, 0); break;
case 0x80: mem_bios_set_state(0xf0000, 0x10000, 1, 1); break;
case 0xc0: mem_bios_set_state(0xf0000, 0x10000, 1, 0); break;
}*/
shadowbios = val & 0x80;
shadowbios_write = !(val & 0x40);
flushmmucache_nopc();
}
}
if (addr >= 4)
card_16[addr] = val;
}
uint8_t um8881f_read(int func, int addr, void *priv)
{
return card_16[addr];
}
void um8886f_write(int func, int addr, uint8_t val, void *priv)
{
if (addr >= 4)
card_18[addr] = val;
}
uint8_t um8886f_read(int func, int addr, void *priv)
{
return card_18[addr];
}
void um8881f_init()
{
pci_add_specific(16, um8881f_read, um8881f_write, NULL);
pci_add_specific(18, um8886f_read, um8886f_write, NULL);
card_16[0] = card_18[0] = 0x60; /*UMC*/
card_16[1] = card_18[1] = 0x10;
card_16[2] = 0x81; card_16[3] = 0x88; /*UM8881 Host - PCI bridge*/
card_18[2] = 0x86; card_18[3] = 0x88; /*UM8886 PCI - ISA bridge*/
}

View File

@@ -1,4 +0,0 @@
/* Copyright holders: Sarah Walker
see COPYING for more details
*/
void um8881f_init();