Add the Victor V86P Machine
This is a portable computer based around 80C86 processor and Chips & Technologies chip set. It features a 640x200 monochromatic LCD display, and up to two 720k 3.25" floppy drives. It can optionally contain a hard drive controller along with 20M 3.25" MFM hard drive in place of one floppy drives, which is not emulated yet. Also not emulated is the expanded memory over 640K. At least two versions of BIOS have been seen in the wild -- one from 89/09/04 another from 09/12/20. The MD5 checksums of the ROM images (a pair of chips for each BIOS versions and a character ROM) are as follows: SHA1(ce39ab220de25bbd824dbd5c7411c88f3a8d7430) = roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Even.rom SHA1(9b374cf5aa48186577293c3a83250cdc1aed7c9a) = roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Odd.rom SHA1(57015c8b85aecb10890d4ddd4a0d133e1ba4ca49) = roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Even.rom SHA1(1d3217e9fde7410167cd462ad82b360bf546b9d0) = roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Odd.rom SHA1(59ff86fcfea479b02075c32da12c6c1579d71df5) = roms/machines/v86p/v86pfont.rom
This commit is contained in:
@@ -622,6 +622,9 @@ extern int machine_tandy_init(const machine_t *);
|
|||||||
extern int machine_tandy1000hx_init(const machine_t *);
|
extern int machine_tandy1000hx_init(const machine_t *);
|
||||||
extern int machine_tandy1000sl2_init(const machine_t *);
|
extern int machine_tandy1000sl2_init(const machine_t *);
|
||||||
|
|
||||||
|
/* m_v86p.c */
|
||||||
|
extern int machine_v86p_init(const machine_t *);
|
||||||
|
|
||||||
#ifdef EMU_DEVICE_H
|
#ifdef EMU_DEVICE_H
|
||||||
extern const device_t *tandy1k_get_device(void);
|
extern const device_t *tandy1k_get_device(void);
|
||||||
extern const device_t *tandy1k_hx_get_device(void);
|
extern const device_t *tandy1k_hx_get_device(void);
|
||||||
|
@@ -16,7 +16,8 @@
|
|||||||
add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c
|
add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c
|
||||||
m_xt_philips.c
|
m_xt_philips.c
|
||||||
m_xt_t1000.c m_xt_t1000_vid.c m_xt_xi8088.c m_xt_zenith.c m_pcjr.c
|
m_xt_t1000.c m_xt_t1000_vid.c m_xt_xi8088.c m_xt_zenith.c m_pcjr.c
|
||||||
m_amstrad.c m_europc.c m_xt_olivetti.c m_tandy.c m_at.c m_at_commodore.c
|
m_amstrad.c m_europc.c m_xt_olivetti.c m_tandy.c m_v86p.c
|
||||||
|
m_at.c m_at_commodore.c
|
||||||
m_at_t3100e.c m_at_t3100e_vid.c m_ps1.c m_ps1_hdc.c m_ps2_isa.c
|
m_at_t3100e.c m_at_t3100e_vid.c m_ps1.c m_ps1_hdc.c m_ps2_isa.c
|
||||||
m_ps2_mca.c m_at_compaq.c m_at_286_386sx.c m_at_386dx_486.c
|
m_ps2_mca.c m_at_compaq.c m_at_286_386sx.c m_at_386dx_486.c
|
||||||
m_at_socket4_5.c m_at_socket7.c m_at_sockets7.c m_at_socket8.c
|
m_at_socket4_5.c m_at_socket7.c m_at_sockets7.c m_at_socket8.c
|
||||||
|
83
src/machine/m_v86p.c
Normal file
83
src/machine/m_v86p.c
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Victor V86P portable computer emulation.
|
||||||
|
*
|
||||||
|
* Author: Lubomir Rintel, <lkundrak@v3.sk>
|
||||||
|
*
|
||||||
|
* Copyright 2021 Lubomir Rintel.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the:
|
||||||
|
*
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place - Suite 330
|
||||||
|
* Boston, MA 02111-1307
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <86box/86box.h>
|
||||||
|
#include "cpu.h"
|
||||||
|
#include <86box/mem.h>
|
||||||
|
#include <86box/timer.h>
|
||||||
|
#include <86box/rom.h>
|
||||||
|
#include <86box/machine.h>
|
||||||
|
#include <86box/device.h>
|
||||||
|
#include <86box/fdd.h>
|
||||||
|
#include <86box/fdc.h>
|
||||||
|
#include <86box/fdc_ext.h>
|
||||||
|
#include <86box/keyboard.h>
|
||||||
|
#include <86box/sio.h>
|
||||||
|
#include <86box/video.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
machine_v86p_init(const machine_t *model)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = bios_load_interleavedr("roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Even.rom",
|
||||||
|
"roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Odd.rom",
|
||||||
|
0x000f8000, 65536, 0);
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
/* Try an older version of the BIOS. */
|
||||||
|
ret = bios_load_interleavedr("roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Even.rom",
|
||||||
|
"roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Odd.rom",
|
||||||
|
0x000f8000, 65536, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bios_only || !ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
loadfont("roms/machines/v86p/v86pfont.rom", 8);
|
||||||
|
|
||||||
|
machine_common_init(model);
|
||||||
|
|
||||||
|
device_add(&f82c606_device);
|
||||||
|
|
||||||
|
device_add(&keyboard_xt_device);
|
||||||
|
|
||||||
|
if (fdc_type == FDC_INTERNAL)
|
||||||
|
device_add(&fdc_xt_device);
|
||||||
|
|
||||||
|
if (gfxcard == VID_INTERNAL)
|
||||||
|
device_add(&f82c425_video_device);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
@@ -105,6 +105,7 @@ const machine_t machines[] = {
|
|||||||
{ "[8086] Olivetti M240", "m240", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 128, 640, 128, 0, machine_xt_m240_init, NULL },
|
{ "[8086] Olivetti M240", "m240", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 128, 640, 128, 0, machine_xt_m240_init, NULL },
|
||||||
{ "[8086] Schetmash Iskra-3104", "iskra3104", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 128, 640, 128, 0, machine_xt_iskra3104_init, NULL },
|
{ "[8086] Schetmash Iskra-3104", "iskra3104", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 128, 640, 128, 0, machine_xt_iskra3104_init, NULL },
|
||||||
{ "[8086] Tandy 1000 SL/2", "tandy1000sl2", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO_FIXED, 512, 768, 128, 0, machine_tandy1000sl2_init, tandy1k_sl_get_device },
|
{ "[8086] Tandy 1000 SL/2", "tandy1000sl2", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO_FIXED, 512, 768, 128, 0, machine_tandy1000sl2_init, tandy1k_sl_get_device },
|
||||||
|
{ "[8086] Victor V86P", "v86p", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO, 512, 512, 128, 127, machine_v86p_init, NULL },
|
||||||
{ "[8086] Toshiba T1200", "t1200", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO, 1024, 2048,1024, 63, machine_xt_t1200_init, t1200_get_device },
|
{ "[8086] Toshiba T1200", "t1200", MACHINE_TYPE_8086, CPU_PKG_8086, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO, 1024, 2048,1024, 63, machine_xt_t1200_init, t1200_get_device },
|
||||||
|
|
||||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||||
|
@@ -635,7 +635,7 @@ MCHOBJ := machine.o machine_table.o \
|
|||||||
m_xt_xi8088.o m_xt_zenith.o \
|
m_xt_xi8088.o m_xt_zenith.o \
|
||||||
m_pcjr.o \
|
m_pcjr.o \
|
||||||
m_amstrad.o m_europc.o \
|
m_amstrad.o m_europc.o \
|
||||||
m_xt_olivetti.o m_tandy.o \
|
m_xt_olivetti.o m_tandy.o m_v86p.o \
|
||||||
m_at.o m_at_commodore.o \
|
m_at.o m_at_commodore.o \
|
||||||
m_at_t3100e.o m_at_t3100e_vid.o \
|
m_at_t3100e.o m_at_t3100e_vid.o \
|
||||||
m_ps1.o m_ps1_hdc.o \
|
m_ps1.o m_ps1_hdc.o \
|
||||||
|
Reference in New Issue
Block a user