mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 09:35:32 -07:00
Merge branch '86Box:master' into broken-sensation1
This commit is contained in:
2
.ci/Jenkinsfile
vendored
2
.ci/Jenkinsfile
vendored
@@ -147,7 +147,7 @@ def runBuild(args) {
|
||||
if (isUnix())
|
||||
return sh(returnStatus: true, script: "chmod u+x '$WORKSPACE/.ci/build.sh' && exec '$WORKSPACE/.ci/build.sh' $args")
|
||||
else
|
||||
return bat(returnStatus: true, script: "C:\\msys64\\msys2_shell.cmd -msys2 -defterm -here -no-start -c 'exec \"\$(cygpath -u \\'%WORKSPACE%\\')/.ci/build.sh\" $args'")
|
||||
return bat(returnStatus: true, script: "C:\\msys64\\msys2_shell.cmd -ucrt64 -defterm -here -no-start -c 'exec \"\$(cygpath -u \\'%WORKSPACE%\\')/.ci/build.sh\" $args'")
|
||||
}
|
||||
|
||||
def failStage() {
|
||||
|
||||
@@ -36,7 +36,7 @@ if(MUNT_EXTERNAL)
|
||||
endif()
|
||||
|
||||
project(86Box
|
||||
VERSION 5.4
|
||||
VERSION 6.0
|
||||
DESCRIPTION "Emulator of x86-based systems"
|
||||
HOMEPAGE_URL "https://86box.net"
|
||||
LANGUAGES C CXX)
|
||||
@@ -180,7 +180,6 @@ cmake_dependent_option(ISAMEM_RAMPAGE "AST Rampage"
|
||||
cmake_dependent_option(ISAMEM_IAB "Intel Above Board" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_BRAT "BocaRAM/AT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPL4ML "OPL4-ML daughterboard" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(PCL "Generic PCL5e Printer" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(WACOM "Wacom Input Devices" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
The 86Box project welcomes contributions from anyone, as long as some basic guidelines are followed.
|
||||
|
||||
## Emulated hardware
|
||||
In order to accept new emulated hardware, the following criteria must be met:
|
||||
In order to accept new emulated hardware or a request thereof, the following criteria must be met:
|
||||
|
||||
* A ROM must be available and be added to [our ROM repository](https://github.com/86Box/roms)
|
||||
* Documentation must be available or it must be feasible to reverse engineer with a reasonable amount of time and effort
|
||||
|
||||
4
debian/changelog
vendored
4
debian/changelog
vendored
@@ -1,5 +1,5 @@
|
||||
86box (5.4) UNRELEASED; urgency=medium
|
||||
86box (6.0) UNRELEASED; urgency=medium
|
||||
|
||||
* Bump release.
|
||||
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Tue, 23 Dec 2025 00:27:45 +0100
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Wed, 28 Jan 2026 08:45:23 +0100
|
||||
|
||||
@@ -1704,6 +1704,8 @@ pc_reset_hard_init(void)
|
||||
|
||||
ide_hard_reset();
|
||||
|
||||
lpt_ports_reset();
|
||||
|
||||
/* Initialize the actual machine and its basic modules. */
|
||||
machine_init();
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
3980
src/cpu/808x.c
3980
src/cpu/808x.c
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,8 @@ add_library(cpu OBJECT
|
||||
cpu_table.c
|
||||
fpu.c x86.c
|
||||
808x.c
|
||||
vx0.c
|
||||
vx0_biu.c
|
||||
386.c
|
||||
386_common.c
|
||||
386_dynarec.c
|
||||
|
||||
@@ -1865,6 +1865,8 @@ cpu_set(void)
|
||||
cpu_exec = exec386_2386;
|
||||
} else if (cpu_s->cpu_type >= CPU_286)
|
||||
cpu_exec = exec386_2386;
|
||||
else if (is_nec)
|
||||
cpu_exec = execvx0;
|
||||
else
|
||||
cpu_exec = execx86;
|
||||
mmx_init();
|
||||
|
||||
@@ -718,6 +718,7 @@ extern void codegen_reset(void);
|
||||
extern void cpu_set_edx(void);
|
||||
extern int divl(uint32_t val);
|
||||
extern void execx86(int32_t cycs);
|
||||
extern void execvx0(int32_t cycs);
|
||||
extern void enter_smm(int in_hlt);
|
||||
extern void enter_smm_check(int in_hlt);
|
||||
extern void leave_smm(void);
|
||||
@@ -728,6 +729,7 @@ extern int idivl(int32_t val);
|
||||
extern void resetmcr(void);
|
||||
extern void resetx86(void);
|
||||
extern void refreshread(void);
|
||||
extern void refreshread_vx0(void);
|
||||
extern void resetreadlookup(void);
|
||||
extern void softresetx86(void);
|
||||
extern void hardresetx86(void);
|
||||
@@ -809,6 +811,8 @@ extern void SF_FPU_reset(void);
|
||||
extern void reset_808x(int hard);
|
||||
extern void interrupt_808x(uint16_t addr);
|
||||
|
||||
extern void reset_vx0(int hard);
|
||||
|
||||
extern void cpu_register_fast_off_handler(void *timer);
|
||||
extern void cpu_fast_off_advance(void);
|
||||
extern void cpu_fast_off_period_set(uint16_t vla, double period);
|
||||
|
||||
@@ -3616,7 +3616,7 @@ const cpu_family_t cpu_families[] = {
|
||||
{
|
||||
.package = CPU_PKG_SOCKET4,
|
||||
.manufacturer = "Intel",
|
||||
.name = "Pentium",
|
||||
.name = "Pentium (P5)",
|
||||
.internal_name = "pentium_p5",
|
||||
.cpus = (const CPU[]) {
|
||||
{
|
||||
@@ -3736,7 +3736,7 @@ const cpu_family_t cpu_families[] = {
|
||||
{
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.manufacturer = "Intel",
|
||||
.name = "Pentium",
|
||||
.name = "Pentium (P54C)",
|
||||
.internal_name = "pentium_p54c",
|
||||
.cpus = (const CPU[]) {
|
||||
{
|
||||
|
||||
4784
src/cpu/vx0.c
Normal file
4784
src/cpu/vx0.c
Normal file
File diff suppressed because it is too large
Load Diff
1152
src/cpu/vx0_biu.c
Normal file
1152
src/cpu/vx0_biu.c
Normal file
File diff suppressed because it is too large
Load Diff
138
src/cpu/vx0_biu.h
Normal file
138
src/cpu/vx0_biu.h
Normal file
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* 808x BIU emulation header.
|
||||
*
|
||||
* Authors: Andrew Jenner, <https://www.reenigne.org>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2015-2020 Andrew Jenner.
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
*/
|
||||
#ifndef EMU_808X_BIU_H
|
||||
#define EMU_808X_BIU_H
|
||||
|
||||
#define DEBUG_SEG 0xf000
|
||||
// #define DEBUG_SEG 0x0f3c
|
||||
// #define DEBUG_SEG 0x1e1f
|
||||
// #define DEBUG_SEG 0xf000
|
||||
// #define DEBUG_SEG 0xc800
|
||||
// #define DEBUG_SEG 0x0070
|
||||
// #define DEBUG_SEG 0x0291
|
||||
// #define DEBUG_SEG 0xefff
|
||||
// #define DEBUG_SEG 0x15a2
|
||||
|
||||
// #define DEBUG_OFF_L 0x2c3b
|
||||
// #define DEBUG_OFF_L 0xe182
|
||||
// #define DEBUG_OFF_L 0xf000
|
||||
// #define DEBUG_OFF_H 0xefff
|
||||
// #define DEBUG_OFF_L 0x0000
|
||||
// #define DEBUG_OFF_H 0xffff
|
||||
#define DEBUG_OFF_L 0xf300
|
||||
#define DEBUG_OFF_H 0xf3ff
|
||||
|
||||
#define BUS_OUT 1
|
||||
#define BUS_HIGH 2
|
||||
#define BUS_WIDE 4
|
||||
#define BUS_CODE 8
|
||||
#define BUS_IO 16
|
||||
#define BUS_MEM 32
|
||||
#define BUS_PIC 64
|
||||
#define BUS_ACCESS_TYPE (BUS_CODE | BUS_IO | BUS_MEM | BUS_PIC)
|
||||
|
||||
#undef readmemb
|
||||
#undef readmemw
|
||||
#undef readmeml
|
||||
#undef readmemq
|
||||
|
||||
enum {
|
||||
BUS_T1 = 0,
|
||||
BUS_T2,
|
||||
BUS_T3,
|
||||
BUS_T4
|
||||
};
|
||||
|
||||
enum {
|
||||
BIU_STATE_IDLE,
|
||||
BIU_STATE_SUSP,
|
||||
BIU_STATE_DELAY,
|
||||
BIU_STATE_RESUME,
|
||||
BIU_STATE_WAIT,
|
||||
BIU_STATE_PF,
|
||||
BIU_STATE_EU
|
||||
};
|
||||
|
||||
enum {
|
||||
DMA_STATE_IDLE,
|
||||
DMA_STATE_TIMER,
|
||||
DMA_STATE_DREQ,
|
||||
DMA_STATE_HRQ,
|
||||
DMA_STATE_HLDA,
|
||||
DMA_STATE_OPERATING
|
||||
};
|
||||
|
||||
extern void execx86_instruction(void);
|
||||
|
||||
extern void biu_resume_on_queue_read(void);
|
||||
extern void wait_vx0(int c);
|
||||
extern void biu_reset(void);
|
||||
extern void cpu_io_vx0(int bits, int out, uint16_t port);
|
||||
extern void biu_state_set_eu(void);
|
||||
extern uint8_t readmemb_vx0(uint32_t s, uint16_t a);
|
||||
extern uint16_t readmemw_vx0(uint32_t s, uint16_t a);
|
||||
extern uint16_t readmem_vx0(uint32_t s);
|
||||
extern uint32_t readmeml_vx0(uint32_t s, uint16_t a);
|
||||
extern uint64_t readmemq_vx0(uint32_t s, uint16_t a);
|
||||
extern void writememb_vx0(uint32_t s, uint32_t a, uint8_t v);
|
||||
extern void writememw_vx0(uint32_t s, uint32_t a, uint16_t v);
|
||||
extern void writemem_vx0(uint32_t s, uint16_t v);
|
||||
extern void writememl_vx0(uint32_t s, uint32_t a, uint32_t v);
|
||||
extern void writememq_vx0(uint32_t s, uint32_t a, uint64_t v);
|
||||
extern uint8_t biu_pfq_read(void);
|
||||
extern uint8_t biu_pfq_fetchb_common(void);
|
||||
extern uint8_t biu_pfq_fetchb(void);
|
||||
extern uint16_t biu_pfq_fetchw(void);
|
||||
extern uint16_t biu_pfq_fetch(void);
|
||||
extern void biu_update_pc(void);
|
||||
extern void biu_queue_flush(void);
|
||||
extern void biu_suspend_fetch(void);
|
||||
extern void biu_begin_eu(void);
|
||||
extern void biu_wait_for_read_finish(void);
|
||||
|
||||
extern uint8_t biu_preload_byte;
|
||||
|
||||
extern int nx;
|
||||
extern int oldc;
|
||||
extern int cpu_alu_op;
|
||||
extern int completed;
|
||||
extern int in_rep;
|
||||
extern int repeating;
|
||||
extern int rep_c_flag;
|
||||
extern int noint;
|
||||
extern int tempc_fpu;
|
||||
extern int clear_lock;
|
||||
extern int is_new_biu;
|
||||
|
||||
extern int schedule_fetch;
|
||||
extern int in_lock;
|
||||
extern int bus_request_type;
|
||||
extern int pic_data;
|
||||
extern int biu_queue_preload;
|
||||
|
||||
extern uint32_t cpu_src;
|
||||
extern uint32_t cpu_dest;
|
||||
|
||||
extern uint32_t cpu_data;
|
||||
|
||||
extern uint32_t *ovr_seg;
|
||||
|
||||
/* Pointer tables needed for segment overrides. */
|
||||
extern uint32_t * opseg[4];
|
||||
extern x86seg * _opseg[4];
|
||||
|
||||
#endif /*EMU_808X_BIU_H*/
|
||||
@@ -367,8 +367,12 @@ reset_common(int hard)
|
||||
} else
|
||||
device_reset_all(DEVICE_SOFTRESET);
|
||||
|
||||
if (!is286)
|
||||
reset_808x(hard);
|
||||
if (!is286) {
|
||||
if (is_nec)
|
||||
reset_vx0(hard);
|
||||
else
|
||||
reset_808x(hard);
|
||||
}
|
||||
|
||||
in_lock = 0;
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ extern uint8_t opcode;
|
||||
extern uint8_t flags_p;
|
||||
extern uint8_t znptable8[256];
|
||||
|
||||
extern uint16_t last_addr;
|
||||
extern uint16_t zero;
|
||||
extern uint16_t oldcs;
|
||||
extern uint16_t lastcs;
|
||||
@@ -44,6 +45,7 @@ extern uint16_t lastpc;
|
||||
extern uint16_t *mod1add[2][8];
|
||||
extern uint16_t znptable16[65536];
|
||||
|
||||
extern int pfq_pos;
|
||||
extern int x86_was_reset;
|
||||
extern int trap;
|
||||
extern int codegen_flat_ss;
|
||||
|
||||
@@ -551,7 +551,11 @@ static int
|
||||
FPU_ILLEGAL_a16(UNUSED(uint32_t fetchdat))
|
||||
{
|
||||
geteaw();
|
||||
#ifdef FPU_NEC
|
||||
do_cycles(timing_rr);
|
||||
#else
|
||||
wait_cycs(timing_rr, 0);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
@@ -577,7 +581,7 @@ FPU_ILLEGAL_a32(uint32_t fetchdat)
|
||||
#define ILLEGAL_a16 FPU_ILLEGAL_a16
|
||||
|
||||
#ifdef FPU_8087
|
||||
const OpFn OP_TABLE(sf_fpu_8087_d8)[32] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_d8)[32] = {
|
||||
// clang-format off
|
||||
sf_FADDs_a16, sf_FMULs_a16, sf_FCOMs_a16, sf_FCOMPs_a16, sf_FSUBs_a16, sf_FSUBRs_a16, sf_FDIVs_a16, sf_FDIVRs_a16,
|
||||
sf_FADDs_a16, sf_FMULs_a16, sf_FCOMs_a16, sf_FCOMPs_a16, sf_FSUBs_a16, sf_FSUBRs_a16, sf_FDIVs_a16, sf_FDIVRs_a16,
|
||||
@@ -586,7 +590,7 @@ const OpFn OP_TABLE(sf_fpu_8087_d8)[32] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_d9)[256] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_d9)[256] = {
|
||||
// clang-format off
|
||||
sf_FLDs_a16, sf_FLDs_a16, sf_FLDs_a16, sf_FLDs_a16, sf_FLDs_a16, sf_FLDs_a16, sf_FLDs_a16, sf_FLDs_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -626,7 +630,7 @@ const OpFn OP_TABLE(sf_fpu_8087_d9)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_da)[256] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_da)[256] = {
|
||||
// clang-format off
|
||||
sf_FADDil_a16, sf_FADDil_a16, sf_FADDil_a16, sf_FADDil_a16, sf_FADDil_a16, sf_FADDil_a16, sf_FADDil_a16, sf_FADDil_a16,
|
||||
sf_FMULil_a16, sf_FMULil_a16, sf_FMULil_a16, sf_FMULil_a16, sf_FMULil_a16, sf_FMULil_a16, sf_FMULil_a16, sf_FMULil_a16,
|
||||
@@ -666,7 +670,7 @@ const OpFn OP_TABLE(sf_fpu_8087_da)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_db)[256] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_db)[256] = {
|
||||
// clang-format off
|
||||
sf_FILDil_a16, sf_FILDil_a16, sf_FILDil_a16, sf_FILDil_a16, sf_FILDil_a16, sf_FILDil_a16, sf_FILDil_a16, sf_FILDil_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -706,7 +710,7 @@ const OpFn OP_TABLE(sf_fpu_8087_db)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_dc)[32] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_dc)[32] = {
|
||||
// clang-format off
|
||||
sf_FADDd_a16, sf_FMULd_a16, sf_FCOMd_a16, sf_FCOMPd_a16, sf_FSUBd_a16, sf_FSUBRd_a16, sf_FDIVd_a16, sf_FDIVRd_a16,
|
||||
sf_FADDd_a16, sf_FMULd_a16, sf_FCOMd_a16, sf_FCOMPd_a16, sf_FSUBd_a16, sf_FSUBRd_a16, sf_FDIVd_a16, sf_FDIVRd_a16,
|
||||
@@ -715,7 +719,7 @@ const OpFn OP_TABLE(sf_fpu_8087_dc)[32] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_dd)[256] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_dd)[256] = {
|
||||
// clang-format off
|
||||
sf_FLDd_a16, sf_FLDd_a16, sf_FLDd_a16, sf_FLDd_a16, sf_FLDd_a16, sf_FLDd_a16, sf_FLDd_a16, sf_FLDd_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -755,7 +759,7 @@ const OpFn OP_TABLE(sf_fpu_8087_dd)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_de)[256] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_de)[256] = {
|
||||
// clang-format off
|
||||
sf_FADDiw_a16, sf_FADDiw_a16, sf_FADDiw_a16, sf_FADDiw_a16, sf_FADDiw_a16, sf_FADDiw_a16, sf_FADDiw_a16, sf_FADDiw_a16,
|
||||
sf_FMULiw_a16, sf_FMULiw_a16, sf_FMULiw_a16, sf_FMULiw_a16, sf_FMULiw_a16, sf_FMULiw_a16, sf_FMULiw_a16, sf_FMULiw_a16,
|
||||
@@ -795,7 +799,7 @@ const OpFn OP_TABLE(sf_fpu_8087_de)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(sf_fpu_8087_df)[256] = {
|
||||
static const OpFn OP_TABLE(sf_fpu_8087_df)[256] = {
|
||||
// clang-format off
|
||||
sf_FILDiw_a16, sf_FILDiw_a16, sf_FILDiw_a16, sf_FILDiw_a16, sf_FILDiw_a16, sf_FILDiw_a16, sf_FILDiw_a16, sf_FILDiw_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -835,7 +839,7 @@ const OpFn OP_TABLE(sf_fpu_8087_df)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_d8)[32] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_d8)[32] = {
|
||||
// clang-format off
|
||||
opFADDs_a16, opFMULs_a16, opFCOMs_a16, opFCOMPs_a16, opFSUBs_a16, opFSUBRs_a16, opFDIVs_a16, opFDIVRs_a16,
|
||||
opFADDs_a16, opFMULs_a16, opFCOMs_a16, opFCOMPs_a16, opFSUBs_a16, opFSUBRs_a16, opFDIVs_a16, opFDIVRs_a16,
|
||||
@@ -844,7 +848,7 @@ const OpFn OP_TABLE(fpu_8087_d8)[32] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_d9)[256] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_d9)[256] = {
|
||||
// clang-format off
|
||||
opFLDs_a16, opFLDs_a16, opFLDs_a16, opFLDs_a16, opFLDs_a16, opFLDs_a16, opFLDs_a16, opFLDs_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -884,7 +888,7 @@ const OpFn OP_TABLE(fpu_8087_d9)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_da)[256] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_da)[256] = {
|
||||
// clang-format off
|
||||
opFADDil_a16, opFADDil_a16, opFADDil_a16, opFADDil_a16, opFADDil_a16, opFADDil_a16, opFADDil_a16, opFADDil_a16,
|
||||
opFMULil_a16, opFMULil_a16, opFMULil_a16, opFMULil_a16, opFMULil_a16, opFMULil_a16, opFMULil_a16, opFMULil_a16,
|
||||
@@ -924,7 +928,7 @@ const OpFn OP_TABLE(fpu_8087_da)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_db)[256] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_db)[256] = {
|
||||
// clang-format off
|
||||
opFILDil_a16, opFILDil_a16, opFILDil_a16, opFILDil_a16, opFILDil_a16, opFILDil_a16, opFILDil_a16, opFILDil_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -964,7 +968,7 @@ const OpFn OP_TABLE(fpu_8087_db)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_dc)[32] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_dc)[32] = {
|
||||
// clang-format off
|
||||
opFADDd_a16, opFMULd_a16, opFCOMd_a16, opFCOMPd_a16, opFSUBd_a16, opFSUBRd_a16, opFDIVd_a16, opFDIVRd_a16,
|
||||
opFADDd_a16, opFMULd_a16, opFCOMd_a16, opFCOMPd_a16, opFSUBd_a16, opFSUBRd_a16, opFDIVd_a16, opFDIVRd_a16,
|
||||
@@ -973,7 +977,7 @@ const OpFn OP_TABLE(fpu_8087_dc)[32] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_dd)[256] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_dd)[256] = {
|
||||
// clang-format off
|
||||
opFLDd_a16, opFLDd_a16, opFLDd_a16, opFLDd_a16, opFLDd_a16, opFLDd_a16, opFLDd_a16, opFLDd_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
@@ -1013,7 +1017,7 @@ const OpFn OP_TABLE(fpu_8087_dd)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_de)[256] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_de)[256] = {
|
||||
// clang-format off
|
||||
opFADDiw_a16, opFADDiw_a16, opFADDiw_a16, opFADDiw_a16, opFADDiw_a16, opFADDiw_a16, opFADDiw_a16, opFADDiw_a16,
|
||||
opFMULiw_a16, opFMULiw_a16, opFMULiw_a16, opFMULiw_a16, opFMULiw_a16, opFMULiw_a16, opFMULiw_a16, opFMULiw_a16,
|
||||
@@ -1053,7 +1057,7 @@ const OpFn OP_TABLE(fpu_8087_de)[256] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const OpFn OP_TABLE(fpu_8087_df)[256] = {
|
||||
static const OpFn OP_TABLE(fpu_8087_df)[256] = {
|
||||
// clang-format off
|
||||
opFILDiw_a16, opFILDiw_a16, opFILDiw_a16, opFILDiw_a16, opFILDiw_a16, opFILDiw_a16, opFILDiw_a16, opFILDiw_a16,
|
||||
ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16, ILLEGAL_a16,
|
||||
|
||||
@@ -7,7 +7,11 @@ opFI(uint32_t fetchdat)
|
||||
cpu_state.npxc &= ~0x80;
|
||||
if (rmdat == 0xe1)
|
||||
cpu_state.npxc |= 0x80;
|
||||
#ifdef FPU_NEC
|
||||
do_cycles(3);
|
||||
#else
|
||||
wait_cycs(3, 0);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -354,7 +354,11 @@ sf_FI(uint32_t fetchdat)
|
||||
fpu_state.cwd &= ~FPU_SW_Summary;
|
||||
if (rmdat == 0xe1)
|
||||
fpu_state.cwd |= FPU_SW_Summary;
|
||||
#ifdef FPU_NEC
|
||||
do_cycles(3);
|
||||
#else
|
||||
wait_cycs(3, 0);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -302,13 +302,13 @@ hasp_read_status(void *priv)
|
||||
}
|
||||
|
||||
static void *
|
||||
hasp_init(void *lpt, int type)
|
||||
hasp_init(const device_t *info, int type)
|
||||
{
|
||||
hasp_t *dev = calloc(1, sizeof(hasp_t));
|
||||
|
||||
hasp_log("HASP: init(%d)\n", type);
|
||||
|
||||
dev->lpt = lpt;
|
||||
dev->lpt = lpt_attach(hasp_write_data, NULL, NULL, hasp_read_status, NULL, NULL, NULL, dev);
|
||||
dev->type = &hasp_types[type];
|
||||
|
||||
dev->status = 0x80;
|
||||
@@ -317,9 +317,9 @@ hasp_init(void *lpt, int type)
|
||||
}
|
||||
|
||||
static void *
|
||||
hasp_init_savquest(void *lpt)
|
||||
hasp_init_savquest(const device_t *info)
|
||||
{
|
||||
return hasp_init(lpt, HASP_TYPE_SAVQUEST);
|
||||
return hasp_init(info, HASP_TYPE_SAVQUEST);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -332,16 +332,16 @@ hasp_close(void *priv)
|
||||
free(dev);
|
||||
}
|
||||
|
||||
const lpt_device_t lpt_hasp_savquest_device = {
|
||||
.name = "Protection Dongle for Savage Quest",
|
||||
.internal_name = "dongle_savquest",
|
||||
.init = hasp_init_savquest,
|
||||
.close = hasp_close,
|
||||
.write_data = hasp_write_data,
|
||||
.write_ctrl = NULL,
|
||||
.strobe = NULL,
|
||||
.read_status = hasp_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL
|
||||
const device_t lpt_hasp_savquest_device = {
|
||||
.name = "Protection Dongle for Savage Quest",
|
||||
.internal_name = "dongle_savquest",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = hasp_init_savquest,
|
||||
.close = hasp_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
113
src/device/lpt.c
113
src/device/lpt.c
@@ -34,19 +34,22 @@ lpt_port_t lpt_ports[PARALLEL_MAX];
|
||||
|
||||
lpt_device_t lpt_devs[PARALLEL_MAX];
|
||||
|
||||
const lpt_device_t lpt_none_device = {
|
||||
const device_t lpt_none_device = {
|
||||
.name = "None",
|
||||
.internal_name = "none",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.write_data = NULL,
|
||||
.write_ctrl = NULL,
|
||||
.read_status = NULL,
|
||||
.read_ctrl = NULL
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
static const struct {
|
||||
const lpt_device_t *device;
|
||||
const device_t *device;
|
||||
} lpt_devices[] = {
|
||||
// clang-format off
|
||||
{ &lpt_none_device },
|
||||
@@ -56,9 +59,7 @@ static const struct {
|
||||
{ &lpt_prt_text_device },
|
||||
{ &lpt_prt_escp_device },
|
||||
{ &lpt_prt_ps_device },
|
||||
#ifdef USE_PCL
|
||||
{ &lpt_prt_pcl_device },
|
||||
#endif
|
||||
{ &lpt_plip_device },
|
||||
{ &lpt_hasp_savquest_device },
|
||||
{ NULL }
|
||||
@@ -83,50 +84,41 @@ lpt_log(const char *fmt, ...)
|
||||
# define lpt_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
int
|
||||
lpt_device_available(int id)
|
||||
{
|
||||
if (lpt_devices[id].device)
|
||||
return device_available(lpt_devices[id].device);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
const device_t *
|
||||
lpt_device_getdevice(const int id)
|
||||
{
|
||||
return (device_t *) lpt_devices[id].device->cfgdevice;
|
||||
return lpt_devices[id].device;
|
||||
}
|
||||
|
||||
int
|
||||
lpt_device_has_config(const int id)
|
||||
{
|
||||
int c = 0;
|
||||
const device_t *dev = (device_t *) lpt_devices[id].device->cfgdevice;
|
||||
const device_config_t *config;
|
||||
if (dev == NULL)
|
||||
if (lpt_devices[id].device == NULL)
|
||||
return 0;
|
||||
|
||||
if (dev->config == NULL)
|
||||
return 0;
|
||||
|
||||
config = dev->config;
|
||||
|
||||
while (config->type != CONFIG_END) {
|
||||
c++;
|
||||
config++;
|
||||
}
|
||||
|
||||
return (c > 0) ? 1 : 0;
|
||||
return device_has_config(lpt_devices[id].device);
|
||||
}
|
||||
|
||||
const char *
|
||||
lpt_device_get_name(const int id)
|
||||
{
|
||||
if (lpt_devices[id].device == NULL)
|
||||
return NULL;
|
||||
|
||||
return 0;
|
||||
return lpt_devices[id].device->name;
|
||||
}
|
||||
|
||||
const char *
|
||||
lpt_device_get_internal_name(const int id)
|
||||
{
|
||||
if (lpt_devices[id].device == NULL)
|
||||
return NULL;
|
||||
|
||||
return lpt_devices[id].device->internal_name;
|
||||
return device_get_internal_name(lpt_devices[id].device);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -147,29 +139,43 @@ void
|
||||
lpt_devices_init(void)
|
||||
{
|
||||
for (uint8_t i = 0; i < PARALLEL_MAX; i++) {
|
||||
lpt_t *dev = lpt_devs[i].lpt;
|
||||
memset(&(lpt_devs[i]), 0x00, sizeof(lpt_device_t));
|
||||
|
||||
if (lpt_devices[lpt_ports[i].device].device != NULL) {
|
||||
memcpy(&(lpt_devs[i]), (lpt_device_t *) lpt_devices[lpt_ports[i].device].device, sizeof(lpt_device_t));
|
||||
|
||||
if (lpt_devs[i].init)
|
||||
lpt_devs[i].priv = lpt_devs[i].init(dev);
|
||||
} else
|
||||
memset(&(lpt_devs[i]), 0x00, sizeof(lpt_device_t));
|
||||
|
||||
lpt_devs[i].lpt = dev;
|
||||
if ((lpt_devices[lpt_ports[i].device].device != NULL) &&
|
||||
(lpt_devices[lpt_ports[i].device].device != &lpt_none_device))
|
||||
device_add_inst((device_t *) lpt_devices[lpt_ports[i].device].device, i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
lpt_attach(void (*write_data)(uint8_t val, void *priv),
|
||||
void (*write_ctrl)(uint8_t val, void *priv),
|
||||
void (*strobe)(uint8_t old, uint8_t val,void *priv),
|
||||
uint8_t (*read_status)(void *priv),
|
||||
uint8_t (*read_ctrl)(void *priv),
|
||||
void (*epp_write_data)(uint8_t is_addr, uint8_t val, void *priv),
|
||||
void (*epp_request_read)(uint8_t is_addr, void *priv),
|
||||
void *priv)
|
||||
{
|
||||
int port = device_get_instance() - 1;
|
||||
|
||||
lpt_devs[port].write_data = write_data;
|
||||
lpt_devs[port].write_ctrl = write_ctrl;
|
||||
lpt_devs[port].strobe = strobe;
|
||||
lpt_devs[port].read_status = read_status;
|
||||
lpt_devs[port].read_ctrl = read_ctrl;
|
||||
lpt_devs[port].epp_write_data = epp_write_data;
|
||||
lpt_devs[port].epp_request_read = epp_request_read;
|
||||
lpt_devs[port].priv = priv;
|
||||
|
||||
return lpt_ports[port].lpt;
|
||||
}
|
||||
|
||||
void
|
||||
lpt_devices_close(void)
|
||||
{
|
||||
for (uint8_t i = 0; i < PARALLEL_MAX; i++) {
|
||||
if (lpt_devs[i].close)
|
||||
lpt_devs[i].close(lpt_devs[i].priv);
|
||||
|
||||
for (uint8_t i = 0; i < PARALLEL_MAX; i++)
|
||||
memset(&(lpt_devs[i]), 0x00, sizeof(lpt_device_t));
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -954,10 +960,10 @@ lpt_init(const device_t *info)
|
||||
|
||||
if (lpt_ports[next_inst].enabled || (info->local & 0xFFF00000)) {
|
||||
lpt_log("Adding parallel port %i...\n", next_inst);
|
||||
dev->dt = &(lpt_devs[next_inst]);
|
||||
dev->dt->lpt = dev;
|
||||
dev->dt = &(lpt_devs[next_inst]);
|
||||
lpt_ports[next_inst].lpt = dev;
|
||||
|
||||
dev->fifo = NULL;
|
||||
dev->fifo = NULL;
|
||||
memset(&dev->fifo_out_timer, 0x00, sizeof(pc_timer_t));
|
||||
|
||||
lpt_port_zero(dev);
|
||||
@@ -1033,7 +1039,14 @@ lpt_standalone_init(void)
|
||||
{
|
||||
while (next_inst < (PARALLEL_MAX - 1))
|
||||
device_add_inst(&lpt_port_device, next_inst + 1);
|
||||
};
|
||||
}
|
||||
|
||||
void
|
||||
lpt_ports_reset(void)
|
||||
{
|
||||
for (int i = 0; i < PARALLEL_MAX; i++)
|
||||
lpt_ports[i].lpt = NULL;
|
||||
}
|
||||
|
||||
const device_t lpt_port_device = {
|
||||
.name = "Parallel Port",
|
||||
|
||||
@@ -1503,7 +1503,7 @@ dma_channel_read_only(int channel)
|
||||
dma_channel_advance(channel);
|
||||
|
||||
if (!dma_at && !channel)
|
||||
refreshread();
|
||||
is_nec ? refreshread_vx0() : refreshread();
|
||||
|
||||
if (!dma_c->size) {
|
||||
temp = _dma_read(dma_c->ac, dma_c);
|
||||
@@ -1611,7 +1611,7 @@ dma_channel_read(int channel)
|
||||
dma_channel_advance(channel);
|
||||
|
||||
if (!dma_at && !channel)
|
||||
refreshread();
|
||||
is_nec ? refreshread_vx0() : refreshread();
|
||||
|
||||
if (!dma_c->size) {
|
||||
temp = _dma_read(dma_c->ac, dma_c);
|
||||
|
||||
@@ -315,6 +315,9 @@ extern uint16_t get_last_addr(void);
|
||||
extern void sub_cycles(int c);
|
||||
extern void resub_cycles(int old_cycles);
|
||||
|
||||
extern void sub_cycles_vx0(int c);
|
||||
extern void resub_cycles_vx0(int old_cycles);
|
||||
|
||||
extern void ack_pause(void);
|
||||
extern void do_pause(int p);
|
||||
|
||||
|
||||
@@ -18,11 +18,6 @@
|
||||
#endif
|
||||
|
||||
typedef struct lpt_device_s {
|
||||
const char *name;
|
||||
const char *internal_name;
|
||||
|
||||
void *(*init)(void *lpt);
|
||||
void (*close)(void *priv);
|
||||
void (*write_data)(uint8_t val, void *priv);
|
||||
void (*write_ctrl)(uint8_t val, void *priv);
|
||||
void (*strobe)(uint8_t old, uint8_t val,void *priv);
|
||||
@@ -31,13 +26,7 @@ typedef struct lpt_device_s {
|
||||
void (*epp_write_data)(uint8_t is_addr, uint8_t val, void *priv);
|
||||
void (*epp_request_read)(uint8_t is_addr, void *priv);
|
||||
|
||||
void *priv;
|
||||
struct lpt_t *lpt;
|
||||
//#ifdef EMU_DEVICE_H
|
||||
// struct device_t *cfgdevice;
|
||||
//#else
|
||||
void *cfgdevice;
|
||||
//#endif
|
||||
void * priv;
|
||||
} lpt_device_t;
|
||||
|
||||
#ifdef _TIMER_H_
|
||||
@@ -86,6 +75,8 @@ typedef struct lpt_port_s {
|
||||
uint8_t enabled;
|
||||
|
||||
int device;
|
||||
|
||||
lpt_t *lpt;
|
||||
} lpt_port_t;
|
||||
|
||||
extern lpt_port_t lpt_ports[PARALLEL_MAX];
|
||||
@@ -96,6 +87,22 @@ typedef enum {
|
||||
LPT_STATE_WRITE_FIFO
|
||||
} lpt_state_t;
|
||||
|
||||
extern const device_t lpt_dac_device;
|
||||
extern const device_t lpt_dac_stereo_device;
|
||||
|
||||
extern const device_t dss_device;
|
||||
|
||||
extern const device_t lpt_hasp_savquest_device;
|
||||
|
||||
extern int lpt_device_available(int id);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *lpt_device_getdevice(const int id);
|
||||
#endif
|
||||
extern int lpt_device_has_config(const int id);
|
||||
extern const char *lpt_device_get_name(int id);
|
||||
extern const char *lpt_device_get_internal_name(int id);
|
||||
extern int lpt_device_get_from_internal_name(const char *str);
|
||||
|
||||
extern void lpt_write(uint16_t port, uint8_t val, void *priv);
|
||||
|
||||
extern void lpt_write_to_fifo(void *priv, uint8_t val);
|
||||
@@ -109,24 +116,6 @@ extern uint8_t lpt_read_ecp_mode(lpt_t *dev);
|
||||
|
||||
extern void lpt_irq(void *priv, int raise);
|
||||
|
||||
extern int lpt_device_get_from_internal_name(const char *str);
|
||||
|
||||
extern const char *lpt_device_get_name(int id);
|
||||
extern const char *lpt_device_get_internal_name(int id);
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *lpt_device_getdevice(const int id);
|
||||
#endif
|
||||
|
||||
extern int lpt_device_has_config(const int id);
|
||||
|
||||
extern const lpt_device_t lpt_dac_device;
|
||||
extern const lpt_device_t lpt_dac_stereo_device;
|
||||
|
||||
extern const lpt_device_t dss_device;
|
||||
|
||||
extern const lpt_device_t lpt_hasp_savquest_device;
|
||||
|
||||
extern void lpt_set_ext(lpt_t *dev, uint8_t ext);
|
||||
extern void lpt_set_ecp(lpt_t *dev, uint8_t ecp);
|
||||
extern void lpt_set_epp(lpt_t *dev, uint8_t epp);
|
||||
@@ -143,12 +132,21 @@ extern void lpt_port_remove(lpt_t *dev);
|
||||
extern void lpt1_remove_ams(lpt_t *dev);
|
||||
|
||||
extern void lpt_devices_init(void);
|
||||
extern void * lpt_attach(void (*write_data)(uint8_t val, void *priv),
|
||||
void (*write_ctrl)(uint8_t val, void *priv),
|
||||
void (*strobe)(uint8_t old, uint8_t val,void *priv),
|
||||
uint8_t (*read_status)(void *priv),
|
||||
uint8_t (*read_ctrl)(void *priv),
|
||||
void (*epp_write_data)(uint8_t is_addr, uint8_t val, void *priv),
|
||||
void (*epp_request_read)(uint8_t is_addr, void *priv),
|
||||
void *priv);
|
||||
extern void lpt_devices_close(void);
|
||||
|
||||
extern void lpt_set_next_inst(int ni);
|
||||
extern void lpt_set_3bc_used(int is_3bc_used);
|
||||
|
||||
extern void lpt_standalone_init(void);
|
||||
extern void lpt_ports_reset(void);
|
||||
|
||||
extern const device_t lpt_port_device;
|
||||
|
||||
|
||||
@@ -1409,6 +1409,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 */
|
||||
@@ -1480,6 +1483,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 *);
|
||||
|
||||
@@ -244,10 +244,8 @@ extern const device_t pcnet_am79c973_onboard_device;
|
||||
extern const device_t modem_device;
|
||||
|
||||
/* PLIP */
|
||||
#ifdef EMU_LPT_H
|
||||
extern const lpt_device_t lpt_plip_device;
|
||||
#endif
|
||||
extern const device_t plip_device;
|
||||
extern const device_t lpt_plip_device;
|
||||
extern const device_t plip_device;
|
||||
|
||||
/* Realtek RTL8139C+ */
|
||||
extern const device_t rtl8139c_plus_device;
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
#ifndef EMU_PRT_DEVS_H
|
||||
#define EMU_PRT_DEVS_H
|
||||
|
||||
extern const lpt_device_t lpt_prt_text_device;
|
||||
extern const device_t prt_text_device;
|
||||
extern const lpt_device_t lpt_prt_escp_device;
|
||||
extern const device_t prt_escp_device;
|
||||
extern const lpt_device_t lpt_prt_ps_device;
|
||||
extern const device_t prt_ps_device;
|
||||
#ifdef USE_PCL
|
||||
extern const lpt_device_t lpt_prt_pcl_device;
|
||||
extern const device_t prt_pcl_device;
|
||||
#endif
|
||||
extern const device_t lpt_prt_text_device;
|
||||
extern const device_t lpt_prt_escp_device;
|
||||
extern const device_t lpt_prt_ps_device;
|
||||
extern const device_t lpt_prt_pcl_device;
|
||||
|
||||
#endif /*EMU_PRT_DEVS_H*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
@@ -18561,7 +18561,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 262144,
|
||||
|
||||
@@ -441,13 +441,14 @@ plip_rx(void *priv, uint8_t *buf, int io_len)
|
||||
}
|
||||
|
||||
static void *
|
||||
plip_lpt_init(void *lpt)
|
||||
plip_lpt_init(const device_t *info)
|
||||
{
|
||||
plip_t *dev = (plip_t *) calloc(1, sizeof(plip_t));
|
||||
|
||||
plip_log(1, "PLIP: lpt_init()\n");
|
||||
|
||||
dev->lpt = lpt;
|
||||
dev->lpt = lpt_attach(plip_write_data, plip_write_ctrl, NULL, plip_read_status, NULL, NULL, NULL, dev);
|
||||
|
||||
memset(dev->mac, 0xfc, 6); /* static MAC used by Linux; just a placeholder */
|
||||
|
||||
dev->status = 0x80;
|
||||
@@ -485,24 +486,22 @@ plip_close(void *priv)
|
||||
free(priv);
|
||||
}
|
||||
|
||||
const lpt_device_t lpt_plip_device = {
|
||||
.name = "Parallel Line Internet Protocol",
|
||||
.internal_name = "plip",
|
||||
.init = plip_lpt_init,
|
||||
.close = plip_close,
|
||||
.write_data = plip_write_data,
|
||||
.write_ctrl = plip_write_ctrl,
|
||||
.strobe = NULL,
|
||||
.read_status = plip_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL
|
||||
const device_t lpt_plip_device = {
|
||||
.name = "Parallel Line Internet Protocol (LPT)",
|
||||
.internal_name = "plip",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = plip_lpt_init,
|
||||
.close = plip_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t plip_device = {
|
||||
.name = "Parallel Line Internet Protocol",
|
||||
.name = "Parallel Line Internet Protocol (Network)",
|
||||
.internal_name = "plip",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
|
||||
@@ -886,7 +886,6 @@ static void
|
||||
tulip_reset(void *priv)
|
||||
{
|
||||
TULIPState *s = (TULIPState *) priv;
|
||||
const uint16_t *eeprom_data = nmc93cxx_eeprom_data(s->eeprom);
|
||||
s->csr[0] = 0xfe000000;
|
||||
s->csr[1] = 0xffffffff;
|
||||
s->csr[2] = 0xffffffff;
|
||||
@@ -901,6 +900,8 @@ tulip_reset(void *priv)
|
||||
s->csr[14] = 0xffffffff;
|
||||
s->csr[15] = 0x8ff00000;
|
||||
if (s->device_info->local != 3) {
|
||||
const uint16_t *eeprom_data = nmc93cxx_eeprom_data(s->eeprom);
|
||||
|
||||
s->subsys_id = eeprom_data[1];
|
||||
s->subsys_ven_id = eeprom_data[0];
|
||||
}
|
||||
|
||||
@@ -23,10 +23,6 @@ add_library(print OBJECT
|
||||
prt_ps.c
|
||||
)
|
||||
|
||||
if(PCL)
|
||||
target_compile_definitions(print PRIVATE USE_PCL)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
find_library(GHOSTSCRIPT_LIB gs)
|
||||
if (NOT GHOSTSCRIPT_LIB)
|
||||
|
||||
@@ -1979,7 +1979,7 @@ read_status(void *priv)
|
||||
}
|
||||
|
||||
static void *
|
||||
escp_init(void *lpt)
|
||||
escp_init(const device_t *info)
|
||||
{
|
||||
escp_t *dev = NULL;
|
||||
|
||||
@@ -1995,7 +1995,8 @@ escp_init(void *lpt)
|
||||
/* Initialize a device instance. */
|
||||
dev = (escp_t *) calloc(1, sizeof(escp_t));
|
||||
dev->ctrl = 0x04;
|
||||
dev->lpt = lpt;
|
||||
|
||||
dev->lpt = lpt_attach(write_data, write_ctrl, strobe, read_status, read_ctrl, NULL, NULL, dev);
|
||||
|
||||
rom_get_full_path(dev->fontpath, "roms/printer/fonts/");
|
||||
|
||||
@@ -2109,13 +2110,13 @@ static const device_config_t lpt_prt_escp_config[] = {
|
||||
#endif
|
||||
// clang-format on
|
||||
|
||||
const device_t prt_escp_device = {
|
||||
const device_t lpt_prt_escp_device = {
|
||||
.name = "Generic ESC/P 2 Dot-Matrix Printer",
|
||||
.internal_name = "dot_matrix",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.init = escp_init,
|
||||
.close = escp_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
@@ -2126,20 +2127,3 @@ const device_t prt_escp_device = {
|
||||
.config = NULL
|
||||
#endif
|
||||
};
|
||||
|
||||
const lpt_device_t lpt_prt_escp_device = {
|
||||
.name = "Generic ESC/P 2 Dot-Matrix Printer",
|
||||
.internal_name = "dot_matrix",
|
||||
.init = escp_init,
|
||||
.close = escp_close,
|
||||
.write_data = write_data,
|
||||
.write_ctrl = write_ctrl,
|
||||
.strobe = strobe,
|
||||
.read_status = read_status,
|
||||
.read_ctrl = read_ctrl,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL,
|
||||
.cfgdevice = (device_t *) &prt_escp_device
|
||||
};
|
||||
|
||||
@@ -61,40 +61,55 @@
|
||||
|
||||
#define POSTSCRIPT_BUFFER_LENGTH 65536
|
||||
|
||||
enum {
|
||||
LANG_RAW = 0,
|
||||
LANG_PS,
|
||||
LANG_PCL_5E,
|
||||
LANG_PCL_5C,
|
||||
LANG_HP_RTL,
|
||||
LANG_PCL_6
|
||||
};
|
||||
|
||||
typedef struct ps_t {
|
||||
const char *name;
|
||||
|
||||
void *lpt;
|
||||
void * lpt;
|
||||
|
||||
pc_timer_t pulse_timer;
|
||||
pc_timer_t timeout_timer;
|
||||
pc_timer_t pulse_timer;
|
||||
pc_timer_t timeout_timer;
|
||||
|
||||
char data;
|
||||
bool ack;
|
||||
bool select;
|
||||
bool busy;
|
||||
bool int_pending;
|
||||
bool error;
|
||||
bool autofeed;
|
||||
bool pcl;
|
||||
bool pending;
|
||||
bool pjl;
|
||||
bool pjl_command;
|
||||
uint8_t ctrl;
|
||||
uint8_t pcl_escape;
|
||||
uint16_t pjl_command_start;
|
||||
bool ack;
|
||||
bool select;
|
||||
bool busy;
|
||||
bool int_pending;
|
||||
bool error;
|
||||
bool autofeed;
|
||||
bool pcl;
|
||||
bool pending;
|
||||
bool pjl;
|
||||
bool pjl_command;
|
||||
|
||||
char printer_path[260];
|
||||
char data;
|
||||
|
||||
char filename[260];
|
||||
char printer_path[260];
|
||||
char filename[260];
|
||||
|
||||
char buffer[POSTSCRIPT_BUFFER_LENGTH];
|
||||
size_t buffer_pos;
|
||||
char buffer[POSTSCRIPT_BUFFER_LENGTH];
|
||||
|
||||
uint8_t ctrl;
|
||||
uint8_t pcl_escape;
|
||||
|
||||
uint16_t pjl_command_start;
|
||||
|
||||
int lang;
|
||||
|
||||
size_t buffer_pos;
|
||||
} ps_t;
|
||||
|
||||
typedef struct gsapi_revision_s {
|
||||
const char *product;
|
||||
const char *copyright;
|
||||
|
||||
long revision;
|
||||
long revisiondate;
|
||||
} gsapi_revision_t;
|
||||
@@ -155,8 +170,23 @@ convert_to_pdf(ps_t *dev)
|
||||
gsargv[arg++] = "-dSAFER";
|
||||
gsargv[arg++] = "-sDEVICE=pdfwrite";
|
||||
if (dev->pcl) {
|
||||
gsargv[arg++] = "-LPCL";
|
||||
gsargv[arg++] = "-lPCL5E";
|
||||
if (dev->lang == LANG_PCL_6)
|
||||
gsargv[arg++] = "-LPCLXL";
|
||||
else {
|
||||
gsargv[arg++] = "-LPCL";
|
||||
switch (dev->lang) {
|
||||
default:
|
||||
case LANG_PCL_5E:
|
||||
gsargv[arg++] = "-lPCL5E";
|
||||
break;
|
||||
case LANG_PCL_5C:
|
||||
gsargv[arg++] = "-lPCL5C";
|
||||
break;
|
||||
case LANG_HP_RTL:
|
||||
gsargv[arg++] = "-lRTL";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
gsargv[arg++] = "-q";
|
||||
gsargv[arg++] = "-o";
|
||||
@@ -196,7 +226,7 @@ reset_ps(ps_t *dev)
|
||||
dev->ack = false;
|
||||
|
||||
if (dev->pending) {
|
||||
if (ghostscript_handle != NULL)
|
||||
if ((dev->lang != LANG_RAW) && (ghostscript_handle != NULL))
|
||||
convert_to_pdf(dev);
|
||||
|
||||
dev->filename[0] = 0;
|
||||
@@ -220,8 +250,14 @@ write_buffer(ps_t *dev, bool finish)
|
||||
if (dev->buffer_pos == 0)
|
||||
return;
|
||||
|
||||
if (dev->filename[0] == 0)
|
||||
plat_tempfile(dev->filename, NULL, dev->pcl ? ".pcl" : ".ps");
|
||||
if (dev->filename[0] == 0) {
|
||||
if (dev->lang == LANG_RAW)
|
||||
plat_tempfile(dev->filename, NULL, ".raw");
|
||||
else if (dev->pcl)
|
||||
plat_tempfile(dev->filename, NULL, (dev->lang == LANG_PCL_6) ? ".pxl" : ".pcl");
|
||||
else
|
||||
plat_tempfile(dev->filename, NULL, ".ps");
|
||||
}
|
||||
|
||||
strcpy(path, dev->printer_path);
|
||||
path_slash(path);
|
||||
@@ -244,7 +280,7 @@ write_buffer(ps_t *dev, bool finish)
|
||||
dev->buffer_pos = 0;
|
||||
|
||||
if (finish) {
|
||||
if (ghostscript_handle != NULL)
|
||||
if ((dev->lang != LANG_RAW) && (ghostscript_handle != NULL))
|
||||
convert_to_pdf(dev);
|
||||
|
||||
dev->filename[0] = 0;
|
||||
@@ -262,7 +298,7 @@ timeout_timer(void *priv)
|
||||
if (dev->buffer_pos != 0)
|
||||
write_buffer(dev, true);
|
||||
else if (dev->pending) {
|
||||
if (ghostscript_handle != NULL)
|
||||
if ((dev->lang != LANG_RAW) && (ghostscript_handle != NULL))
|
||||
convert_to_pdf(dev);
|
||||
|
||||
dev->filename[0] = 0;
|
||||
@@ -284,92 +320,115 @@ ps_write_data(uint8_t val, void *priv)
|
||||
dev->data = (char) val;
|
||||
}
|
||||
|
||||
static int
|
||||
process_escape(ps_t *dev, int do_pjl)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (dev->data == 0x1b)
|
||||
dev->pcl_escape = 1;
|
||||
else switch (dev->pcl_escape) {
|
||||
case 1:
|
||||
dev->pcl_escape = (dev->data == 0x25) ? 2 : 0;
|
||||
break;
|
||||
case 2:
|
||||
dev->pcl_escape = (dev->data == 0x2d) ? 3 : 0;
|
||||
break;
|
||||
case 3:
|
||||
dev->pcl_escape = (dev->data == 0x31) ? 4 : 0;
|
||||
break;
|
||||
case 4:
|
||||
dev->pcl_escape = (dev->data == 0x32) ? 5 : 0;
|
||||
break;
|
||||
case 5:
|
||||
dev->pcl_escape = (dev->data == 0x33) ? 6 : 0;
|
||||
break;
|
||||
case 6:
|
||||
dev->pcl_escape = (dev->data == 0x34) ? 7 : 0;
|
||||
break;
|
||||
case 7:
|
||||
dev->pcl_escape = (dev->data == 0x35) ? 8 : 0;
|
||||
break;
|
||||
case 8:
|
||||
dev->pcl_escape = 0;
|
||||
if (dev->data == 0x58) {
|
||||
if (do_pjl)
|
||||
dev->pjl = true;
|
||||
|
||||
dev->buffer[dev->buffer_pos++] = dev->data;
|
||||
dev->buffer[dev->buffer_pos] = 0;
|
||||
|
||||
/* Wipe the slate clean so that there won't be a bogus empty page output to PDF. */
|
||||
dev->pending = false;
|
||||
ret = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
process_data(ps_t *dev)
|
||||
{
|
||||
/* On PCL, check for escape sequences. */
|
||||
if (dev->pcl) {
|
||||
if (dev->pjl) {
|
||||
dev->buffer[dev->buffer_pos++] = dev->data;
|
||||
|
||||
/* Filter out any PJL commands. */
|
||||
if (dev->pjl_command && (dev->data == '\n')) {
|
||||
dev->pjl_command = false;
|
||||
if (!memcmp(&(dev->buffer[dev->pjl_command_start]), "@PJL ENTER LANGUAGE=PCL", 0x17))
|
||||
dev->pjl = false;
|
||||
else if (!memcmp(&(dev->buffer[dev->pjl_command_start]), "@PJL ENTER LANGUAGE=POSTSCRIPT", 0x1e))
|
||||
fatal("Printing PostScript using the PCL printer is not (yet) supported!\n");
|
||||
dev->buffer_pos = dev->pjl_command_start;
|
||||
} else if (!dev->pjl_command && (dev->buffer_pos >= 0x05) && !memcmp(&(dev->buffer[dev->buffer_pos - 0x5]), "@PJL ", 0x05)) {
|
||||
dev->pjl_command = true;
|
||||
dev->pjl_command_start = dev->buffer_pos - 0x05;
|
||||
}
|
||||
|
||||
dev->buffer[dev->buffer_pos] = 0;
|
||||
return;
|
||||
} else if (dev->data == 0x1b)
|
||||
dev->pcl_escape = 1;
|
||||
else switch (dev->pcl_escape) {
|
||||
case 1:
|
||||
dev->pcl_escape = (dev->data == 0x25) ? 2 : 0;
|
||||
if (dev->data == 0x0e) {
|
||||
dev->buffer[dev->buffer_pos++] = dev->data;
|
||||
dev->buffer[dev->buffer_pos] = 0;
|
||||
|
||||
if (dev->buffer_pos > 2)
|
||||
write_buffer(dev, true);
|
||||
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
dev->pcl_escape = (dev->data == 0x2d) ? 3 : 0;
|
||||
break;
|
||||
case 3:
|
||||
dev->pcl_escape = (dev->data == 0x31) ? 4 : 0;
|
||||
break;
|
||||
case 4:
|
||||
dev->pcl_escape = (dev->data == 0x32) ? 5 : 0;
|
||||
break;
|
||||
case 5:
|
||||
dev->pcl_escape = (dev->data == 0x33) ? 6 : 0;
|
||||
break;
|
||||
case 6:
|
||||
dev->pcl_escape = (dev->data == 0x34) ? 7 : 0;
|
||||
break;
|
||||
case 7:
|
||||
dev->pcl_escape = (dev->data == 0x35) ? 8 : 0;
|
||||
break;
|
||||
case 8:
|
||||
dev->pcl_escape = 0;
|
||||
if (dev->data == 0x58)
|
||||
dev->pjl = true;
|
||||
break;
|
||||
if (dev->lang == LANG_RAW) {
|
||||
if ((dev->data == 0x1b) || (dev->pcl_escape > 0)) {
|
||||
if (process_escape(dev, 0))
|
||||
return;
|
||||
}
|
||||
} else if ((dev->data < 0x20) || (dev->data == 0x7f)) {
|
||||
/* On PostScript, check for non-printable characters. */
|
||||
switch (dev->data) {
|
||||
/* The following characters are considered white-space
|
||||
by the PostScript specification */
|
||||
case '\t':
|
||||
case '\n':
|
||||
case '\f':
|
||||
case '\r':
|
||||
break;
|
||||
} else {
|
||||
/* On PCL, check for escape sequences. */
|
||||
if (dev->pcl) {
|
||||
if (dev->pjl) {
|
||||
dev->buffer[dev->buffer_pos++] = dev->data;
|
||||
|
||||
/* Same with NUL, except we better change it to a space first */
|
||||
case '\0':
|
||||
dev->data = ' ';
|
||||
break;
|
||||
/* Filter out any PJL commands. */
|
||||
if (dev->pjl_command && (dev->data == '\n')) {
|
||||
dev->pjl_command = false;
|
||||
if (!memcmp(&(dev->buffer[dev->pjl_command_start]), "@PJL ENTER LANGUAGE=PCL", 0x17))
|
||||
dev->pjl = false;
|
||||
else if (!memcmp(&(dev->buffer[dev->pjl_command_start]), "@PJL ENTER LANGUAGE=POSTSCRIPT", 0x1e))
|
||||
fatal("Printing PostScript using the PCL printer is not (yet) supported!\n");
|
||||
dev->buffer[dev->buffer_pos] = 0x00;
|
||||
dev->buffer_pos = dev->pjl_command_start;
|
||||
} else if (!dev->pjl_command && (dev->buffer_pos >= 0x05) && !memcmp(&(dev->buffer[dev->buffer_pos - 0x5]), "@PJL ", 0x05)) {
|
||||
dev->pjl_command = true;
|
||||
dev->pjl_command_start = dev->buffer_pos - 0x05;
|
||||
} else if (!dev->pjl_command && (dev->data == 0x1b))
|
||||
/* The universal exit code is also valid in PJL. */
|
||||
dev->pcl_escape = 1;
|
||||
|
||||
/* Ctrl+D (0x04) marks the end of the document */
|
||||
case '\4':
|
||||
write_buffer(dev, true);
|
||||
dev->buffer[dev->buffer_pos] = 0;
|
||||
return;
|
||||
} else if ((dev->data == 0x1b) || (dev->pcl_escape > 0)) {
|
||||
if (process_escape(dev, 1))
|
||||
return;
|
||||
}
|
||||
} else if ((dev->data < 0x20) || (dev->data == 0x7f)) {
|
||||
/* On PostScript, check for non-printable characters. */
|
||||
switch (dev->data) {
|
||||
/* The following characters are considered white-space
|
||||
by the PostScript specification */
|
||||
case '\t':
|
||||
case '\n':
|
||||
case '\f':
|
||||
case '\r':
|
||||
break;
|
||||
|
||||
/* Don't bother with the others */
|
||||
default:
|
||||
return;
|
||||
/* Same with NUL, except we better change it to a space first */
|
||||
case '\0':
|
||||
dev->data = ' ';
|
||||
break;
|
||||
|
||||
/* Ctrl+D (0x04) marks the end of the document */
|
||||
case '\4':
|
||||
write_buffer(dev, true);
|
||||
return;
|
||||
|
||||
/* Don't bother with the others */
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,34 +519,39 @@ ps_read_status(void *priv)
|
||||
}
|
||||
|
||||
static void *
|
||||
ps_init(void *lpt)
|
||||
ps_init(const device_t *info)
|
||||
{
|
||||
ps_t *dev = (ps_t *) calloc(1, sizeof(ps_t));
|
||||
gsapi_revision_t rev;
|
||||
|
||||
dev->ctrl = 0x04;
|
||||
dev->lpt = lpt;
|
||||
dev->pcl = false;
|
||||
|
||||
/* Try loading the DLL. */
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL, ghostscript_imports);
|
||||
dev->lpt = lpt_attach(ps_write_data, ps_write_ctrl, ps_strobe, ps_read_status, NULL, NULL, NULL, dev);
|
||||
dev->lang = device_get_config_int("language");
|
||||
|
||||
if (dev->lang != LANG_RAW) {
|
||||
/* Try loading the DLL. */
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL, ghostscript_imports);
|
||||
#ifdef PATH_GHOSTSCRIPT_DLL_ALT1
|
||||
if (ghostscript_handle == NULL) {
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL_ALT1, ghostscript_imports);
|
||||
if (ghostscript_handle == NULL) {
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL_ALT1, ghostscript_imports);
|
||||
# ifdef PATH_GHOSTSCRIPT_DLL_ALT2
|
||||
if (ghostscript_handle == NULL)
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL_ALT2, ghostscript_imports);
|
||||
if (ghostscript_handle == NULL)
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL_ALT2, ghostscript_imports);
|
||||
# endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (ghostscript_handle == NULL) {
|
||||
ui_msgbox_header(MBX_ERROR, plat_get_string(STRING_GHOSTSCRIPT_ERROR_TITLE), plat_get_string(STRING_GHOSTSCRIPT_ERROR_DESC));
|
||||
} else {
|
||||
if (gsapi_revision(&rev, sizeof(rev)) == 0) {
|
||||
pclog("Loaded %s, rev %ld (%ld)\n", rev.product, rev.revision, rev.revisiondate);
|
||||
} else {
|
||||
dynld_close(ghostscript_handle);
|
||||
ghostscript_handle = NULL;
|
||||
|
||||
if (ghostscript_handle == NULL) {
|
||||
ui_msgbox_header(MBX_ERROR, plat_get_string(STRING_GHOSTSCRIPT_ERROR_TITLE), plat_get_string(STRING_GHOSTSCRIPT_ERROR_DESC));
|
||||
} else {
|
||||
if (gsapi_revision(&rev, sizeof(rev)) == 0) {
|
||||
pclog("Loaded %s, rev %ld (%ld)\n", rev.product, rev.revision, rev.revisiondate);
|
||||
} else {
|
||||
dynld_close(ghostscript_handle);
|
||||
ghostscript_handle = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -506,36 +570,40 @@ ps_init(void *lpt)
|
||||
return dev;
|
||||
}
|
||||
|
||||
#ifdef USE_PCL
|
||||
static void *
|
||||
pcl_init(void *lpt)
|
||||
pcl_init(const device_t *info)
|
||||
{
|
||||
ps_t *dev = (ps_t *) calloc(1, sizeof(ps_t));
|
||||
gsapi_revision_t rev;
|
||||
|
||||
dev->ctrl = 0x04;
|
||||
dev->lpt = lpt;
|
||||
dev->pcl = true;
|
||||
|
||||
/* Try loading the DLL. */
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTPCL_DLL, ghostscript_imports);
|
||||
dev->lpt = lpt_attach(ps_write_data, ps_write_ctrl, ps_strobe, ps_read_status, NULL, NULL, NULL, dev);
|
||||
dev->lang = device_get_config_int("language");
|
||||
|
||||
if (dev->lang != LANG_RAW) {
|
||||
/* Try loading the DLL. */
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTPCL_DLL, ghostscript_imports);
|
||||
#ifdef PATH_GHOSTPCL_DLL_ALT1
|
||||
if (ghostscript_handle == NULL) {
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTPCL_DLL_ALT1, ghostscript_imports);
|
||||
if (ghostscript_handle == NULL) {
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTPCL_DLL_ALT1, ghostscript_imports);
|
||||
# ifdef PATH_GHOSTPCL_DLL_ALT2
|
||||
if (ghostscript_handle == NULL)
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTPCL_DLL_ALT2, ghostscript_imports);
|
||||
if (ghostscript_handle == NULL)
|
||||
ghostscript_handle = dynld_module(PATH_GHOSTPCL_DLL_ALT2, ghostscript_imports);
|
||||
# endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (ghostscript_handle == NULL) {
|
||||
ui_msgbox_header(MBX_ERROR, plat_get_string(STRING_GHOSTPCL_ERROR_TITLE), plat_get_string(STRING_GHOSTPCL_ERROR_DESC));
|
||||
} else {
|
||||
if (gsapi_revision(&rev, sizeof(rev)) == 0) {
|
||||
pclog("Loaded %s, rev %ld (%ld)\n", rev.product, rev.revision, rev.revisiondate);
|
||||
|
||||
if (ghostscript_handle == NULL) {
|
||||
ui_msgbox_header(MBX_ERROR, plat_get_string(STRING_GHOSTPCL_ERROR_TITLE), plat_get_string(STRING_GHOSTPCL_ERROR_DESC));
|
||||
} else {
|
||||
dynld_close(ghostscript_handle);
|
||||
ghostscript_handle = NULL;
|
||||
if (gsapi_revision(&rev, sizeof(rev)) == 0) {
|
||||
pclog("Loaded %s, rev %ld (%ld)\n", rev.product, rev.revision, rev.revisiondate);
|
||||
} else {
|
||||
dynld_close(ghostscript_handle);
|
||||
ghostscript_handle = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -553,7 +621,6 @@ pcl_init(void *lpt)
|
||||
|
||||
return dev;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ps_close(void *priv)
|
||||
@@ -574,36 +641,75 @@ ps_close(void *priv)
|
||||
free(dev);
|
||||
}
|
||||
|
||||
const lpt_device_t lpt_prt_ps_device = {
|
||||
.name = "Generic PostScript Printer",
|
||||
.internal_name = "postscript",
|
||||
.init = ps_init,
|
||||
.close = ps_close,
|
||||
.write_data = ps_write_data,
|
||||
.write_ctrl = ps_write_ctrl,
|
||||
.strobe = ps_strobe,
|
||||
.read_status = ps_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL
|
||||
// clang-format off
|
||||
static const device_config_t lpt_prt_ps_config[] = {
|
||||
{
|
||||
.name = "language",
|
||||
.description = "Language",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = LANG_PS,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "Raw", .value = LANG_RAW },
|
||||
{ .description = "PDF (PostScript)", .value = LANG_PS },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
static const device_config_t lpt_prt_pcl_config[] = {
|
||||
{
|
||||
.name = "language",
|
||||
.description = "Language",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = LANG_PCL_5E,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "Raw", .value = LANG_RAW },
|
||||
{ .description = "PDF (PCL 5e)", .value = LANG_PCL_5E },
|
||||
{ .description = "PDF (PCL 5c)", .value = LANG_PCL_5C },
|
||||
{ .description = "PDF (HP-RTL)", .value = LANG_HP_RTL },
|
||||
{ .description = "PDF (PCL 6)", .value = LANG_PCL_6 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
const device_t lpt_prt_ps_device = {
|
||||
.name = "Generic PostScript Printer",
|
||||
.internal_name = "postscript",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = ps_init,
|
||||
.close = ps_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = lpt_prt_ps_config
|
||||
};
|
||||
|
||||
#ifdef USE_PCL
|
||||
const lpt_device_t lpt_prt_pcl_device = {
|
||||
.name = "Generic PCL5e Printer",
|
||||
.internal_name = "pcl",
|
||||
.init = pcl_init,
|
||||
.close = ps_close,
|
||||
.write_data = ps_write_data,
|
||||
.write_ctrl = ps_write_ctrl,
|
||||
.strobe = ps_strobe,
|
||||
.read_status = ps_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL
|
||||
const device_t lpt_prt_pcl_device = {
|
||||
.name = "Generic PCL Printer",
|
||||
.internal_name = "pcl",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = pcl_init,
|
||||
.close = ps_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = lpt_prt_pcl_config
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -455,13 +455,13 @@ read_status(void *priv)
|
||||
}
|
||||
|
||||
static void *
|
||||
prnt_init(void *lpt)
|
||||
prnt_init(const device_t *info)
|
||||
{
|
||||
/* Initialize a device instance. */
|
||||
prnt_t *dev = (prnt_t *) calloc(1, sizeof(prnt_t));
|
||||
|
||||
dev->ctrl = 0x04;
|
||||
dev->lpt = lpt;
|
||||
dev->lpt = lpt_attach(write_data, write_ctrl, strobe, read_status, NULL, NULL, NULL, dev);
|
||||
|
||||
/* Initialize parameters. */
|
||||
reset_printer(dev);
|
||||
@@ -523,13 +523,13 @@ static const device_config_t lpt_prt_text_config[] = {
|
||||
#endif
|
||||
// clang-format on
|
||||
|
||||
const device_t prt_text_device = {
|
||||
const device_t lpt_prt_text_device = {
|
||||
.name = "Generic Text Printer",
|
||||
.internal_name = "text_prt",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.init = prnt_init,
|
||||
.close = prnt_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
@@ -540,20 +540,3 @@ const device_t prt_text_device = {
|
||||
.config = NULL
|
||||
#endif
|
||||
};
|
||||
|
||||
const lpt_device_t lpt_prt_text_device = {
|
||||
.name = "Generic Text Printer",
|
||||
.internal_name = "text_prt",
|
||||
.init = prnt_init,
|
||||
.close = prnt_close,
|
||||
.write_data = write_data,
|
||||
.write_ctrl = write_ctrl,
|
||||
.strobe = strobe,
|
||||
.read_status = read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL,
|
||||
.cfgdevice = (device_t *) &prt_text_device
|
||||
};
|
||||
|
||||
@@ -3017,3 +3017,6 @@ msgstr ""
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
|
||||
msgid "Raw"
|
||||
msgstr ""
|
||||
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Permetre recompilació"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Avançar ràpidament"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Avançar ràpidament"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Per canviar el directori del sistema, atureu totes les màquines en funcionament."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "En brut"
|
||||
|
||||
@@ -3022,5 +3022,7 @@ msgid "Fast forward"
|
||||
msgstr "Zrychlit"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
"Před změnou systémového adresáře nejprve zastavte všechny běžící počítače."
|
||||
msgstr "Před změnou systémového adresáře nejprve zastavte všechny běžící počítače."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Surový"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-11-29 00:34+0000\n"
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: German <https://weblate.86box.net/projects/86box/86box/de/>\n"
|
||||
"Language: de-DE\n"
|
||||
@@ -2872,7 +2872,7 @@ msgid "%1 VM Manager"
|
||||
msgstr ""
|
||||
|
||||
msgid "%n disk(s)"
|
||||
msgstr ""
|
||||
msgstr "%n Festplatte(n)"
|
||||
|
||||
msgid "Unknown Status"
|
||||
msgstr "Unbekannter Status"
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "Recompilierung &zulassen"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Schnellvorlauf"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Schnellvorlauf"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Um das Systemverzeichnis zu ändern, stoppen Sie alle laufenden Maschinen."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Roh"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-10 12:56+0000\n"
|
||||
"PO-Revision-Date: 2026-01-26 17:57+0000\n"
|
||||
"Last-Translator: DimMan88 <dimman88@hotmail.com>\n"
|
||||
"Language-Team: Greek <https://weblate.86box.net/projects/86box/86box/el/>\n"
|
||||
"Language: el-GR\n"
|
||||
@@ -2919,24 +2919,26 @@ msgstr "Επιτυχής διαγραφή των περιεχομένων NVRAM
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr ""
|
||||
"Ένα σφάλμα προέκυψε κατά την εκκαθάριση των περιεχομένων της NVRAM της "
|
||||
"εικονικής μηχανής \"%1\""
|
||||
|
||||
msgid "%1 VM Manager"
|
||||
msgstr ""
|
||||
msgstr "%1 VM Manager"
|
||||
|
||||
msgid "%n disk(s)"
|
||||
msgstr ""
|
||||
msgstr "%n δίσκος(οι)"
|
||||
|
||||
msgid "Unknown Status"
|
||||
msgstr ""
|
||||
msgstr "Άγνωστη Κατάσταση"
|
||||
|
||||
msgid "No Machines Found!"
|
||||
msgstr ""
|
||||
msgstr "Δεν βρέθηκαν μηχανές!"
|
||||
|
||||
msgid "Check for updates on startup"
|
||||
msgstr "Έλεγχος για ενημερώσεις κατα την εκκίνηση"
|
||||
|
||||
msgid "Unable to determine release information"
|
||||
msgstr ""
|
||||
msgstr "Αδυναμία προσδιορισμού πληροφοριών έκδοσης"
|
||||
|
||||
msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later."
|
||||
msgstr ""
|
||||
@@ -2947,82 +2949,84 @@ msgstr ""
|
||||
"Παρακαλώ προσπαθήστε ξανά αργότερα."
|
||||
|
||||
msgid "Update check complete"
|
||||
msgstr ""
|
||||
msgstr "Ο έλεγχος ενημερώσεων ολοκληρώθηκε"
|
||||
|
||||
msgid "stable"
|
||||
msgstr ""
|
||||
msgstr "σταθερή"
|
||||
|
||||
msgid "beta"
|
||||
msgstr ""
|
||||
msgstr "δοκιμαστική"
|
||||
|
||||
msgid "You are running the latest %1 version of 86Box: %2"
|
||||
msgstr ""
|
||||
msgstr "Τρέχετε την τελευταία %1 έκδοση του 86Box: %2"
|
||||
|
||||
msgid "version"
|
||||
msgstr ""
|
||||
msgstr "έκδοση"
|
||||
|
||||
msgid "build"
|
||||
msgstr ""
|
||||
msgstr "build"
|
||||
|
||||
msgid "You are currently running version <b>%1</b>."
|
||||
msgstr ""
|
||||
msgstr "Τρέχετε την έκδοση <b>%1</b>."
|
||||
|
||||
msgid "<b>Version %1</b> is now available."
|
||||
msgstr ""
|
||||
msgstr "<b>Έκδοση %1</b> είναι διαθέσιμη."
|
||||
|
||||
msgid "You are currently running build <b>%1</b>."
|
||||
msgstr ""
|
||||
msgstr "Τρέχετε το build <b>%1</b>."
|
||||
|
||||
msgid "<b>Build %1</b> is now available."
|
||||
msgstr ""
|
||||
msgstr "<b>Build %1</b> είναι τώρα διαθέσιμο."
|
||||
|
||||
msgid "Would you like to visit the download page?"
|
||||
msgstr ""
|
||||
msgstr "Επιθυμείτε να επισκεφθείτε την σελίδα λήψεων;"
|
||||
|
||||
msgid "Visit download page"
|
||||
msgstr ""
|
||||
msgstr "Επίσκεψη σελίδας λήψεων"
|
||||
|
||||
msgid "Update check"
|
||||
msgstr ""
|
||||
msgstr "Έλεγχος ενημερώσεων"
|
||||
|
||||
msgid "Checking for updates…"
|
||||
msgstr "Έλεγχος για ενημερώσεις…"
|
||||
|
||||
msgid "86Box Update"
|
||||
msgstr ""
|
||||
msgstr "Ενημέρωση 86Box"
|
||||
|
||||
msgid "Release notes:"
|
||||
msgstr ""
|
||||
msgstr "Σημειώσεις έκδοσης:"
|
||||
|
||||
msgid "%1 Hz"
|
||||
msgstr ""
|
||||
msgstr "%1 Hz"
|
||||
|
||||
msgid "Virtual machine crash"
|
||||
msgstr ""
|
||||
msgstr "Σφάλμα εικονικής μηχανής"
|
||||
|
||||
msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2."
|
||||
msgstr ""
|
||||
"Η διεργασία της εικονικής μηχανής \"%1\" τερματίστηκε απροσδόκητα με κωδικό "
|
||||
"εξόδου %2."
|
||||
|
||||
msgid "The system will not be added."
|
||||
msgstr ""
|
||||
msgstr "Το σύστημα δεν θα προστεθεί."
|
||||
|
||||
msgid "&Update mouse every CPU frame"
|
||||
msgstr "&Ανανέωση ποντικιού ανα καρέ CPU"
|
||||
|
||||
msgid "Hue"
|
||||
msgstr ""
|
||||
msgstr "Απόχρωση"
|
||||
|
||||
msgid "Saturation"
|
||||
msgstr ""
|
||||
msgstr "Κορεσμός"
|
||||
|
||||
msgid "Contrast"
|
||||
msgstr ""
|
||||
msgstr "Αντίθεση"
|
||||
|
||||
msgid "Brightness"
|
||||
msgstr ""
|
||||
msgstr "Φωτεινότητα"
|
||||
|
||||
msgid "Sharpness"
|
||||
msgstr ""
|
||||
msgstr "Οξύτητα"
|
||||
|
||||
msgid "&CGA composite settings…"
|
||||
msgstr "Ρυθμίσεις &CGA composite…"
|
||||
@@ -3073,10 +3077,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Να επιτρέπεται ανασύνταξη"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Γρήγορα μπροστά"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Γρήγορα μπροστά"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Για να αλλάξετε τον κατάλογο συστήματος, σταματήστε πρώτα όλες τις μηχανές σε λειτουργία."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Αρχικος"
|
||||
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Permitir recompilación"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Avance rápido"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Avance rápido"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Para cambiar el directorio del sistema, detenga todas las máquinas en funcionamiento."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Plano"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-29 09:54+0000\n"
|
||||
"Last-Translator: Daniel Gurney <daniel@gurney.dev>\n"
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: Finnish <https://weblate.86box.net/projects/86box/86box/fi/>\n"
|
||||
"Language: fi-FI\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -637,7 +637,7 @@ msgid "MO drives:"
|
||||
msgstr "Magneettisoptiset asemat (MO):"
|
||||
|
||||
msgid "MO:"
|
||||
msgstr ""
|
||||
msgstr "MO:"
|
||||
|
||||
msgid "Removable disks:"
|
||||
msgstr "Irrotettavat levyt:"
|
||||
@@ -1843,7 +1843,7 @@ msgid "Microsoft Serial Mouse"
|
||||
msgstr "Microsoft-sarjahiiri"
|
||||
|
||||
msgid "Microsoft Serial BallPoint"
|
||||
msgstr ""
|
||||
msgstr "Microsoft BallPoint-sarjahiiri"
|
||||
|
||||
msgid "Logitech Serial Mouse"
|
||||
msgstr "Logitech-sarjahiiri"
|
||||
@@ -1930,7 +1930,7 @@ msgid "Enable BIOS extension ROM Writes (ROM #4)"
|
||||
msgstr "Salli BIOS-laajennuksen ROM-kirjoitukset (ROM #4)"
|
||||
|
||||
msgid "Linear framebuffer base"
|
||||
msgstr ""
|
||||
msgstr "Lineaarisen kehyspuskurin perusosoite"
|
||||
|
||||
msgid "Address"
|
||||
msgstr "Osoite"
|
||||
@@ -2179,7 +2179,7 @@ msgid "WSS DMA"
|
||||
msgstr "WSS-DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
msgstr "RTC:n IRQ"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr "RTC-portin osoite"
|
||||
@@ -2380,10 +2380,10 @@ msgid "Linear"
|
||||
msgstr "Lineaarinen"
|
||||
|
||||
msgid "4th Order"
|
||||
msgstr ""
|
||||
msgstr "4. kertaluku"
|
||||
|
||||
msgid "7th Order"
|
||||
msgstr ""
|
||||
msgstr "7. kertaluku"
|
||||
|
||||
msgid "Non-timed (original)"
|
||||
msgstr "Ajastamaton (alkuperäinen)"
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Salli uudelleenkääntäminen"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Nopea eteneminen"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Nopea eteneminen"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Järjestelmähakemiston muuttamiseksi pysäytä kaikki käynnissä olevat koneet."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Raaka"
|
||||
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Permettre la recompilation"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Avance rapide"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Avance rapide"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Pour modifier le répertoire système, arrêtez toutes les machines en cours d'exécution."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Brut"
|
||||
|
||||
@@ -3018,10 +3018,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Omogući rekompilaciju"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Brzo naprijed"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Brzo naprijed"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Za promjenu sustavskog direktorija zaustavite sve pokrenute strojeve."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Neobrađeni podaci"
|
||||
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Permetti ricompilazione"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Avanti veloce"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Avanti veloce"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Per modificare la directory di sistema, arrestare tutte le macchine in funzione."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Grezzo"
|
||||
|
||||
@@ -3017,10 +3017,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "再コンパイルを許可する(&A)"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "早送り(&F)"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "早送り"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "システムディレクトリを変更するには、稼働中のマシンをすべて停止してください。"
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "生"
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: Korean <https://weblate.86box.net/projects/86box/86box/ko/>\n"
|
||||
"Language: ko-KR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
"X-Language: ko_KR\n"
|
||||
"X-Source-Language: en_US\n"
|
||||
|
||||
@@ -1780,7 +1786,7 @@ msgid "VDE Socket:"
|
||||
msgstr "VDE 소켓:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "TAP 브리지 장치:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box 유닛 테스터"
|
||||
@@ -2173,16 +2179,16 @@ msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
msgstr "RTC의 IRQ"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
msgstr "RTC의 포트 주소"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
msgstr "온보드 RTC"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
msgstr "설치되지 않음"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL 사용"
|
||||
@@ -2806,7 +2812,7 @@ msgid "Toggle fullscreen"
|
||||
msgstr "전체 화면 모드 전환"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
msgstr "전체 화면 모드에서 UI 전환"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "마우스 포인터를 해제합니다"
|
||||
@@ -3010,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "재컴파일 허용(&A)"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "빠른 전진(&F)"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "빠른 전진"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "시스템 디렉터리를 변경하려면 실행 중인 모든 머신을 중지하십시오."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "원본"
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: Norwegian Bokmål <https://weblate.86box.net/projects/86box/"
|
||||
"86box/nb_NO/>\n"
|
||||
"Language: nb-NO\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
"X-Language: nb_NO\n"
|
||||
"X-Source-Language: en_US\n"
|
||||
|
||||
@@ -1780,7 +1787,7 @@ msgid "VDE Socket:"
|
||||
msgstr "VDE-kontakt:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "TAP-broenhet:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box-enhetstester"
|
||||
@@ -2173,16 +2180,16 @@ msgid "WSS DMA"
|
||||
msgstr "WSS-DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
msgstr "IRQ for RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
msgstr "Portadresse for RTC"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
msgstr "Innebygd RTC"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
msgstr "Ikke installert"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Aktiver OPL"
|
||||
@@ -2806,7 +2813,7 @@ msgid "Toggle fullscreen"
|
||||
msgstr "Veksle fullskjerm"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
msgstr "Veksle mellom brukergrensesnittet i fullskjermmodus"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "Frigi musepeker"
|
||||
@@ -3010,10 +3017,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Tillat rekompilering"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Spol fremover"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Spol fremover"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "For å endre systemkatalogen, stopp alle maskiner som er kjører."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Rå"
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://weblate.86box.net/projects/86box/86box/nl/>\n"
|
||||
"Language: nl-NL\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
"X-Language: nl_NL\n"
|
||||
"X-Source-Language: en_US\n"
|
||||
|
||||
@@ -1780,7 +1786,7 @@ msgid "VDE Socket:"
|
||||
msgstr "VDE-socket:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "TAP-brugapparaat:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box Apparaattester"
|
||||
@@ -2173,16 +2179,16 @@ msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
msgstr "IRQ van de RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
msgstr "Poortadres van de RTC"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
msgstr "Ingebouwde RTC"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
msgstr "Niet geïnstalleerd"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL inschakelen"
|
||||
@@ -2806,7 +2812,7 @@ msgid "Toggle fullscreen"
|
||||
msgstr "Volledig scherm omschakelen"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
msgstr "Schakel de UI in volledig scherm"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "Geef muis vrij"
|
||||
@@ -3010,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "Recompilatie &toestaan"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Snel vooruitspoelen"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Snel vooruitspoelen"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Om de systeemmap te wijzigen, moet u alle actieve machines stoppen."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Ruw"
|
||||
|
||||
@@ -3017,10 +3017,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Zezwól na rekompilację"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Przewiń do przodu"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Przewiń do przodu"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Aby zmienić katalog systemowy, zatrzymaj wszystkie działające maszyny."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Surowy"
|
||||
|
||||
@@ -3010,10 +3010,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Permitir recompilação"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Avançar rapidamente"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Avançar rapidamente"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Para alterar o diretório do sistema, pare todas as máquinas em funcionamento."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Bruto"
|
||||
|
||||
@@ -3017,10 +3017,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Permitir recompilação"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Avançar rapidamente"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Avançar rapidamente"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Para alterar o diretório do sistema, pare todas as máquinas em funcionamento."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Bruto"
|
||||
|
||||
@@ -3036,3 +3036,6 @@ msgstr "Перемотка вперёд"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr "Чтобы изменить системную папку, остановите все запущенные машины."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Сырой"
|
||||
|
||||
@@ -3016,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Povoliť rekompiláciu"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Rýchly posun dopredu"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Rýchly posun dopredu"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Ak chcete zmeniť systémový adresár, zastavte všetky bežiace stroje."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Surový"
|
||||
|
||||
@@ -3018,10 +3018,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Dovoli prevajanje"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Hitro previj"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Hitro previj"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Da bi spremenili sistemski imenik, ustavite vse naprave, ki se izvajajo."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Neobdelan"
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://weblate.86box.net/projects/86box/86box/sv/>\n"
|
||||
"Language: sv-SE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
"X-Language: sv_SE\n"
|
||||
"X-Source-Language: en_US\n"
|
||||
|
||||
@@ -1780,7 +1786,7 @@ msgid "VDE Socket:"
|
||||
msgstr "VDE-sockel:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "TAP-bryggaenhet:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box enhetsprövare"
|
||||
@@ -2173,16 +2179,16 @@ msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
msgstr "IRQ för RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
msgstr "Portadress för RTC"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
msgstr "Inbyggd RTC"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
msgstr "Ej installerad"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Aktivera OPL"
|
||||
@@ -2806,7 +2812,7 @@ msgid "Toggle fullscreen"
|
||||
msgstr "Helskärm"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
msgstr "Växla UI till helskärmsläge"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "Släpp muspekare"
|
||||
@@ -3010,10 +3016,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Tillåt omkompilering"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Spola fram"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Spola fram"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "ör att ändra systemkatalogen, stoppa alla maskiner som är körs."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Rå"
|
||||
|
||||
@@ -3023,3 +3023,6 @@ msgstr "İleri sar"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr "Sistem dizinini değiştirmek için tüm çalışan makineleri durdurun."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Ham"
|
||||
|
||||
@@ -3018,10 +3018,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Дозволити рекомпіляцію"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Перемотай вперед"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Перемотай вперед"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Щоб змінити системний каталог, зупиніть усі машини, що працюють."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Сирий"
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-28 08:57+0000\n"
|
||||
"Last-Translator: OBattler <oubattler@gmail.com>\n"
|
||||
"Language-Team: Vietnamese <https://weblate.86box.net/projects/86box/86box/vi/"
|
||||
">\n"
|
||||
"Language: vi-VN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
"X-Language: vi_VN\n"
|
||||
"X-Source-Language: en_US\n"
|
||||
|
||||
@@ -1780,7 +1787,7 @@ msgid "VDE Socket:"
|
||||
msgstr "Ổ cắm VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "Thiết bị cầu nối TAP:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Trình kiểm tra đơn vị 86box"
|
||||
@@ -2173,16 +2180,16 @@ msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
msgstr "IRQ của RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
msgstr "Địa chỉ cổng của RTC"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
msgstr "RTC tích hợp trên bo mạch"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
msgstr "Chưa được cài đặt"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Bật OPL"
|
||||
@@ -2806,7 +2813,7 @@ msgid "Toggle fullscreen"
|
||||
msgstr "Bật/tắt toàn màn hình"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
msgstr "Chuyển đổi giao diện người dùng sang chế độ toàn màn hình"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "Thả con trỏ chuột"
|
||||
@@ -3010,10 +3017,13 @@ msgid "&Allow recompilation"
|
||||
msgstr "&Cho phép biên dịch lại"
|
||||
|
||||
msgid "&Fast forward"
|
||||
msgstr ""
|
||||
msgstr "&Chuyển nhanh băng"
|
||||
|
||||
msgid "Fast forward"
|
||||
msgstr ""
|
||||
msgstr "Chuyển nhanh băng"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr ""
|
||||
msgstr "Để thay đổi thư mục hệ thống, hãy tắt tất cả các máy đang chạy."
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "Thô"
|
||||
|
||||
@@ -3024,3 +3024,6 @@ msgstr "快进"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr "请在变更系统目录前关闭所有正在运行的虚拟机。"
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "原始"
|
||||
|
||||
@@ -3024,3 +3024,6 @@ msgstr "快轉"
|
||||
|
||||
msgid "To change the system directory, stop all running machines."
|
||||
msgstr "欲變更系統目錄,請先停止全部運行中的機器。"
|
||||
|
||||
msgid "Raw"
|
||||
msgstr "原始"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef QT_DEFS_HPP
|
||||
#define QT_DEFS_HPP
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
||||
#define CHECK_STATE_CHANGED checkStateChanged
|
||||
#else
|
||||
#define CHECK_STATE_CHANGED stateChanged
|
||||
|
||||
@@ -138,13 +138,15 @@ SettingsPorts::onCurrentMachineChanged(int machineId)
|
||||
if (lptName == nullptr)
|
||||
break;
|
||||
|
||||
const QString name = tr(lptName);
|
||||
if (lpt_device_available(c)) {
|
||||
const QString name = tr(lptName);
|
||||
|
||||
for (uint8_t i = 0; i < PARALLEL_MAX; ++i) {
|
||||
int row = Models::AddEntry(models[i], name, c);
|
||||
for (uint8_t i = 0; i < PARALLEL_MAX; ++i) {
|
||||
int row = Models::AddEntry(models[i], name, c);
|
||||
|
||||
if (c == lpt_ports[i].device)
|
||||
selectedRows[i] = row - removeRows_[i];
|
||||
if (c == lpt_ports[i].device)
|
||||
selectedRows[i] = row - removeRows_[i];
|
||||
}
|
||||
}
|
||||
|
||||
c++;
|
||||
|
||||
@@ -89,11 +89,11 @@ dac_get_buffer(int32_t *buffer, int len, void *priv)
|
||||
}
|
||||
|
||||
static void *
|
||||
dac_init(void *lpt)
|
||||
dac_init(UNUSED(const device_t *info))
|
||||
{
|
||||
lpt_dac_t *lpt_dac = calloc(1, sizeof(lpt_dac_t));
|
||||
|
||||
lpt_dac->lpt = lpt;
|
||||
lpt_dac->lpt = lpt_attach(dac_write_data, dac_write_ctrl, dac_strobe, dac_read_status, NULL, NULL, NULL, lpt_dac);
|
||||
|
||||
sound_add_handler(dac_get_buffer, lpt_dac);
|
||||
|
||||
@@ -101,9 +101,9 @@ dac_init(void *lpt)
|
||||
}
|
||||
|
||||
static void *
|
||||
dac_stereo_init(void *lpt)
|
||||
dac_stereo_init(const device_t *info)
|
||||
{
|
||||
lpt_dac_t *lpt_dac = dac_init(lpt);
|
||||
lpt_dac_t *lpt_dac = dac_init(info);
|
||||
|
||||
lpt_dac->is_stereo = 1;
|
||||
|
||||
@@ -117,34 +117,30 @@ dac_close(void *priv)
|
||||
free(lpt_dac);
|
||||
}
|
||||
|
||||
const lpt_device_t lpt_dac_device = {
|
||||
.name = "LPT DAC / Covox Speech Thing",
|
||||
.internal_name = "lpt_dac",
|
||||
.init = dac_init,
|
||||
.close = dac_close,
|
||||
.write_data = dac_write_data,
|
||||
.write_ctrl = dac_write_ctrl,
|
||||
.strobe = dac_strobe,
|
||||
.read_status = dac_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL
|
||||
const device_t lpt_dac_device = {
|
||||
.name = "LPT DAC / Covox Speech Thing",
|
||||
.internal_name = "lpt_dac",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = dac_init,
|
||||
.close = dac_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const lpt_device_t lpt_dac_stereo_device = {
|
||||
.name = "Stereo LPT DAC",
|
||||
.internal_name = "lpt_dac_stereo",
|
||||
.init = dac_stereo_init,
|
||||
.close = dac_close,
|
||||
.write_data = dac_write_data,
|
||||
.write_ctrl = dac_write_ctrl,
|
||||
.strobe = dac_strobe,
|
||||
.read_status = dac_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL
|
||||
const device_t lpt_dac_stereo_device = {
|
||||
.name = "Stereo LPT DAC",
|
||||
.internal_name = "lpt_dac_stereo",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = dac_stereo_init,
|
||||
.close = dac_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
@@ -114,11 +114,11 @@ dss_callback(void *priv)
|
||||
}
|
||||
|
||||
static void *
|
||||
dss_init(void *lpt)
|
||||
dss_init(UNUSED(const device_t *info))
|
||||
{
|
||||
dss_t *dss = calloc(1, sizeof(dss_t));
|
||||
|
||||
dss->lpt = lpt;
|
||||
dss->lpt = lpt_attach(dss_write_data, dss_write_ctrl, NULL, dss_read_status, NULL, NULL, NULL, dss);
|
||||
|
||||
sound_add_handler(dss_get_buffer, dss);
|
||||
timer_add(&dss->timer, dss_callback, dss, 1);
|
||||
@@ -133,18 +133,16 @@ dss_close(void *priv)
|
||||
free(dss);
|
||||
}
|
||||
|
||||
const lpt_device_t dss_device = {
|
||||
.name = "Disney Sound Source",
|
||||
.internal_name = "dss",
|
||||
.init = dss_init,
|
||||
.close = dss_close,
|
||||
.write_data = dss_write_data,
|
||||
.strobe = NULL,
|
||||
.write_ctrl = dss_write_ctrl,
|
||||
.read_status = dss_read_status,
|
||||
.read_ctrl = NULL,
|
||||
.epp_write_data = NULL,
|
||||
.epp_request_read = NULL,
|
||||
.priv = NULL,
|
||||
.lpt = NULL
|
||||
const device_t dss_device = {
|
||||
.name = "Disney Sound Source",
|
||||
.internal_name = "dss",
|
||||
.flags = DEVICE_LPT,
|
||||
.local = 0,
|
||||
.init = dss_init,
|
||||
.close = dss_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
# After a successful build, you can install the RPMs as follows:
|
||||
# sudo dnf install RPMS/$(uname -m)/86Box-3* RPMS/noarch/86Box-roms*
|
||||
|
||||
%global romver 5.4
|
||||
%global romver 6.0
|
||||
|
||||
Name: 86Box
|
||||
Version: 5.4
|
||||
Version: 6.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Classic PC emulator
|
||||
License: GPLv2+
|
||||
@@ -121,5 +121,5 @@ popd
|
||||
%{_datadir}/%{name}/roms
|
||||
|
||||
%changelog
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 5.4-1
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 6.0-1
|
||||
- Bump release
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</categories>
|
||||
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
|
||||
<releases>
|
||||
<release version="5.4" date="2025-12-23"/>
|
||||
<release version="6.0" date="2026-01-28"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<description>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -106,7 +106,11 @@ compaq_plasma_waitstates(UNUSED(void *priv))
|
||||
int ws;
|
||||
|
||||
ws = ws_array[cycles & 0xf];
|
||||
sub_cycles(ws);
|
||||
|
||||
if (is_nec)
|
||||
sub_cycles_vx0(ws);
|
||||
else
|
||||
sub_cycles(ws);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -91,7 +91,11 @@ nga_waitstates(UNUSED(void *priv))
|
||||
int ws;
|
||||
|
||||
ws = ws_array[cycles & 0xf];
|
||||
sub_cycles(ws);
|
||||
|
||||
if (is_nec)
|
||||
sub_cycles_vx0(ws);
|
||||
else
|
||||
sub_cycles(ws);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -157,7 +157,11 @@ ogc_waitstates(UNUSED(void *priv))
|
||||
int ws;
|
||||
|
||||
ws = ws_array[cycles & 0xf];
|
||||
sub_cycles(ws);
|
||||
|
||||
if (is_nec)
|
||||
sub_cycles_vx0(ws);
|
||||
else
|
||||
sub_cycles(ws);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "86box",
|
||||
"version-string": "5.4",
|
||||
"version-string": "6.0",
|
||||
"homepage": "https://86box.net/",
|
||||
"documentation": "https://86box.readthedocs.io/",
|
||||
"license": "GPL-2.0-or-later",
|
||||
|
||||
Reference in New Issue
Block a user