mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 01:48:21 -07:00
1. Changed the names for two Chaintech machines (for example, 333AXB and 416SX) 2. Added the "AB" name to ABIT machines 3. Removed the space from PCChips and PCPartner names 4. BIOS name related corrections 5. Make few machines use their latest revisions as default BIOS option
439 lines
10 KiB
C
439 lines
10 KiB
C
/*
|
|
* 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.
|
|
*
|
|
* Implementation of Socket 3 machines.
|
|
*
|
|
* Authors: Miran Grca, <mgrca8@gmail.com>
|
|
*
|
|
* Copyright 2016-2025 Miran Grca.
|
|
*/
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <wchar.h>
|
|
#define HAVE_STDARG_H
|
|
#include <86box/86box.h>
|
|
#include "cpu.h"
|
|
#include <86box/timer.h>
|
|
#include <86box/io.h>
|
|
#include <86box/device.h>
|
|
#include <86box/chipset.h>
|
|
#include <86box/keyboard.h>
|
|
#include <86box/mem.h>
|
|
#include <86box/nvr.h>
|
|
#include <86box/pci.h>
|
|
#include <86box/dma.h>
|
|
#include <86box/fdd.h>
|
|
#include <86box/fdc.h>
|
|
#include <86box/fdc_ext.h>
|
|
#include <86box/gameport.h>
|
|
#include <86box/pic.h>
|
|
#include <86box/pit.h>
|
|
#include <86box/rom.h>
|
|
#include <86box/sio.h>
|
|
#include <86box/hdc.h>
|
|
#include <86box/port_6x.h>
|
|
#include <86box/port_92.h>
|
|
#include <86box/video.h>
|
|
#include <86box/flash.h>
|
|
#include <86box/scsi_ncr53c8xx.h>
|
|
#include <86box/hwm.h>
|
|
#include <86box/machine.h>
|
|
#include <86box/plat_unused.h>
|
|
#include <86box/sound.h>
|
|
|
|
/* ALi M1429G */
|
|
int
|
|
machine_at_atc1762_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/atc1762/atc1762.bin",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init(model);
|
|
device_add(&ali1429g_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_ecsal486_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/ecsal486/ECS_AL486.BIN",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init(model);
|
|
|
|
device_add(&ali1429g_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_ap4100aa_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/ap4100aa/M27C512DIP28.BIN",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init_ex(model, 2);
|
|
|
|
device_add(&ami_1994_nvr_device);
|
|
device_add(&ali1429g_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
device_add(&ide_vlb_device);
|
|
device_add_params(&um866x_device, (void *) UM8663BF);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* Contaq 82C596A */
|
|
int
|
|
machine_at_4gpv5_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/4gpv5/4GPV5.bin",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init(model);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
device_add(&contaq_82c596a_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* Contaq 82C597 */
|
|
int
|
|
machine_at_greenb_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/greenb/4gpv31-ami-1993-8273517.bin",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init(model);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
device_add(&contaq_82c597_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* OPTi 895 */
|
|
static const device_config_t j403tg_config[] = {
|
|
// clang-format off
|
|
{
|
|
.name = "bios",
|
|
.description = "BIOS Version",
|
|
.type = CONFIG_BIOS,
|
|
.default_string = "403tg",
|
|
.default_int = 0,
|
|
.file_filter = "",
|
|
.spinner = { 0 },
|
|
.bios = {
|
|
{ .name = "AMI WinBIOS (121593)", .internal_name = "403tg", .bios_type = BIOS_NORMAL,
|
|
.files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/403tg/J403TGRevD.BIN", "" } },
|
|
{ .name = "Award Modular BIOS v4.50G", .internal_name = "403tg_award", .bios_type = BIOS_NORMAL,
|
|
.files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/403tg/403TG.BIN", "" } },
|
|
{ .name = "MR BIOS V2.02", .internal_name = "403tg_mr", .bios_type = BIOS_NORMAL,
|
|
.files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/403tg/MRBiosOPT895.bin", "" } },
|
|
{ .files_no = 0 }
|
|
},
|
|
},
|
|
{ .name = "", .description = "", .type = CONFIG_END }
|
|
// clang-format on
|
|
};
|
|
|
|
const device_t j403tg_device = {
|
|
.name = "Jetway J-403TG",
|
|
.internal_name = "403tg_device",
|
|
.flags = 0,
|
|
.local = 0,
|
|
.init = NULL,
|
|
.close = NULL,
|
|
.reset = NULL,
|
|
.available = NULL,
|
|
.speed_changed = NULL,
|
|
.force_redraw = NULL,
|
|
.config = j403tg_config
|
|
};
|
|
|
|
int
|
|
machine_at_403tg_init(const machine_t *model)
|
|
{
|
|
int ret = 0;
|
|
const char* fn;
|
|
|
|
/* No ROMs available */
|
|
if (!device_available(model->device))
|
|
return ret;
|
|
|
|
device_context(model->device);
|
|
int nvr_hack = !strcmp(device_get_config_bios("bios"), "403tg_d");
|
|
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
|
ret = bios_load_linear(fn, 0x000f0000, 65536, 0);
|
|
|
|
if (nvr_hack) {
|
|
machine_at_common_init_ex(model, 2);
|
|
device_add(&ami_1994_nvr_device);
|
|
} else
|
|
machine_at_common_init(model);
|
|
|
|
device_add(&opti895_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* SiS 461 */
|
|
int
|
|
machine_at_acerv10_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/acerv10/ALL.BIN",
|
|
0x000e0000, 131072, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init(model);
|
|
|
|
device_add(&sis_85c461_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
device_add(&ide_isa_device);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* SiS 471 */
|
|
static void
|
|
machine_at_sis_85c471_common_init(const machine_t *model)
|
|
{
|
|
machine_at_common_init(model);
|
|
|
|
if (fdc_current[0] == FDC_INTERNAL)
|
|
device_add(&fdc_at_device);
|
|
|
|
device_add(&sis_85c471_device);
|
|
}
|
|
|
|
int
|
|
machine_at_win471_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/win471/486-SiS_AC0360136.BIN",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_sis_85c471_common_init(model);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_vi15g_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/vi15g/vi15gr23.rom",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_sis_85c471_common_init(model);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_vli486sv2g_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/vli486sv2g/0402.001",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_sis_85c471_common_init(model);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_dvent4xx_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/dvent4xx/Venturis466_BIOS.BIN",
|
|
0x000e0000, 131072, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init(model);
|
|
device_add(&sis_85c471_device);
|
|
device_add(&ide_cmd640_vlb_pri_device);
|
|
device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC));
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
if (gfxcard[0] == VID_INTERNAL)
|
|
device_add(machine_get_vid_device(machine));
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_dtk486_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/dtk486/4siw005.bin",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_sis_85c471_common_init(model);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_ami471_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/ami471/SIS471BE.AMI",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_sis_85c471_common_init(model);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_px471_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/px471/SIS471A1.PHO",
|
|
0x000f0000, 65536, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_sis_85c471_common_init(model);
|
|
|
|
device_add(&ide_vlb_device);
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
machine_at_tg486g_init(const machine_t *model)
|
|
{
|
|
int ret;
|
|
|
|
ret = bios_load_linear("roms/machines/tg486g/tg486g.bin",
|
|
0x000c0000, 262144, 0);
|
|
|
|
if (bios_only || !ret)
|
|
return ret;
|
|
|
|
machine_at_common_init_ex(model, 2);
|
|
device_add(&amstrad_megapc_nvr_device);
|
|
device_add(&sis_85c471_device);
|
|
device_add(&ide_isa_device);
|
|
device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI));
|
|
|
|
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
|
|
|
if (gfxcard[0] != VID_INTERNAL) {
|
|
for (uint16_t i = 0; i < 32768; i++)
|
|
rom[i] = mem_readb_phys(0x000c0000 + i);
|
|
}
|
|
mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000);
|
|
mem_mapping_set_exec(&bios_mapping, rom);
|
|
|
|
return ret;
|
|
}
|