Merge pull request #6760 from bozoscum/master

modifies to Laser Turbo XT and Victor V86P
This commit is contained in:
Miran Grča
2026-01-28 07:14:07 +01:00
committed by GitHub
5 changed files with 133 additions and 23 deletions

View File

@@ -296,6 +296,37 @@ lxt_init(const device_t *info)
}
static const device_config_t laserxt_config[] = {
{
.name = "bios",
.description = "BIOS Version",
.type = CONFIG_BIOS,
.default_string = "laserxt_126",
.default_int = 0,
.file_filter = NULL,
.spinner = { 0 },
.selection = { { 0 } },
.bios = {
{
.name = "1.08",
.internal_name = "laserxt_108",
.bios_type = BIOS_NORMAL,
.files_no = 1,
.local = 0,
.size = 8192,
.files = { "roms/machines/ltxt/ltxt-v1.08.bin", "" }
},
{
.name = "1.26",
.internal_name = "laserxt_126",
.bios_type = BIOS_NORMAL,
.files_no = 1,
.local = 0,
.size = 8192,
.files = { "roms/machines/ltxt/27c64.bin", "" }
},
{ .files_no = 0 }
}
},
{
.name = "ems_1_base",
.description = "EMS 1 Address",

View File

@@ -1408,6 +1408,9 @@ extern const device_t tandy_1000sl_video_device;
extern int machine_tandy1000sl2_init(const machine_t *);
/* m_v86p.c */
#ifdef EMU_DEVICE_H
extern const device_t v86p_device;
#endif
extern int machine_v86p_init(const machine_t *);
/* m_xt.c */
@@ -1479,6 +1482,9 @@ extern int machine_xt_to16_init(const machine_t *);
extern const device_t vendex_device;
#endif
extern int machine_xt_vendex_init(const machine_t *);
#ifdef EMU_DEVICE_H
extern const device_t laserxt_device;
#endif
extern int machine_xt_laserxt_init(const machine_t *);
extern int machine_xt_znic_init(const machine_t *);
extern int machine_xt_z151_init(const machine_t *);

View File

@@ -48,35 +48,101 @@
#include <86box/sio.h>
#include <86box/video.h>
static const device_config_t v86p_config[] = {
// clang-format off
{
.name = "bios",
.description = "BIOS Version",
.type = CONFIG_BIOS,
.default_string = "v86p_122089",
.default_int = 0,
.file_filter = NULL,
.spinner = { 0 },
.selection = { { 0 } },
.bios = {
{
.name = "12/20/89",
.internal_name = "v86p_122089",
.bios_type = BIOS_NORMAL,
.files_no = 2,
.local = 0,
.size = 65536,
.files = { "roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Even.rom",
"roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Odd.rom",
"" }
},
{
.name = "09/04/89",
.internal_name = "v86p_090489",
.bios_type = BIOS_NORMAL,
.files_no = 2,
.local = 0,
.size = 65536,
.files = { "roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Even.rom",
"roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Odd.rom",
"" }
},
{
.name = "09/04/89 (Alt)",
.internal_name = "v86p_jvernet",
.bios_type = BIOS_NORMAL,
.files_no = 1,
.local = 1,
.size = 65536,
.files = { "roms/machines/v86p/V86P.ROM",
"" }
},
{ .files_no = 0 }
}
},
{ .name = "", .description = "", .type = CONFIG_END }
// clang-format on
};
const device_t v86p_device = {
.name = "Victor V86P",
.internal_name = "v86p_device",
.flags = 0,
.local = 0,
.init = NULL,
.close = NULL,
.reset = NULL,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = v86p_config
};
int
machine_v86p_init(const machine_t *model)
{
int ret;
int rom_id = 0;
int ret = 0;
int files_no = 0;
int local = 0;
const char *fn1, *fn2;
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);
/* No ROMs available. */
if (!device_available(model->device))
return ret;
if (!ret) {
/* Try an older version of the BIOS. */
rom_id = 1;
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 (!ret) {
/* Try JVERNET's BIOS. */
rom_id = 2;
ret = bios_load_linear("roms/machines/v86p/V86P.ROM",
0x000f0000, 65536, 0);
device_context(model->device);
files_no = device_get_bios_num_files(model->device, device_get_config_bios("bios"));
local = device_get_bios_local(model->device, device_get_config_bios("bios"));
fn1 = device_get_bios_file(model->device, device_get_config_bios("bios"), 0);
if (files_no > 1)
{
fn2 = device_get_bios_file(model->device, device_get_config_bios("bios"), 1);
ret = bios_load_interleavedr(fn1, fn2, 0x000f8000, 65536, 0);
}
else
ret = bios_load_linear(fn1, 0x000f0000, 65536, 0);
device_context_restore();
if (bios_only || !ret)
return ret;
if (rom_id == 2)
if (local > 0)
video_load_font("roms/machines/v86p/V86P.FON", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET);
else
video_load_font("roms/machines/v86p/v86pfont.rom", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET);

View File

@@ -1884,10 +1884,17 @@ machine_xt_laserxt_common_init(const machine_t *model, int is_lxt3)
int
machine_xt_laserxt_init(const machine_t *model)
{
int ret;
int ret = 0;
const char *fn;
ret = bios_load_linear("roms/machines/ltxt/27c64.bin",
0x000fe000, 8192, 0);
/* No ROMs available. */
if (!device_available(model->device))
return ret;
device_context(model->device);
fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0);
ret = bios_load_linear(fn, 0x000fe000, 8192, 0);
device_context_restore();
if (bios_only || !ret)
return ret;

View File

@@ -2982,7 +2982,7 @@ const machine_t machines[] = {
.kbc_p1 = 0xff,
.gpio = 0xffffffff,
.gpio_acpi = 0xffffffff,
.device = NULL,
.device = &v86p_device,
.kbd_device = NULL,
.fdc_device = NULL,
.sio_device = NULL,