Merge branch 'master' into net-add-tap-backend
This commit is contained in:
@@ -8,21 +8,26 @@
|
||||
*
|
||||
* Main include file for the application.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
*
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
* Copyright 2017-2020 Fred N. van Kempen.
|
||||
* Copyright 2021 Laci bá'
|
||||
* Copyright 2021-2025 Jasmine Iwanek.
|
||||
*/
|
||||
#ifndef EMU_86BOX_H
|
||||
#define EMU_86BOX_H
|
||||
|
||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
/* Doesn't compile on NetBSD/OpenBSD without this include */
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
/* Configuration values. */
|
||||
#define GFXCARD_MAX 2
|
||||
#define SERIAL_MAX 7
|
||||
#define SERIAL_MAX 8
|
||||
#define PARALLEL_MAX 4
|
||||
#define SCREEN_RES_X 640
|
||||
#define SCREEN_RES_Y 480
|
||||
@@ -33,14 +38,14 @@
|
||||
#define SCREENSHOT_PATH "screenshots"
|
||||
|
||||
/* Recently used images */
|
||||
#define MAX_PREV_IMAGES 4
|
||||
#define MAX_PREV_IMAGES 10
|
||||
#define MAX_IMAGE_PATH_LEN 2048
|
||||
|
||||
/* Max UUID Length */
|
||||
#define MAX_UUID_LEN 64
|
||||
|
||||
/* Default language 0xFFFF = from system, 0x409 = en-US */
|
||||
#define DEFAULT_LANGUAGE 0x0409
|
||||
/* Default language code */
|
||||
#define DEFAULT_LANGUAGE "system"
|
||||
|
||||
#define POSTCARDS_NUM 4
|
||||
#define POSTCARD_MASK (POSTCARDS_NUM - 1)
|
||||
@@ -79,8 +84,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Global variables. */
|
||||
extern uint32_t lang_sys; /* (-) system language code */
|
||||
|
||||
extern int dump_on_exit; /* (O) dump regs on exit*/
|
||||
extern int start_in_fullscreen; /* (O) start in fullscreen */
|
||||
#ifdef _WIN32
|
||||
@@ -107,18 +110,17 @@ extern uint64_t instru_run_ms;
|
||||
#define window_y monitor_settings[0].mon_window_y
|
||||
#define window_w monitor_settings[0].mon_window_w
|
||||
#define window_h monitor_settings[0].mon_window_h
|
||||
extern int inhibit_multimedia_keys; /* (C) Inhibit multimedia keys on Windows. */
|
||||
extern int window_remember;
|
||||
extern int vid_resize; /* (C) allow resizing */
|
||||
extern int invert_display; /* (C) invert the display */
|
||||
extern int suppress_overscan; /* (C) suppress overscans */
|
||||
extern uint32_t lang_id; /* (C) language code identifier */
|
||||
extern char icon_set[256]; /* (C) iconset identifier */
|
||||
extern int lang_id; /* (C) language id */
|
||||
extern int scale; /* (C) screen scale factor */
|
||||
extern int dpi_scale; /* (C) DPI scaling of the emulated screen */
|
||||
extern int vid_api; /* (C) video renderer */
|
||||
extern int vid_cga_contrast; /* (C) video */
|
||||
extern int video_fullscreen; /* (C) video */
|
||||
extern int video_fullscreen_first; /* (C) video */
|
||||
extern int video_fullscreen_scale; /* (C) video */
|
||||
extern int enable_overscan; /* (C) video */
|
||||
extern int force_43; /* (C) video */
|
||||
@@ -126,17 +128,19 @@ extern int video_filter_method; /* (C) video */
|
||||
extern int video_vsync; /* (C) video */
|
||||
extern int video_framerate; /* (C) video */
|
||||
extern int gfxcard[GFXCARD_MAX]; /* (C) graphics/video card */
|
||||
extern char video_shader[512]; /* (C) video */
|
||||
extern int bugger_enabled; /* (C) enable ISAbugger */
|
||||
extern int novell_keycard_enabled; /* (C) enable Novell NetWare 2.x key card emulation. */
|
||||
extern int postcard_enabled; /* (C) enable POST card */
|
||||
extern int unittester_enabled; /* (C) enable unit tester device */
|
||||
extern int gameport_type[]; /* (C) enable gameports */
|
||||
extern int isamem_type[]; /* (C) enable ISA mem cards */
|
||||
extern int isarom_type[]; /* (C) enable ISA ROM cards */
|
||||
extern int isartc_type; /* (C) enable ISA RTC card */
|
||||
extern int sound_is_float; /* (C) sound uses FP values */
|
||||
extern int voodoo_enabled; /* (C) video option */
|
||||
extern int ibm8514_standalone_enabled; /* (C) video option */
|
||||
extern int xga_standalone_enabled; /* (C) video option */
|
||||
extern int da2_standalone_enabled; /* (C) video option */
|
||||
extern uint32_t mem_size; /* (C) memory size (Installed on system board) */
|
||||
extern uint32_t isa_mem_size; /* (C) memory size (ISA Memory Cards) */
|
||||
extern int cpu; /* (C) cpu type */
|
||||
@@ -156,6 +160,7 @@ extern int other_scsi_present; /* SCSI controllers from non-SCSI ca
|
||||
extern int hard_reset_pending;
|
||||
extern int fixed_size_x;
|
||||
extern int fixed_size_y;
|
||||
extern int sound_muted; /* (C) Is sound muted? */
|
||||
extern int do_auto_pause; /* (C) Auto-pause the emulator on focus loss */
|
||||
extern int auto_paused;
|
||||
extern double mouse_sensitivity; /* (C) Mouse sensitivity scale */
|
||||
@@ -167,32 +172,30 @@ extern int pit_mode; /* (C) force setting PIT mode */
|
||||
extern int fm_driver; /* (C) select FM sound driver */
|
||||
extern int hook_enabled; /* (C) Keyboard hook is enabled */
|
||||
|
||||
/* Keyboard variables for future key combination redefinition. */
|
||||
extern uint16_t key_prefix_1_1;
|
||||
extern uint16_t key_prefix_1_2;
|
||||
extern uint16_t key_prefix_2_1;
|
||||
extern uint16_t key_prefix_2_2;
|
||||
extern uint16_t key_uncapture_1;
|
||||
extern uint16_t key_uncapture_2;
|
||||
|
||||
extern char exe_path[2048]; /* path (dir) of executable */
|
||||
extern char usr_path[1024]; /* path (dir) of user data */
|
||||
extern char cfg_path[1024]; /* full path of config file */
|
||||
extern int open_dir_usr_path; /* default file open dialog directory of usr_path */
|
||||
extern char uuid[MAX_UUID_LEN]; /* UUID or machine identifier */
|
||||
extern char vmm_path[1024]; /* VM Manager path to scan (temporary) */
|
||||
extern int vmm_enabled;
|
||||
#ifndef USE_NEW_DYNAREC
|
||||
extern FILE *stdlog; /* file to log output to */
|
||||
#endif
|
||||
extern int config_changed; /* config has changed */
|
||||
|
||||
extern __thread int is_cpu_thread; /* Is this the CPU thread? */
|
||||
|
||||
/* Function prototypes. */
|
||||
#ifdef HAVE_STDARG_H
|
||||
extern void pclog_ex(const char *fmt, va_list);
|
||||
extern void fatal_ex(const char *fmt, va_list);
|
||||
extern void pclog_ex(const char *fmt, va_list ap);
|
||||
extern void fatal_ex(const char *fmt, va_list ap);
|
||||
extern void warning_ex(const char *fmt, va_list ap);
|
||||
#endif
|
||||
extern void pclog_toggle_suppr(void);
|
||||
extern void pclog(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
extern void fatal(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
extern void warning(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
extern void set_screen_size(int x, int y);
|
||||
extern void set_screen_size_monitor(int x, int y, int monitor_index);
|
||||
extern void reset_screen_size(void);
|
||||
@@ -235,6 +238,17 @@ extern int framecountx;
|
||||
extern volatile int cpu_thread_run;
|
||||
extern uint8_t postcard_codes[POSTCARDS_NUM];
|
||||
|
||||
// Accelerator key structure, defines, helper functions
|
||||
struct accelKey {
|
||||
char name[64];
|
||||
char desc[64];
|
||||
char seq[64];
|
||||
};
|
||||
#define NUM_ACCELS 8
|
||||
extern struct accelKey acc_keys[NUM_ACCELS];
|
||||
extern struct accelKey def_acc_keys[NUM_ACCELS];
|
||||
extern int FindAccelerator(const char *name);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
37
src/include/86box/access_bus.h
Normal file
37
src/include/86box/access_bus.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Definitions for the ACPI emulation.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2020-2025 Miran Grca.
|
||||
*/
|
||||
#ifndef ACCESS_BUS_H
|
||||
#define ACCESS_BUS_H
|
||||
|
||||
#define AB_RST 0x80
|
||||
|
||||
typedef struct access_bus_t {
|
||||
uint8_t control;
|
||||
uint8_t status;
|
||||
uint8_t own_addr;
|
||||
uint8_t data;
|
||||
uint8_t clock;
|
||||
uint8_t enable;
|
||||
uint16_t base;
|
||||
} access_bus_t;
|
||||
|
||||
extern const device_t access_bus_device;
|
||||
|
||||
/* Functions */
|
||||
extern void access_bus_handler(access_bus_t *dev, uint8_t enable, uint16_t base);
|
||||
|
||||
#endif /*ACCESS_BUS_H*/
|
||||
@@ -35,13 +35,12 @@
|
||||
* USA.
|
||||
*/
|
||||
|
||||
#ifndef __NetBSD__
|
||||
|
||||
#ifndef BSWAP_H
|
||||
#define BSWAP_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef __NetBSD__
|
||||
#define bswap_16(x) \
|
||||
((uint16_t)((((x) & 0x00ffu) << 8) | \
|
||||
(((x) & 0xff00u) >> 8)))
|
||||
@@ -91,6 +90,7 @@ bswap64(uint64_t x)
|
||||
return bswap_16(x);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static __inline void
|
||||
bswap16s(uint16_t *s)
|
||||
@@ -133,12 +133,12 @@ bswap64s(uint64_t *s)
|
||||
return endian##_bswap(v, size); \
|
||||
} \
|
||||
\
|
||||
static __inline void endian##size##_to_cpus(type *p) \
|
||||
static __inline void endian##size##_to_cpus(UNUSED(type *p)) \
|
||||
{ \
|
||||
endian##_bswaps(p, size) \
|
||||
} \
|
||||
\
|
||||
static __inline void cpu_to_##endian##size##s(type *p) \
|
||||
static __inline void cpu_to_##endian##size##s(UNUSED(type *p)) \
|
||||
{ \
|
||||
endian##_bswaps(p, size) \
|
||||
} \
|
||||
@@ -241,5 +241,3 @@ cpu_to_be32wu(uint32_t *p, uint32_t v)
|
||||
#undef be_bswaps
|
||||
|
||||
#endif /*BSWAP_H*/
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CART_IMAGE_HISTORY 4
|
||||
#define CART_IMAGE_HISTORY 10
|
||||
|
||||
extern char cart_fns[2][512];
|
||||
extern char *cart_image_history[2][CART_IMAGE_HISTORY];
|
||||
|
||||
@@ -153,7 +153,7 @@ void pc_cas_print_state(const pc_cassette_t *cas);
|
||||
void pc_cas_clock(pc_cassette_t *cas, unsigned long cnt);
|
||||
void pc_cas_advance(pc_cassette_t *cas);
|
||||
|
||||
#define CASSETTE_IMAGE_HISTORY 4
|
||||
#define CASSETTE_IMAGE_HISTORY 10
|
||||
|
||||
extern pc_cassette_t *cassette;
|
||||
|
||||
|
||||
@@ -15,40 +15,76 @@
|
||||
#ifndef EMU_CDROM_H
|
||||
#define EMU_CDROM_H
|
||||
|
||||
#ifndef EMU_VERSION_H
|
||||
#include <86box/version.h>
|
||||
#endif
|
||||
|
||||
#define CDROM_NUM 8
|
||||
|
||||
#define CD_STATUS_EMPTY 0
|
||||
#define CD_STATUS_DATA_ONLY 1
|
||||
#define CD_STATUS_PAUSED 2
|
||||
#define CD_STATUS_PLAYING 3
|
||||
#define CD_STATUS_STOPPED 4
|
||||
#define CD_STATUS_PLAYING_COMPLETED 5
|
||||
#define CD_STATUS_DVD 2
|
||||
#define CD_STATUS_PAUSED 4
|
||||
#define CD_STATUS_PLAYING 5
|
||||
#define CD_STATUS_STOPPED 6
|
||||
#define CD_STATUS_PLAYING_COMPLETED 7
|
||||
#define CD_STATUS_HOLD 8
|
||||
#define CD_STATUS_HAS_AUDIO 0xc
|
||||
#define CD_STATUS_MASK 0xf
|
||||
|
||||
/* Medium changed flag. */
|
||||
#define CD_STATUS_TRANSITION 0x40
|
||||
#define CD_STATUS_MEDIUM_CHANGED 0x80
|
||||
|
||||
#define CD_TRACK_UNK_DATA 0x10
|
||||
#define CD_TRACK_UNK_DATA 0x04
|
||||
#define CD_TRACK_NORMAL 0x00
|
||||
#define CD_TRACK_AUDIO 0x08
|
||||
#define CD_TRACK_CDI 0x10
|
||||
#define CD_TRACK_XA 0x20
|
||||
#define CD_TRACK_MODE_MASK 0x30
|
||||
#define CD_TRACK_MODE2 0x04
|
||||
|
||||
#define CD_READ_DATA 0
|
||||
#define CD_READ_AUDIO 1
|
||||
#define CD_READ_RAW 2
|
||||
#define CD_TRACK_MODE2_MASK 0x07
|
||||
|
||||
#define CD_TOC_NORMAL 0
|
||||
#define CD_TOC_SESSION 1
|
||||
#define CD_TOC_RAW 2
|
||||
|
||||
#define CD_IMAGE_HISTORY 4
|
||||
|
||||
#define BUF_SIZE 32768
|
||||
#define CD_IMAGE_HISTORY 10
|
||||
|
||||
#define CDROM_IMAGE 200
|
||||
|
||||
/* This is so that if/when this is changed to something else,
|
||||
changing this one define will be enough. */
|
||||
#define CDROM_EMPTY !dev->host_drive
|
||||
#define CDROM_EMPTY !dev->host_drive
|
||||
|
||||
#define DVD_LAYER_0_SECTORS 0x00210558ULL
|
||||
|
||||
#define RAW_SECTOR_SIZE 2352
|
||||
#define COOKED_SECTOR_SIZE 2048
|
||||
|
||||
#define CD_BUF_SIZE (16 * RAW_SECTOR_SIZE)
|
||||
|
||||
#define DATA_TRACK 0x14
|
||||
#define AUDIO_TRACK 0x10
|
||||
|
||||
#define CD_FPS 75
|
||||
|
||||
#define FRAMES_TO_MSF(f, M, S, F) \
|
||||
{ \
|
||||
uint64_t value = f; \
|
||||
*(F) = (value % CD_FPS) & 0xff; \
|
||||
value /= CD_FPS; \
|
||||
*(S) = (value % 60) & 0xff; \
|
||||
value /= 60; \
|
||||
*(M) = value & 0xff; \
|
||||
}
|
||||
#define MSF_TO_FRAMES(M, S, F) ((M) *60 * CD_FPS + (S) *CD_FPS + (F))
|
||||
|
||||
typedef struct SMSF {
|
||||
uint16_t min;
|
||||
uint8_t sec;
|
||||
uint8_t fr;
|
||||
} TMSF;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -62,121 +98,125 @@ enum {
|
||||
CDROM_BUS_USB = 8
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CDROM_TYPE_86BOX_100,
|
||||
CDROM_TYPE_AZT_CDA46802I_115,
|
||||
CDROM_TYPE_BTC_BCD36XH_U10,
|
||||
CDROM_TYPE_GOLDSTAR_CRD_8160B_314,
|
||||
CDROM_TYPE_HITACHI_CDR_8130_0020,
|
||||
CDROM_TYPE_KENWOOD_UCR_421_208E,
|
||||
CDROM_TYPE_MATSHITA_587_7S13,
|
||||
CDROM_TYPE_MATSHITA_588_LS15,
|
||||
CDROM_TYPE_MATSHITA_571_10e,
|
||||
CDROM_TYPE_MATSHITA_572_10j,
|
||||
CDROM_TYPE_MITSUMI_FX4820T_D02A,
|
||||
CDROM_TYPE_NEC_260_100,
|
||||
CDROM_TYPE_NEC_260_101,
|
||||
CDROM_TYPE_NEC_273_420,
|
||||
CDROM_TYPE_NEC_280_105,
|
||||
CDROM_TYPE_NEC_280_308,
|
||||
CDROM_TYPE_PHILIPS_PCA403CD_U31P,
|
||||
CDROM_TYPE_SONY_CDU76_10i,
|
||||
CDROM_TYPE_SONY_CDU311_30h,
|
||||
CDROM_TYPE_TOSHIBA_5302TA_0305,
|
||||
CDROM_TYPE_TOSHIBA_5702B_TA70,
|
||||
CDROM_TYPE_CHINON_CDS431_H42,
|
||||
CDROM_TYPE_CHINON_CDX435_M62,
|
||||
CDROM_TYPE_DEC_RRD45_0436,
|
||||
CDROM_TYPE_MATSHITA_501_10b,
|
||||
CDROM_TYPE_NEC_25_10a,
|
||||
CDROM_TYPE_NEC_38_103,
|
||||
CDROM_TYPE_NEC_75_103,
|
||||
CDROM_TYPE_NEC_77_106,
|
||||
CDROM_TYPE_NEC_211_100,
|
||||
CDROM_TYPE_NEC_464_105,
|
||||
CDROM_TYPE_ShinaKen_DM3x1S_104,
|
||||
CDROM_TYPE_SONY_CDU541_10i,
|
||||
CDROM_TYPE_SONY_CDU561_18k,
|
||||
CDROM_TYPE_SONY_CDU76S_100,
|
||||
CDROM_TYPE_PHILIPS_CDD2600_107,
|
||||
CDROM_TYPE_PIONEER_DRM604X_2403,
|
||||
CDROM_TYPE_PLEXTOR_PX32TS_103,
|
||||
CDROM_TYPE_TEAC_CD50_100,
|
||||
CDROM_TYPE_TEAC_R55S_10R,
|
||||
CDROM_TYPE_TEXEL_DM3024_100,
|
||||
CDROM_TYPE_TEXEL_DM3028_106,
|
||||
CDROM_TYPE_TOSHIBA_XM_3433,
|
||||
CDROM_TYPE_TOSHIBA_XM3201B_3232,
|
||||
CDROM_TYPE_TOSHIBA_XM3301TA_0272,
|
||||
CDROM_TYPE_TOSHIBA_XM5701TA_3136,
|
||||
CDROM_TYPE_TOSHIBA_SDM1401_1008,
|
||||
CDROM_TYPES_NUM
|
||||
};
|
||||
|
||||
#define KNOWN_CDROM_DRIVE_TYPES CDROM_TYPES_NUM
|
||||
#define BUS_TYPE_IDE CDROM_BUS_ATAPI
|
||||
#define BUS_TYPE_SCSI CDROM_BUS_SCSI
|
||||
#define BUS_TYPE_BOTH -2
|
||||
#define BUS_TYPE_NONE -1
|
||||
|
||||
static const struct
|
||||
{
|
||||
const char vendor[9];
|
||||
const char model[17];
|
||||
const char revision[5];
|
||||
const char *name;
|
||||
const char *internal_name;
|
||||
const int bus_type;
|
||||
#define CDV EMU_VERSION_EX
|
||||
|
||||
static const struct cdrom_drive_types_s {
|
||||
const char *vendor;
|
||||
const char *model;
|
||||
const char *revision;
|
||||
const char *internal_name;
|
||||
const int bus_type;
|
||||
/* SCSI standard for SCSI (or both) devices, early for IDE. */
|
||||
const int scsi_std;
|
||||
const int speed;
|
||||
const int inquiry_len;
|
||||
const int caddy;
|
||||
const int transfer_max[4];
|
||||
} cdrom_drive_types[] = {
|
||||
{ "86BOX", "CD-ROM", "1.00", "86BOX CD-ROM 1.00", "86BOX_CD-ROM_1.00", BUS_TYPE_BOTH },
|
||||
{ "AZT", "CDA46802I", "1.15", "AZT CDA46802I 1.15", "AZT_CDA46802I_1.15", BUS_TYPE_IDE },
|
||||
{ "BTC", "CD-ROM BCD36XH", "U1.0", "BTC CD-ROM BCD36XH U1.0", "BTC_CD-ROM_BCD36XH_U1.0", BUS_TYPE_IDE },
|
||||
{ "GOLDSTAR", "CRD-8160B", "3.14", "GOLDSTAR CRD-8160B 3.14", "GOLDSTAR_CRD-8160B_3.14", BUS_TYPE_IDE },
|
||||
{ "HITACHI", "CDR-8130", "0020", "HITACHI CDR-8130 0020", "HITACHI_CDR-8130_0020", BUS_TYPE_IDE },
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "KENWOOD CD-ROM UCR-421 208E", "KENWOOD_CD-ROM_UCR-421_208E", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CD-ROM CR-587", "7S13", "MATSHITA CD-ROM CR-587 7S13", "MATSHITA_CD-ROM_CR-587_7S13", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CD-ROM CR-588", "LS15", "MATSHITA CD-ROM CR-588 LS15", "MATSHITA_CD-ROM_CR-588_LS15", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CR-571", "1.0e", "MATSHITA CR-571 1.0e", "MATSHITA_CR-571_1.0e", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CR-572", "1.0j", "MATSHITA CR-572 1.0j", "MATSHITA_CR-572_1.0j", BUS_TYPE_IDE },
|
||||
{ "MITSUMI", "CRMC-FX4820T", "D02A", "MITSUMI CRMC-FX4820T D02A", "MITSUMI_CRMC-FX4820T_D02A", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.00", "NEC CD-ROM DRIVE:260 1.00", "NEC_CD-ROM_DRIVE260_1.00", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.01", "NEC CD-ROM DRIVE:260 1.01", "NEC_CD-ROM_DRIVE260_1.01", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:273", "4.20", "NEC CD-ROM DRIVE:273 4.20", "NEC_CD-ROM_DRIVE273_4.20", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:280", "1.05", "NEC CD-ROM DRIVE:280 1.05", "NEC_CD-ROM_DRIVE280_1.05", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:280", "3.08", "NEC CD-ROM DRIVE:280 3.08", "NEC_CD-ROM_DRIVE280_3.08", BUS_TYPE_IDE },
|
||||
{ "PHILIPS", "CD-ROM PCA403CD", "U31P", "PHILIPS CD-ROM PCA403CD U31P", "PHILIPS_CD-ROM_PCA403CD_U31P", BUS_TYPE_IDE },
|
||||
{ "SONY", "CD-ROM CDU76", "1.0i", "SONY CD-ROM CDU76 1.0i", "SONY_CD-ROM_CDU76_1.0i", BUS_TYPE_IDE },
|
||||
{ "SONY", "CD-ROM CDU311", "3.0h", "SONY CD-ROM CDU311 3.0h", "SONY_CD-ROM_CDU311_3.0h", BUS_TYPE_IDE },
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "TOSHIBA CD-ROM XM-5302TA 0305", "TOSHIBA_CD-ROM_XM-5302TA_0305", BUS_TYPE_IDE },
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "TOSHIBA CD-ROM XM-5702B TA70", "TOSHIBA_CD-ROM_XM-5702B_TA70", BUS_TYPE_IDE },
|
||||
{ "CHINON", "CD-ROM CDS-431", "H42 ", "[SCSI-1] CHINON CD-ROM CDS-431 H42", "CHINON_CD-ROM_CDS-431_H42", BUS_TYPE_SCSI },
|
||||
{ "CHINON", "CD-ROM CDX-435", "M62 ", "[SCSI-1] CHINON CD-ROM CDX-435 M62", "CHINON_CD-ROM_CDX-435_M62", BUS_TYPE_SCSI },
|
||||
{ "DEC", "RRD45 (C) DEC", "0436", "[SCSI-1] DEC RRD45 0436", "DEC_RRD45_0436", BUS_TYPE_SCSI },
|
||||
{ "MATSHITA", "CD-ROM CR-501", "1.0b", "[SCSI-1] MATSHITA CD-ROM CR-501 1.0b", "MATSHITA_CD-ROM_CR-501_1.0b", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:25", "1.0a", "[SCSI-1] NEC CD-ROM DRIVE:25 1.0a", "NEC_CD-ROM_DRIVE25_1.0a", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:38", "1.00", "[SCSI-2] NEC CD-ROM DRIVE:38 1.00", "NEC_CD-ROM_DRIVE38_1.00", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:75", "1.03", "[SCSI-1] NEC CD-ROM DRIVE:75 1.03", "NEC_CD-ROM_DRIVE75_1.03", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:77", "1.06", "[SCSI-1] NEC CD-ROM DRIVE:77 1.06", "NEC_CD-ROM_DRIVE77_1.06", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:211", "1.00", "[SCSI-2] NEC CD-ROM DRIVE:211 1.00", "NEC_CD-ROM_DRIVE211_1.00", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:464", "1.05", "[SCSI-2] NEC CD-ROM DRIVE:464 1.05", "NEC_CD-ROM_DRIVE464_1.05", BUS_TYPE_SCSI },
|
||||
{ "ShinaKen", "CD-ROM DM-3x1S", "1.04", "[SCSI-1] ShinaKen CD-ROM DM-3x1S 1.04", "ShinaKen_CD-ROM_DM-3x1S_1.04", BUS_TYPE_SCSI },
|
||||
{ "SONY", "CD-ROM CDU-541", "1.0i", "[SCSI-1] SONY CD-ROM CDU-541 1.0i", "SONY_CD-ROM_CDU-541_1.0i", BUS_TYPE_SCSI },
|
||||
{ "SONY", "CD-ROM CDU-561", "1.8k", "[SCSI-2] SONY CD-ROM CDU-561 1.8k", "SONY_CD-ROM_CDU-561_1.8k", BUS_TYPE_SCSI },
|
||||
{ "SONY", "CD-ROM CDU-76S", "1.00", "[SCSI-2] SONY CD-ROM CDU-76S 1.00", "SONY_CD-ROM_CDU-76S_1.00", BUS_TYPE_SCSI },
|
||||
{ "PHILIPS", "CDD2600", "1.07", "[SCSI-2] PHILIPS CDD2600 1.07", "PHILIPS_CDD2600_1.07", BUS_TYPE_SCSI },
|
||||
{ "PIONEER", "CD-ROM DRM-604X", "2403", "[SCSI-2] PIONEER CD-ROM DRM-604X 2403", "PIONEER_CD-ROM_DRM-604X_2403", BUS_TYPE_SCSI },
|
||||
{ "PLEXTOR", "CD-ROM PX-32TS", "1.03", "[SCSI-2] PLEXTOR CD-ROM PX-32TS 1.03", "PLEXTOR_CD-ROM_PX-32TS_1.03", BUS_TYPE_SCSI },
|
||||
{ "TEAC", "CD 50", "1.00", "[SCSI-2] TEAC CD 50 1.00", "TEAC_CD_50_1.00", BUS_TYPE_SCSI },
|
||||
{ "TEAC", "CD-ROM R55S", "1.0R", "[SCSI-2] TEAC CD-ROM R55S 1.0R", "TEAC_CD-ROM_R55S_1.0R", BUS_TYPE_SCSI },
|
||||
{ "TEXEL", "CD-ROM DM-3024", "1.00", "[SCSI-1] TEXEL CD-ROM DM-3024 1.00", "TEXEL_CD-ROM_DM-3024_1.00", BUS_TYPE_SCSI },
|
||||
{ "TEXEL", "CD-ROM DM-3028", "1.06", "[SCSI-2] TEXEL CD-ROM DM-3028 1.06", "TEXEL_CD-ROM_DM-3028_1.06", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "[SCSI-2] TOSHIBA CD-ROM DRIVE:XM 3433", "TOSHIBA_CD-ROM_DRIVEXM_3433", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM XM-3201B", "3232", "[SCSI-1] TOSHIBA CD-ROM XM-3201B 3232", "TOSHIBA_CD-ROM_XM-3201B_3232", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM XM-3301TA", "0272", "[SCSI-2] TOSHIBA CD-ROM XM-3301TA 0272", "TOSHIBA_CD-ROM_XM-3301TA_0272", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM XM-5701TA", "3136", "[SCSI-2] TOSHIBA CD-ROM XM-5701TA 3136", "TOSHIBA_CD-ROM_XM-5701TA_3136", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "DVD-ROM SD-M1401", "1008", "[SCSI-2] TOSHIBA DVD-ROM SD-M1401 1008", "TOSHIBA_DVD-ROM_SD-M1401_1008", BUS_TYPE_SCSI },
|
||||
{ "", "", "", "", "", BUS_TYPE_NONE },
|
||||
{ EMU_NAME, "86B_CD", CDV, "86cd", BUS_TYPE_BOTH, 2, -1, 36, 0, { 4, 2, 2, 5 } },
|
||||
/* SCSI-1 / early ATAPI generic - second on purpose so the later variant is the default. */
|
||||
{ EMU_NAME, "86B_CD", "1.00", "86cd100", BUS_TYPE_BOTH, 1, -1, 36, 1, { 0, -1, -1, -1 } },
|
||||
/* No difference from 86BOX CD-ROM, other than name - but enough people have requested such a name to warrant it. */
|
||||
{ EMU_NAME, "86B_DVD", "4.30", "86dvd", BUS_TYPE_BOTH, 2, -1, 36, 0, { 4, 2, 2, 5 } },
|
||||
{ "ASUS", "CD-S500/A", "1.41", "asus_500", BUS_TYPE_IDE, 0, 50, 36, 0, { 4, 2, 2, 2 } },
|
||||
{ "ASUS", "CD-S520/A4", "1.32", "asus_520", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 2 } },
|
||||
{ "AZT", "CDA46802I", "1.15", "azt_cda", BUS_TYPE_IDE, 0, 4, 36, 0, { 3, 0, 0, 0 } },
|
||||
{ "BTC", "CD-ROM BCD36XH", "U1.0", "btc_36xh", BUS_TYPE_IDE, 0, 36, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "GOLDSTAR", "CRD-8160B", "3.14", "goldstar", BUS_TYPE_IDE, 0, 16, 36, 0, { 4, 2, 2, -1 } },
|
||||
/* TODO: Find an IDENTIFY and/or INQUIRY dump. */
|
||||
{ "GOLDSTAR", "GCD-R560B", "1.00", "goldstar", BUS_TYPE_IDE, 0, 6, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "HITACHI", "CDR-8130", "0020", "hitachi_r8130", BUS_TYPE_IDE, 0, 16, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "HITACHI", "GD-7500", "A1 ", "hitachi_7500", BUS_TYPE_IDE, 0, 40, 36, 0, { 4, 2, 2, 2 } }, /* DVD. */
|
||||
{ "HL-DT-ST", "CD-ROM GCR-8526B", "1.01", "hldtst_8526b", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 2 } },
|
||||
{ "HL-DT-ST", "DVDRAM GSA-4160", "A302", "hldtst_4160", BUS_TYPE_IDE, 0, 40, 36, 0, { 4, 2, 2, 2 } },
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "kenwood_421", BUS_TYPE_IDE, 0, 72, 36, 0, { 4, 2, 2, 4 } },
|
||||
/*
|
||||
This is a laptop/notebook drive, as is also evident from the name:
|
||||
CRN = Notebook, CRD = Desktop.
|
||||
*/
|
||||
{ "LG", "CD-ROM CRN-8245B", "1.30", "lg_8245b", BUS_TYPE_IDE, 0, 24, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "LG", "CD-ROM CRD-8322B", "1.06", "lg_8322b", BUS_TYPE_IDE, 0, 32, 36, 0, { 4, 2, 2, -1 } },
|
||||
/* Nothing on Google, deduced 48x from the name. */
|
||||
{ "LITE-ON", "LTN48125S", "1S07", "liteon_48125s", BUS_TYPE_IDE, 0, 48, 36, 0, { 4, 2, 2, 2 } },
|
||||
/* Confirmed to be 52x, was the basis for deducing the other one's speed. */
|
||||
{ "LITE-ON", "LTN526D", "YSR5", "liteon_526d", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 2 } },
|
||||
{ "MATSHITA", "CD-ROM CR-583", "1.07", "matshita_583", BUS_TYPE_IDE, 0, 8, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "MATSHITA", "CD-ROM CR-585", "Z18P", "matshita_585", BUS_TYPE_IDE, 0, 24, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "MATSHITA", "CD-ROM CR-587", "7S13", "matshita_587", BUS_TYPE_IDE, 0, 24, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "MATSHITA", "CD-ROM CR-588", "LS15", "matshita_588", BUS_TYPE_IDE, 0, 32, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "MATSHITA", "CR-571", "1.0e", "matshita_571", BUS_TYPE_IDE, 0, 2, 36, 0, { 0, -1, -1, -1 } },
|
||||
{ "MATSHITA", "CR-572", "1.0j", "matshita_572", BUS_TYPE_IDE, 0, 4, 36, 0, { 0, -1, -1, -1 } },
|
||||
{ "MITSUMI", "CRMC-FX4820T", "D02A", "mitsumi_4820t", BUS_TYPE_IDE, 0, 48, 36, 0, { 4, 2, 2, 2 } },
|
||||
/* TODO: Find an IDENTIFY and/or INQUIRY dump. */
|
||||
{ "MITSUMI", "CRMC-FX810T4", "????", "mitsumi_810t4", BUS_TYPE_IDE, 0, 8, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.00", "nec_260_early", BUS_TYPE_IDE, 1, 2, 36, 1, { 0, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.01", "nec_260", BUS_TYPE_IDE, 1, 4, 36, 1, { 0, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:273", "4.20", "nec_273", BUS_TYPE_IDE, 0, 4, 36, 0, { 0, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:280", "1.05", "nec_280_early", BUS_TYPE_IDE, 0, 6, 36, 1, { 4, 2, 2, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:280", "3.08", "nec_280", BUS_TYPE_IDE, 0, 8, 36, 1, { 4, 2, 2, -1 } },
|
||||
{ "NEC", "CDR-1300A", "1.05", "nec_1300a", BUS_TYPE_IDE, 0, 6, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "NEC", "CDR-1900A", "1.00", "nec_1900a", BUS_TYPE_IDE, 0, 32, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "PHILIPS", "CD-ROM PCA403CD", "U31P", "philips_403", BUS_TYPE_IDE, 0, 40, 36, 0, { 4, 2, 2, -1 } },
|
||||
{ "SONY", "CD-ROM CDU76", "1.0i", "sony_76", BUS_TYPE_IDE, 0, 4, 36, 0, { 2, -1, -1, -1 } },
|
||||
{ "SONY", "CD-ROM CDU311", "3.0h", "sony_311", BUS_TYPE_IDE, 0, 8, 36, 0, { 3, 2, 1, -1 } },
|
||||
{ "SONY", "CD-ROM CDU5225", "NYS4", "sony_5225", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 4 } },
|
||||
{ "TEAC", "CD-516E", "1.0G", "teac_516e", BUS_TYPE_IDE, 0, 16, 36, 0, { 3, 2, 2, -1 } },
|
||||
{ "TEAC", "CD-524EA", "3.0D", "teac_524ea", BUS_TYPE_IDE, 0, 24, 36, 0, { 3, 2, 2, -1 } },
|
||||
{ "TEAC", "CD-532E", "2.0A", "teac_532e", BUS_TYPE_IDE, 0, 32, 36, 0, { 3, 2, 2, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "toshiba_5302ta", BUS_TYPE_IDE, 0, 4, 96, 0, { 0, -1, -1, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "toshiba_5702b", BUS_TYPE_IDE, 0, 12, 96, 0, { 3, 2, 1, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6202B", "1512", "toshiba_6202b", BUS_TYPE_IDE, 0, 32, 96, 0, { 4, 2, 2, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6402B", "1008", "toshiba_6402b", BUS_TYPE_IDE, 0, 32, 96, 0, { 4, 2, 2, 2 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6702B", "1007", "toshiba_6720b", BUS_TYPE_IDE, 0, 48, 96, 0, { 4, 2, 2, 2 } },
|
||||
{ "TOSHIBA", "DVD-ROM SD-M1802", "1051", "toshiba_m1802", BUS_TYPE_IDE, 0, 48, 96, 0, { 4, 2, 2, 2 } },
|
||||
{ "CHINON", "CD-ROM CDS-431", "H42 ", "chinon_431", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "CHINON", "CD-ROM CDX-435", "M62 ", "chinon_435", BUS_TYPE_SCSI, 1, 2, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "DEC", "RRD45 (C) DEC", "0436", "dec_45", BUS_TYPE_SCSI, 1, 4, 36, 0, { -1, -1, -1, -1 } },
|
||||
{ "MATSHITA", "CD-ROM CR-501", "1.0b", "matshita_501", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:25", "1.0a", "nec_25", BUS_TYPE_SCSI, 1, 2, 36, 0, { -1, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:38", "1.00", "nec_38", BUS_TYPE_SCSI, 2, 1, 36, 0, { -1, -1, -1, -1 } },
|
||||
/* The speed of the following two is guesswork based on the CDR-74. */
|
||||
{ "NEC", "CD-ROM DRIVE:75", "1.03", "nec_75", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:77", "1.06", "nec_77", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "NEC", "CD-ROM DRIVE:211", "1.00", "nec_211", BUS_TYPE_SCSI, 2, 3, 36, 0, { -1, -1, -1, -1 } },
|
||||
/* The speed of the following two is guesswork based on the CDR-400. */
|
||||
{ "NEC", "CD-ROM DRIVE:464", "1.05", "nec_464", BUS_TYPE_SCSI, 2, 3, 36, 0, { -1, -1, -1, -1 } },
|
||||
/* The speed of the following two is guesswork based on the name. */
|
||||
{ "ShinaKen", "CD-ROM DM-3x1S", "1.04", "shinaken_3x1s", BUS_TYPE_SCSI, 1, 3, 36, 0, { -1, -1, -1, -1 } },
|
||||
{ "SONY", "CD-ROM CDU-541", "1.0i", "sony_541", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "SONY", "CD-ROM CDU-561", "1.8k", "sony_561", BUS_TYPE_SCSI, 2, 2, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "SONY", "CD-ROM CDU-76S", "1.00", "sony_76s", BUS_TYPE_SCSI, 2, 4, 36, 0, { -1, -1, -1, -1 } },
|
||||
{ "PHILIPS", "CDD2600", "1.07", "philips_2600", BUS_TYPE_SCSI, 2, 6, 36, 0, { -1, -1, -1, -1 } },
|
||||
/* NOTE: The real thing is a CD changer drive! */
|
||||
{ "PIONEER", "CD-ROM DRM-604X", "2403", "pioneer_604x", BUS_TYPE_SCSI, 2, 4, 47, 0, { -1, -1, -1, -1 } },
|
||||
{ "PLEXTOR", "CD-ROM PX-32TS", "1.03", "plextor_32ts", BUS_TYPE_SCSI, 2, 32, 36, 0, { -1, -1, -1, -1 } },
|
||||
/* The speed of the following two is guesswork based on the R55S. */
|
||||
{ "TEAC", "CD 50", "1.00", "teac_50", BUS_TYPE_SCSI, 2, 4, 36, 1, { -1, -1, -1, -1 } },
|
||||
{ "TEAC", "CD-ROM R55S", "1.0R", "teac_55s", BUS_TYPE_SCSI, 2, 4, 36, 0, { -1, -1, -1, -1 } },
|
||||
/* Texel is Plextor according to Plextor's own EU website. */
|
||||
{ "TEXEL", "CD-ROM DM-3024", "1.00", "texel_3024", BUS_TYPE_SCSI, 2, 2, 36, 1, { -1, -1, -1, -1 } },
|
||||
/*
|
||||
Unusual 2.23x according to Google, I'm rounding it upwards to 3x.
|
||||
Assumed caddy based on the DM-3024.
|
||||
*/
|
||||
{ "TEXEL", "CD-ROM DM-3028", "1.06", "texel_3028", BUS_TYPE_SCSI, 2, 3, 36, 1, { -1, -1, -1, -1 } }, /* Caddy. */
|
||||
/*
|
||||
The characteristics are a complete guesswork because I can't find
|
||||
this one on Google.
|
||||
|
||||
Also, INQUIRY length is always 96 on these Toshiba drives.
|
||||
*/
|
||||
{ "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "toshiba_xm", BUS_TYPE_SCSI, 2, 2, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */
|
||||
{ "TOSHIBA", "CD-ROM XM-3201B", "3232", "toshiba_3201b", BUS_TYPE_SCSI, 1, 1, 96, 1, { -1, -1, -1, -1 } }, /* Caddy. */
|
||||
{ "TOSHIBA", "CD-ROM XM-3301TA", "0272", "toshiba_3301ta", BUS_TYPE_SCSI, 2, 2, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */
|
||||
{ "TOSHIBA", "CD-ROM XM-5701TA", "3136", "toshiba_5701a", BUS_TYPE_SCSI, 2, 12, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */
|
||||
{ "TOSHIBA", "DVD-ROM SD-M1401", "1008", "toshiba_m1401", BUS_TYPE_SCSI, 2, 40, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */
|
||||
{ "", "", "", "", BUS_TYPE_NONE, 0, -1, 0, 0, { -1, -1, -1, -1 } }
|
||||
};
|
||||
|
||||
/* To shut up the GCC compilers. */
|
||||
@@ -218,133 +258,197 @@ typedef struct raw_track_info_t {
|
||||
|
||||
/* Define the various CD-ROM drive operations (ops). */
|
||||
typedef struct cdrom_ops_t {
|
||||
void (*get_track_info)(struct cdrom *dev, uint32_t track, int end, track_info_t *ti);
|
||||
void (*get_raw_track_info)(struct cdrom *dev, int *num, raw_track_info_t *rti);
|
||||
void (*get_subchannel)(struct cdrom *dev, uint32_t lba, subchannel_t *subc);
|
||||
int (*is_track_pre)(struct cdrom *dev, uint32_t lba);
|
||||
int (*sector_size)(struct cdrom *dev, uint32_t lba);
|
||||
int (*read_sector)(struct cdrom *dev, uint8_t *b, uint32_t lba);
|
||||
int (*track_type)(struct cdrom *dev, uint32_t lba);
|
||||
int (*ext_medium_changed)(struct cdrom *dev);
|
||||
void (*exit)(struct cdrom *dev);
|
||||
int (*get_track_info)(const void *local, const uint32_t track,
|
||||
const int end, track_info_t *ti);
|
||||
void (*get_raw_track_info)(const void *local, int *num,
|
||||
uint8_t *rti);
|
||||
int (*is_track_pre)(const void *local, const uint32_t sector);
|
||||
int (*read_sector)(const void *local, uint8_t *buffer,
|
||||
const uint32_t sector);
|
||||
uint8_t (*get_track_type)(const void *local, const uint32_t sector);
|
||||
uint32_t (*get_last_block)(const void *local);
|
||||
int (*read_dvd_structure)(const void *local, const uint8_t layer,
|
||||
const uint8_t format, uint8_t *buffer,
|
||||
uint32_t *info);
|
||||
int (*is_dvd)(const void *local);
|
||||
int (*has_audio)(const void *local);
|
||||
int (*is_empty)(const void *local);
|
||||
void (*close)(void *local);
|
||||
void (*load)(const void *local);
|
||||
} cdrom_ops_t;
|
||||
|
||||
typedef struct cdrom {
|
||||
uint8_t id;
|
||||
uint8_t id;
|
||||
|
||||
union {
|
||||
uint8_t res;
|
||||
uint8_t res0; /* Reserved for other ID's. */
|
||||
uint8_t res1;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_device_id;
|
||||
uint8_t res;
|
||||
uint8_t res0; /* Reserved for other ID's. */
|
||||
uint8_t res1;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_device_id;
|
||||
};
|
||||
|
||||
uint8_t bus_type; /* 0 = ATAPI, 1 = SCSI */
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t cd_status; /* Struct variable reserved for
|
||||
media status. */
|
||||
uint8_t speed;
|
||||
uint8_t cur_speed;
|
||||
uint8_t bus_type; /* 0 = ATAPI, 1 = SCSI */
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t cd_status; /* Struct variable reserved for
|
||||
media status. */
|
||||
uint8_t speed;
|
||||
uint8_t cur_speed;
|
||||
|
||||
void *priv;
|
||||
void *priv;
|
||||
|
||||
char image_path[1024];
|
||||
char prev_image_path[1024];
|
||||
char image_path[1024];
|
||||
char prev_image_path[1280];
|
||||
|
||||
char *image_history[CD_IMAGE_HISTORY];
|
||||
uint32_t sound_on;
|
||||
uint32_t cdrom_capacity;
|
||||
uint32_t seek_pos;
|
||||
uint32_t seek_diff;
|
||||
uint32_t cd_end;
|
||||
uint32_t type;
|
||||
uint32_t sector_size;
|
||||
|
||||
uint32_t sound_on;
|
||||
uint32_t cdrom_capacity;
|
||||
uint32_t seek_pos;
|
||||
uint32_t seek_diff;
|
||||
uint32_t cd_end;
|
||||
uint32_t type;
|
||||
uint32_t sector_size;
|
||||
uint32_t inv_field;
|
||||
int32_t cached_sector;
|
||||
int32_t cd_buflen;
|
||||
int32_t sony_msf;
|
||||
int32_t real_speed;
|
||||
int32_t is_early;
|
||||
int32_t is_nec;
|
||||
int32_t is_bcd;
|
||||
|
||||
int cd_buflen;
|
||||
int audio_op;
|
||||
int audio_muted_soft;
|
||||
int sony_msf;
|
||||
int32_t cdrom_sector_size;
|
||||
|
||||
const cdrom_ops_t *ops;
|
||||
|
||||
void *local;
|
||||
char *image_history[CD_IMAGE_HISTORY];
|
||||
|
||||
void (*insert)(void *priv);
|
||||
void (*close)(void *priv);
|
||||
uint32_t (*get_volume)(void *p, int channel);
|
||||
uint32_t (*get_channel)(void *p, int channel);
|
||||
void *local;
|
||||
void *log;
|
||||
|
||||
int16_t cd_buffer[BUF_SIZE];
|
||||
void (*insert)(void *priv);
|
||||
void (*close)(void *priv);
|
||||
uint32_t (*get_volume)(void *p, int channel);
|
||||
uint32_t (*get_channel)(void *p, int channel);
|
||||
|
||||
uint8_t subch_buffer[96];
|
||||
int16_t cd_buffer[CD_BUF_SIZE];
|
||||
|
||||
uint8_t subch_buffer[96];
|
||||
|
||||
/* Needs some extra breathing space in case of overflows. */
|
||||
uint8_t raw_buffer[2][4096];
|
||||
uint8_t extra_buffer[296];
|
||||
|
||||
int32_t is_chinon;
|
||||
int32_t is_pioneer;
|
||||
int32_t is_plextor;
|
||||
int32_t is_sony;
|
||||
int32_t is_toshiba;
|
||||
|
||||
int32_t c2_first;
|
||||
int32_t cur_buf;
|
||||
|
||||
/* Only used on Windows hosts for disc change notifications. */
|
||||
uint8_t host_letter;
|
||||
} cdrom_t;
|
||||
|
||||
extern cdrom_t cdrom[CDROM_NUM];
|
||||
|
||||
extern char *cdrom_getname(int type);
|
||||
#define MSFtoLBA(m, s, f) ((((m * 60) + s) * 75) + f)
|
||||
|
||||
extern char *cdrom_get_internal_name(int type);
|
||||
extern int cdrom_get_from_internal_name(char *s);
|
||||
extern void cdrom_set_type(int model, int type);
|
||||
extern int cdrom_get_type(int model);
|
||||
static __inline int
|
||||
bin2bcd(int x)
|
||||
{
|
||||
return (x % 10) | ((x / 10) << 4);
|
||||
}
|
||||
|
||||
extern int cdrom_lba_to_msf_accurate(int lba);
|
||||
extern double cdrom_seek_time(cdrom_t *dev);
|
||||
extern void cdrom_stop(cdrom_t *dev);
|
||||
extern int cdrom_is_pre(cdrom_t *dev, uint32_t lba);
|
||||
extern int cdrom_audio_callback(cdrom_t *dev, int16_t *output, int len);
|
||||
extern uint8_t cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf);
|
||||
extern uint8_t cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit);
|
||||
extern uint8_t cdrom_audio_track_search_pioneer(cdrom_t *dev, uint32_t pos, uint8_t playbit);
|
||||
extern uint8_t cdrom_audio_play_pioneer(cdrom_t *dev, uint32_t pos);
|
||||
extern uint8_t cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type);
|
||||
extern void cdrom_audio_pause_resume(cdrom_t *dev, uint8_t resume);
|
||||
extern uint8_t cdrom_audio_scan(cdrom_t *dev, uint32_t pos, int type);
|
||||
extern uint8_t cdrom_get_audio_status_pioneer(cdrom_t *dev, uint8_t *b);
|
||||
extern uint8_t cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf);
|
||||
extern uint8_t cdrom_get_current_status(cdrom_t *dev);
|
||||
extern void cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf);
|
||||
extern void cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, int msf);
|
||||
extern void cdrom_get_current_subcodeq(cdrom_t *dev, uint8_t *b);
|
||||
extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b);
|
||||
extern int cdrom_read_toc(cdrom_t *dev, unsigned char *b, int type,
|
||||
unsigned char start_track, int msf, int max_len);
|
||||
extern int cdrom_read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf, int max_len);
|
||||
extern void cdrom_get_track_buffer(cdrom_t *dev, uint8_t *buf);
|
||||
extern void cdrom_get_q(cdrom_t *dev, uint8_t *buf, int *curtoctrk, uint8_t mode);
|
||||
extern uint8_t cdrom_mitsumi_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len);
|
||||
extern int cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf,
|
||||
int cdrom_sector_type, int cdrom_sector_flags, int *len, uint8_t vendor_type);
|
||||
extern uint8_t cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, int type);
|
||||
static __inline int
|
||||
bcd2bin(int x)
|
||||
{
|
||||
return (x >> 4) * 10 + (x & 0x0f);
|
||||
}
|
||||
|
||||
extern void cdrom_seek(cdrom_t *dev, uint32_t pos, uint8_t vendor_type);
|
||||
extern char *cdrom_get_vendor(const int type);
|
||||
extern void cdrom_get_model(const int type, char *name, const int id);
|
||||
extern char *cdrom_get_revision(const int type);
|
||||
extern int cdrom_get_scsi_std(const int type);
|
||||
extern int cdrom_is_early(const int type);
|
||||
extern int cdrom_is_generic(const int type);
|
||||
extern int cdrom_is_caddy(const int type);
|
||||
extern int cdrom_get_speed(const int type);
|
||||
extern int cdrom_get_inquiry_len(const int type);
|
||||
extern int cdrom_has_dma(const int type);
|
||||
extern int cdrom_get_transfer_max(const int type, const int mode);
|
||||
extern int cdrom_get_type_count(void);
|
||||
extern void cdrom_get_identify_model(const int type, char *name, const int id);
|
||||
extern void cdrom_get_name(const int type, char *name);
|
||||
extern char *cdrom_get_internal_name(const int type);
|
||||
extern int cdrom_get_from_internal_name(const char *s);
|
||||
/* TODO: Configuration migration, remove when no longer needed. */
|
||||
extern int cdrom_get_from_name(const char *s);
|
||||
extern void cdrom_set_type(const int model, const int type);
|
||||
extern int cdrom_get_type(const int model);
|
||||
|
||||
extern void cdrom_close_handler(uint8_t id);
|
||||
extern void cdrom_insert(uint8_t id);
|
||||
extern void cdrom_exit(uint8_t id);
|
||||
extern int cdrom_is_empty(uint8_t id);
|
||||
extern void cdrom_eject(uint8_t id);
|
||||
extern void cdrom_reload(uint8_t id);
|
||||
extern int cdrom_lba_to_msf_accurate(const int lba);
|
||||
extern void cdrom_interleave_subch(uint8_t *d, const uint8_t *s);
|
||||
extern double cdrom_seek_time(const cdrom_t *dev);
|
||||
extern void cdrom_stop(cdrom_t *dev);
|
||||
extern void cdrom_seek(cdrom_t *dev, const uint32_t pos, const uint8_t vendor_type);
|
||||
extern int cdrom_is_pre(const cdrom_t *dev, const uint32_t lba);
|
||||
|
||||
extern int cdrom_image_open(cdrom_t *dev, const char *fn);
|
||||
extern void cdrom_image_close(cdrom_t *dev);
|
||||
extern int cdrom_audio_callback(cdrom_t *dev, int16_t *output, const int len);
|
||||
extern uint8_t cdrom_audio_play(cdrom_t *dev, const uint32_t pos, const uint32_t len, const int ismsf);
|
||||
extern uint8_t cdrom_audio_track_search(cdrom_t *dev, const uint32_t pos,
|
||||
const int type, const uint8_t playbit);
|
||||
extern uint8_t cdrom_audio_track_search_pioneer(cdrom_t *dev, const uint32_t pos, const uint8_t playbit);
|
||||
extern uint8_t cdrom_audio_play_pioneer(cdrom_t *dev, const uint32_t pos);
|
||||
extern uint8_t cdrom_audio_play_toshiba(cdrom_t *dev, const uint32_t pos, const int type);
|
||||
extern uint8_t cdrom_audio_scan(cdrom_t *dev, const uint32_t pos);
|
||||
extern void cdrom_audio_pause_resume(cdrom_t *dev, const uint8_t resume);
|
||||
|
||||
extern int cdrom_ioctl_open(cdrom_t *dev, const char *drv);
|
||||
extern void cdrom_ioctl_close(cdrom_t *dev);
|
||||
extern uint8_t cdrom_get_current_status(const cdrom_t *dev);
|
||||
extern void cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, const int msf);
|
||||
extern void cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, const int msf);
|
||||
extern uint8_t cdrom_get_audio_status_pioneer(cdrom_t *dev, uint8_t *b);
|
||||
extern uint8_t cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, const int msf);
|
||||
extern void cdrom_get_current_subcodeq(cdrom_t *dev, uint8_t *b);
|
||||
extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b);
|
||||
extern int cdrom_read_toc(const cdrom_t *dev, uint8_t *b, const int type,
|
||||
const uint8_t start_track, const int msf, const int max_len);
|
||||
extern int cdrom_read_toc_sony(const cdrom_t *dev, uint8_t *b, const uint8_t start_track,
|
||||
const int msf, const int max_len);
|
||||
#ifdef USE_CDROM_MITSUMI
|
||||
extern void cdrom_get_track_buffer(cdrom_t *dev, uint8_t *buf);
|
||||
extern void cdrom_get_q(cdrom_t *dev, uint8_t *buf, int *curtoctrk, uint8_t mode);
|
||||
extern uint8_t cdrom_mitsumi_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len);
|
||||
#endif
|
||||
extern uint8_t cdrom_read_disc_info_toc(cdrom_t *dev, uint8_t *b,
|
||||
const uint8_t track, const int type);
|
||||
extern int cdrom_is_track_audio(cdrom_t *dev, const int sector, const int ismsf,
|
||||
int cdrom_sector_type, const uint8_t vendor_type);
|
||||
extern int cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, const int sector, const int ismsf,
|
||||
int cdrom_sector_type, const int cdrom_sector_flags,
|
||||
int *len, const uint8_t vendor_type);
|
||||
extern int cdrom_read_dvd_structure(const cdrom_t *dev, const uint8_t layer, const uint8_t format,
|
||||
uint8_t *buffer, uint32_t *info);
|
||||
extern void cdrom_read_disc_information(const cdrom_t *dev, uint8_t *buffer);
|
||||
extern int cdrom_read_track_information(cdrom_t *dev, const uint8_t *cdb, uint8_t *buffer);
|
||||
extern uint8_t cdrom_get_current_mode(cdrom_t *dev);
|
||||
extern void cdrom_set_empty(cdrom_t *dev);
|
||||
extern void cdrom_update_status(cdrom_t *dev);
|
||||
extern int cdrom_load(cdrom_t *dev, const char *fn, const int skip_insert);
|
||||
|
||||
extern void cdrom_update_cdb(uint8_t *cdb, int lba_pos,
|
||||
int number_of_blocks);
|
||||
extern void cdrom_global_init(void);
|
||||
extern void cdrom_hard_reset(void);
|
||||
extern void cdrom_close(void);
|
||||
extern void cdrom_insert(const uint8_t id);
|
||||
extern void cdrom_exit(const uint8_t id);
|
||||
extern int cdrom_is_empty(const uint8_t id);
|
||||
extern void cdrom_eject(const uint8_t id);
|
||||
extern void cdrom_reload(const uint8_t id);
|
||||
|
||||
extern int find_cdrom_for_scsi_id(uint8_t scsi_id);
|
||||
|
||||
extern void cdrom_close(void);
|
||||
extern void cdrom_global_init(void);
|
||||
extern void cdrom_global_reset(void);
|
||||
extern void cdrom_hard_reset(void);
|
||||
extern void scsi_cdrom_drive_reset(int c);
|
||||
extern int cdrom_assigned_letters;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -6,35 +6,33 @@
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* CD-ROM image file handling module header, translated to C
|
||||
* from cdrom_dosbox.h.
|
||||
* CD-ROM image file handling module header.
|
||||
*
|
||||
* Authors: RichardG,
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* RichardG, <richardg867@gmail.com>
|
||||
* Cacodemon345
|
||||
*
|
||||
* Copyright 2016-2022 RichardG.
|
||||
* Copyright 2016-2022 Miran Grca.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2016-2025 RichardG.
|
||||
* Copyright 2024-2025 Cacodemon345.
|
||||
*/
|
||||
#ifndef CDROM_IMAGE_H
|
||||
#define CDROM_IMAGE_H
|
||||
|
||||
/* this header file lists the functions provided by
|
||||
various platform specific cdrom-ioctl files */
|
||||
/* Track file struct. */
|
||||
typedef struct track_file_t {
|
||||
int (*read)(void *priv, uint8_t *buffer, uint64_t seek, size_t count);
|
||||
uint64_t (*get_length)(void *priv);
|
||||
void (*close)(void *priv);
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
char fn[260];
|
||||
FILE *fp;
|
||||
void *priv;
|
||||
void *log;
|
||||
|
||||
extern int image_open(uint8_t id, wchar_t *fn);
|
||||
extern void image_reset(uint8_t id);
|
||||
int motorola;
|
||||
} track_file_t;
|
||||
|
||||
extern void image_close(uint8_t id);
|
||||
|
||||
void update_status_bar_icon_state(int tag, int state);
|
||||
extern void cdrom_set_null_handler(uint8_t id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
extern void *image_open(cdrom_t *dev, const char *path);
|
||||
|
||||
#endif /*CDROM_IMAGE_H*/
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* CD-ROM image file handling module header.
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* RichardG, <richardg867@gmail.com>
|
||||
* Cacodemon345
|
||||
*
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2024-2025 Cacodemon345.
|
||||
*/
|
||||
#ifndef CDROM_IMAGE_BACKEND_H
|
||||
#define CDROM_IMAGE_BACKEND_H
|
||||
|
||||
#define RAW_SECTOR_SIZE 2352
|
||||
#define COOKED_SECTOR_SIZE 2048
|
||||
|
||||
#define DATA_TRACK 0x14
|
||||
#define AUDIO_TRACK 0x10
|
||||
|
||||
#define CD_FPS 75
|
||||
#define FRAMES_TO_MSF(f, M, S, F) \
|
||||
{ \
|
||||
uint64_t value = f; \
|
||||
*(F) = (value % CD_FPS) & 0xff; \
|
||||
value /= CD_FPS; \
|
||||
*(S) = (value % 60) & 0xff; \
|
||||
value /= 60; \
|
||||
*(M) = value & 0xff; \
|
||||
}
|
||||
#define MSF_TO_FRAMES(M, S, F) ((M) *60 * CD_FPS + (S) *CD_FPS + (F))
|
||||
|
||||
typedef struct SMSF {
|
||||
uint16_t min;
|
||||
uint8_t sec;
|
||||
uint8_t fr;
|
||||
} TMSF;
|
||||
|
||||
/* Track file struct. */
|
||||
typedef struct track_file_t {
|
||||
int (*read)(void *priv, uint8_t *buffer, uint64_t seek, size_t count);
|
||||
uint64_t (*get_length)(void *priv);
|
||||
void (*close)(void *priv);
|
||||
|
||||
char fn[260];
|
||||
FILE *fp;
|
||||
void *priv;
|
||||
|
||||
int motorola;
|
||||
} track_file_t;
|
||||
|
||||
#define INDEX_SPECIAL -2 /* Track A0h onwards. */
|
||||
#define INDEX_NONE -1 /* Empty block. */
|
||||
#define INDEX_ZERO 0 /* Block not in the file, return all 0x00's. */
|
||||
#define INDEX_NORMAL 1 /* Block in the file. */
|
||||
|
||||
typedef struct track_index_t {
|
||||
/* Is the current block in the file? If not, return all 0x00's. -1 means not yet loaded. */
|
||||
int32_t type;
|
||||
/* The amount of bytes to skip at the beginning of each sector. */
|
||||
int32_t skip;
|
||||
/* Starting and ending sector LBA - negative in order to accomodate LBA -150 to -1
|
||||
to read the pregap of track 1. */
|
||||
uint64_t start;
|
||||
uint64_t length;
|
||||
uint64_t file_start;
|
||||
uint64_t file_length;
|
||||
track_file_t *file;
|
||||
} track_index_t;
|
||||
|
||||
typedef struct track_t {
|
||||
uint8_t session;
|
||||
uint8_t attr;
|
||||
uint8_t tno;
|
||||
uint8_t point;
|
||||
uint8_t extra[4];
|
||||
uint8_t mode;
|
||||
uint8_t form;
|
||||
uint8_t pad;
|
||||
uint8_t skip;
|
||||
uint32_t sector_size;
|
||||
track_index_t idx[3];
|
||||
} track_t;
|
||||
|
||||
typedef struct cd_img_t {
|
||||
int32_t tracks_num;
|
||||
track_t *tracks;
|
||||
} cd_img_t;
|
||||
|
||||
/* Binary file functions. */
|
||||
extern void cdi_get_raw_track_info(cd_img_t *cdi, int *num, uint8_t *buffer);
|
||||
extern int cdi_get_audio_sub(cd_img_t *cdi, uint32_t sector, uint8_t *attr, uint8_t *track,
|
||||
uint8_t *index, TMSF *rel_pos, TMSF *abs_pos);
|
||||
extern int cdi_read_sector(cd_img_t *cdi, uint8_t *buffer, int raw, uint32_t sector);
|
||||
extern int cdi_read_sector_sub(cd_img_t *cdi, uint8_t *buffer, uint32_t sector);
|
||||
extern int cdi_get_sector_size(cd_img_t *cdi, uint32_t sector);
|
||||
extern int cdi_is_audio(cd_img_t *cdi, uint32_t sector);
|
||||
extern int cdi_is_pre(cd_img_t *cdi, uint32_t sector);
|
||||
extern int cdi_is_mode2(cd_img_t *cdi, uint32_t sector);
|
||||
extern int cdi_get_mode2_form(cd_img_t *cdi, uint32_t sector);
|
||||
extern int cdi_load_iso(cd_img_t *cdi, const char *filename);
|
||||
extern int cdi_load_cue(cd_img_t *cdi, const char *cuefile);
|
||||
extern void cdi_close(cd_img_t *cdi);
|
||||
extern int cdi_set_device(cd_img_t *cdi, const char *path);
|
||||
|
||||
/* Virtual ISO functions. */
|
||||
extern int viso_read(void *priv, uint8_t *buffer, uint64_t seek, size_t count);
|
||||
extern uint64_t viso_get_length(void *priv);
|
||||
extern void viso_close(void *priv);
|
||||
extern track_file_t *viso_init(const char *dirname, int *error);
|
||||
|
||||
#endif /*CDROM_IMAGE_BACKEND_H*/
|
||||
26
src/include/86box/cdrom_image_viso.h
Normal file
26
src/include/86box/cdrom_image_viso.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* CD-ROM image file handling module header.
|
||||
*
|
||||
* Authors: RichardG, <richardg867@gmail.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2016-2025 RichardG.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
*/
|
||||
#ifndef CDROM_IMAGE_VISO_H
|
||||
#define CDROM_IMAGE_VISO_H
|
||||
|
||||
/* Virtual ISO functions. */
|
||||
extern int viso_read(void *priv, uint8_t *buffer, uint64_t seek, size_t count);
|
||||
extern uint64_t viso_get_length(void *priv);
|
||||
extern void viso_close(void *priv);
|
||||
extern track_file_t *viso_init(const uint8_t id, const char *dirname, int *error);
|
||||
|
||||
#endif /*CDROM_IMAGE_VISO_H*/
|
||||
@@ -21,11 +21,13 @@ extern int cdrom_interface_current;
|
||||
|
||||
extern void cdrom_interface_reset(void);
|
||||
|
||||
extern const char *cdrom_interface_get_internal_name(int cdinterface);
|
||||
extern int cdrom_interface_get_from_internal_name(char *s);
|
||||
extern int cdrom_interface_has_config(int cdinterface);
|
||||
extern const device_t *cdrom_interface_get_device(int cdinterface);
|
||||
extern int cdrom_interface_get_flags(int cdinterface);
|
||||
extern int cdrom_interface_available(int cdinterface);
|
||||
const char *cdrom_interface_get_internal_name(const int cdinterface);
|
||||
extern int cdrom_interface_get_from_internal_name(const char *s);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *cdrom_interface_get_device(const int cdinterface);
|
||||
#endif
|
||||
extern int cdrom_interface_has_config(const int cdinterface);
|
||||
extern int cdrom_interface_get_flags(const int cdinterface);
|
||||
extern int cdrom_interface_available(const int cdinterface);
|
||||
|
||||
#endif /*EMU_CDROM_INTERFACE_H*/
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* CD-ROM image file handling module header, translated to C
|
||||
* from cdrom_dosbox.h.
|
||||
*
|
||||
* Authors: RichardG,
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2016-2022 RichardG.
|
||||
* Copyright 2016-2022 Miran Grca.
|
||||
*/
|
||||
#ifndef CDROM_IOCTL_H
|
||||
#define CDROM_IOCTL_H
|
||||
|
||||
/* this header file lists the functions provided by
|
||||
various platform specific cdrom-ioctl files */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*CDROM_IOCTL_H*/
|
||||
@@ -18,6 +18,7 @@
|
||||
#define EMU_CHIPSET_H
|
||||
|
||||
/* ACC */
|
||||
extern const device_t acc2036_device;
|
||||
extern const device_t acc2168_device;
|
||||
|
||||
/* ALi */
|
||||
@@ -37,6 +38,9 @@ extern const device_t ali6117d_device;
|
||||
/* AMD */
|
||||
extern const device_t amd640_device;
|
||||
|
||||
/* ASUS */
|
||||
extern const device_t isa486c_device;
|
||||
|
||||
/* Compaq */
|
||||
extern const device_t compaq_386_device;
|
||||
extern const device_t compaq_genoa_device;
|
||||
@@ -48,9 +52,11 @@ extern const device_t contaq_82c597_device;
|
||||
/* C&T */
|
||||
extern const device_t ct_82c100_device;
|
||||
extern const device_t neat_device;
|
||||
extern const device_t neat_sx_device;
|
||||
extern const device_t scat_device;
|
||||
extern const device_t scat_4_device;
|
||||
extern const device_t scat_sx_device;
|
||||
extern const device_t cs8220_device;
|
||||
extern const device_t cs8230_device;
|
||||
extern const device_t cs4031_device;
|
||||
|
||||
@@ -108,6 +114,9 @@ extern const device_t slc90e66_device;
|
||||
|
||||
extern const device_t ioapic_device;
|
||||
|
||||
/* Olivetti */
|
||||
extern const device_t olivetti_eva_device;
|
||||
|
||||
/* OPTi */
|
||||
extern const device_t opti283_device;
|
||||
extern const device_t opti291_device;
|
||||
@@ -115,7 +124,9 @@ extern const device_t opti381_device;
|
||||
extern const device_t opti391_device;
|
||||
extern const device_t opti481_device;
|
||||
extern const device_t opti493_device;
|
||||
extern const device_t opti495_device;
|
||||
extern const device_t opti495slc_device;
|
||||
extern const device_t opti495sx_device;
|
||||
extern const device_t opti498_device;
|
||||
extern const device_t opti499_device;
|
||||
extern const device_t opti601_device;
|
||||
extern const device_t opti602_device;
|
||||
@@ -155,6 +166,9 @@ extern const device_t stpc_atlas_device;
|
||||
extern const device_t stpc_serial_device;
|
||||
extern const device_t stpc_lpt_device;
|
||||
|
||||
/* Symphony */
|
||||
extern const device_t sl82c461_device;
|
||||
|
||||
/* UMC */
|
||||
extern const device_t umc_8886f_device;
|
||||
extern const device_t umc_8886af_device;
|
||||
@@ -190,12 +204,12 @@ extern const device_t vlsi_scamp_device;
|
||||
extern const device_t wd76c10_device;
|
||||
|
||||
/* Miscellaneous Hardware */
|
||||
extern const device_t tulip_jumper_device;
|
||||
|
||||
extern const device_t dell_jumper_device;
|
||||
|
||||
extern const device_t nec_mate_unk_device;
|
||||
|
||||
extern const device_t phoenix_486_jumper_device;
|
||||
extern const device_t phoenix_486_jumper_pci_device;
|
||||
|
||||
#ifdef USE_OLIVETTI
|
||||
extern const device_t olivetti_eva_device;
|
||||
#endif /* USE_OLIVETTI */
|
||||
#endif /*EMU_CHIPSET_H*/
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
*
|
||||
* Configuration file handler header.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Sarah Walker,
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Overdoze,
|
||||
* Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2016-2017 Miran Grca.
|
||||
* Copyright 2017 Fred N. van Kempen.
|
||||
* Copyright 2021-2025 Jasmine Iwanek.
|
||||
*/
|
||||
#ifndef EMU_CONFIG_H
|
||||
#define EMU_CONFIG_H
|
||||
@@ -111,6 +111,7 @@ typedef struct config_t {
|
||||
# ifdef USE_SERIAL_DEVICES
|
||||
char serial_devices[SERIAL_MAX][32]; /* Serial device names */
|
||||
# endif
|
||||
char gameport_devices[GAMEPORT_MAX][32]; /* gameport device names */
|
||||
|
||||
/* Other peripherals category */
|
||||
int fdc_current[FDC_MAX]; /* Floppy disk controller type */
|
||||
@@ -121,6 +122,7 @@ typedef struct config_t {
|
||||
int ide_qua_enabled; /* Quaternary IDE controller enabled */
|
||||
int bugger_enabled; /* ISA bugger device enabled */
|
||||
int isa_rtc_type; /* ISA RTC card */
|
||||
int isa_rom_type[ISAROM_MAX]; /* ISA ROM boards */
|
||||
int isa_mem_type[ISAMEM_MAX]; /* ISA memory boards */
|
||||
|
||||
/* Hard disks category */
|
||||
|
||||
34
src/include/86box/crc.h
Normal file
34
src/include/86box/crc.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Definitions for the CRC code.
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
*/
|
||||
#ifndef EMU_CRC_H
|
||||
#define EMU_CRC_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef union {
|
||||
uint16_t word;
|
||||
uint8_t bytes[2];
|
||||
} crc_t;
|
||||
|
||||
extern void crc16_setup(uint16_t *crc_table, uint16_t poly);
|
||||
extern void crc16_calc(uint16_t *crc_table, uint8_t byte, crc_t *crc_var);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*EMU_CRC_H*/
|
||||
@@ -18,7 +18,7 @@
|
||||
* Copyright 2016-2019 Miran Grca.
|
||||
* Copyright 2008-2019 Sarah Walker.
|
||||
* Copyright 2021 Andreas J. Reichel.
|
||||
* Copyright 2021-2022 Jasmine Iwanek.
|
||||
* Copyright 2021-2025 Jasmine Iwanek.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -79,29 +79,34 @@
|
||||
// #define CONFIG_STANDALONE 257 /* not available on the on-board variant */
|
||||
|
||||
enum {
|
||||
DEVICE_PCJR = 2, /* requires an IBM PCjr */
|
||||
DEVICE_XTKBC = 4, /* requires an XT-compatible keyboard controller */
|
||||
DEVICE_AT = 8, /* requires an AT-compatible system */
|
||||
DEVICE_ATKBC = 0x10, /* requires an AT-compatible keyboard controller */
|
||||
DEVICE_PS2 = 0x20, /* requires a PS/1 or PS/2 system */
|
||||
DEVICE_ISA = 0x40, /* requires the ISA bus */
|
||||
DEVICE_CBUS = 0x80, /* requires the C-BUS bus */
|
||||
DEVICE_PCMCIA = 0x100, /* requires the PCMCIA bus */
|
||||
DEVICE_MCA = 0x200, /* requires the MCA bus */
|
||||
DEVICE_HIL = 0x400, /* requires the HP HIL bus */
|
||||
DEVICE_EISA = 0x800, /* requires the EISA bus */
|
||||
DEVICE_AT32 = 0x1000, /* requires the Mylex AT/32 local bus */
|
||||
DEVICE_OLB = 0x2000, /* requires the OPTi local bus */
|
||||
DEVICE_VLB = 0x4000, /* requires the VLB bus */
|
||||
DEVICE_PCI = 0x8000, /* requires the PCI bus */
|
||||
DEVICE_CARDBUS = 0x10000, /* requires the CardBus bus */
|
||||
DEVICE_USB = 0x20000, /* requires the USB bus */
|
||||
DEVICE_AGP = 0x40000, /* requires the AGP bus */
|
||||
DEVICE_AC97 = 0x80000, /* requires the AC'97 bus */
|
||||
DEVICE_COM = 0x100000, /* requires a serial port */
|
||||
DEVICE_LPT = 0x200000, /* requires a parallel port */
|
||||
DEVICE_KBC = 0x400000, /* is a keyboard controller */
|
||||
DEVICE_SOFTRESET = 0x800000, /* requires to be reset on soft reset */
|
||||
DEVICE_CASETTE = 1, /* requires a Casette Port */
|
||||
DEVICE_SIDECAR = 2, /* requires an IBM PCjr */
|
||||
DEVICE_ISA = 4, /* requires the ISA bus */
|
||||
DEVICE_XT_KBC = 8, /* requires an XT-compatible keyboard controller */
|
||||
DEVICE_CBUS = 0x10, /* requires the C-BUS bus */
|
||||
DEVICE_ISA16 = 0x20, /* requires an AT-compatible system */
|
||||
DEVICE_AT_KBC = 0x40, /* requires an AT-compatible keyboard controller */
|
||||
DEVICE_MCA = 0x80, /* requires the MCA bus */
|
||||
DEVICE_MCA32 = 0x100, /* requires the MCA bus */
|
||||
DEVICE_PS2_KBC = 0x200, /* requires a PS/1 or PS/2 system */
|
||||
DEVICE_PCMCIA = 0x400, /* requires the PCMCIA bus */
|
||||
DEVICE_HIL = 0x800, /* requires the HP HIL bus */
|
||||
DEVICE_EISA = 0x1000, /* requires the EISA bus */
|
||||
DEVICE_AT32 = 0x2000, /* requires the Mylex AT/32 local bus */
|
||||
DEVICE_OLB = 0x4000, /* requires the OPTi local bus */
|
||||
DEVICE_VLB = 0x8000, /* requires the VLB bus */
|
||||
DEVICE_PCI = 0x10000, /* requires the PCI bus */
|
||||
DEVICE_CARDBUS = 0x20000, /* requires the CardBus bus */
|
||||
DEVICE_USB = 0x40000, /* requires the USB bus */
|
||||
DEVICE_AGP = 0x80000, /* requires the AGP bus */
|
||||
DEVICE_AC97 = 0x100000, /* requires the AC'97 bus */
|
||||
DEVICE_BUS = 0x1fffff, /* requires a machine bus */
|
||||
|
||||
DEVICE_COM = 0x200000, /* requires a serial port */
|
||||
DEVICE_LPT = 0x400000, /* requires a parallel port */
|
||||
|
||||
DEVICE_KBC = 0x800000, /* is a keyboard controller */
|
||||
DEVICE_SOFTRESET = 0x1000000, /* requires to be reset on soft reset */
|
||||
|
||||
DEVICE_ONBOARD = 0x40000000, /* is on-board */
|
||||
DEVICE_PIT = 0x80000000, /* device is a PIT */
|
||||
@@ -118,16 +123,6 @@ enum {
|
||||
#define BIOS_INTERLEAVED_INVERT 8
|
||||
#define BIOS_HIGH_BIT_INVERT 16
|
||||
|
||||
#define device_common_config_t \
|
||||
const char *name; \
|
||||
const char *description; \
|
||||
int type; \
|
||||
const char *default_string; \
|
||||
int default_int; \
|
||||
const char *file_filter; \
|
||||
const device_config_spinner_t spinner; \
|
||||
const device_config_selection_t selection[32]
|
||||
|
||||
typedef struct device_config_selection_t {
|
||||
const char *description;
|
||||
int value;
|
||||
@@ -139,29 +134,27 @@ typedef struct device_config_spinner_t {
|
||||
int16_t step;
|
||||
} device_config_spinner_t;
|
||||
|
||||
typedef struct _device_dep_config_ {
|
||||
device_common_config_t;
|
||||
} device_dep_config_t;
|
||||
|
||||
typedef struct device_config_bios_t {
|
||||
const char *name;
|
||||
const char *internal_name;
|
||||
int bios_type;
|
||||
int files_no;
|
||||
uint8_t bios_type;
|
||||
uint8_t files_no;
|
||||
uint32_t local;
|
||||
uint32_t size;
|
||||
void *dev1;
|
||||
void *dev2;
|
||||
void *dev[2];
|
||||
const char *files[9];
|
||||
/* Configuration options that depend on the device variant.
|
||||
To prevent excessive nesting, there is no CONFIG_BIOS
|
||||
option a dep_config struct */
|
||||
const device_dep_config_t *dep_config;
|
||||
} device_config_bios_t;
|
||||
|
||||
typedef struct _device_config_ {
|
||||
device_common_config_t;
|
||||
const device_config_bios_t bios[32];
|
||||
const char *name;
|
||||
const char *description;
|
||||
int type;
|
||||
const char *default_string;
|
||||
int default_int;
|
||||
const char *file_filter;
|
||||
const device_config_spinner_t spinner;
|
||||
const device_config_selection_t selection[64];
|
||||
const device_config_bios_t bios[32];
|
||||
} device_config_t;
|
||||
|
||||
typedef struct _device_ {
|
||||
@@ -176,10 +169,7 @@ typedef struct _device_ {
|
||||
};
|
||||
void (*close)(void *priv);
|
||||
void (*reset)(void *priv);
|
||||
union {
|
||||
int (*available)(void);
|
||||
int (*poll)(void *priv);
|
||||
};
|
||||
int (*available)(void);
|
||||
void (*speed_changed)(void *priv);
|
||||
void (*force_redraw)(void *priv);
|
||||
|
||||
@@ -197,12 +187,12 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
extern void device_init(void);
|
||||
extern void device_set_context(device_context_t *c, const device_t *dev, int inst);
|
||||
extern void device_set_context(device_context_t *ctx, const device_t *dev, int inst);
|
||||
extern void device_context(const device_t *dev);
|
||||
extern void device_context_inst(const device_t *dev, int inst);
|
||||
extern void device_context_restore(void);
|
||||
extern void *device_add(const device_t *d);
|
||||
extern void *device_add_linked(const device_t *d, void *priv);
|
||||
extern void *device_add(const device_t *dev);
|
||||
extern void *device_add_linked(const device_t *dev, void *priv);
|
||||
extern void *device_add_params(const device_t *dev, void *params);
|
||||
extern void device_add_ex(const device_t *dev, void *priv);
|
||||
extern void device_add_ex_params(const device_t *dev, void *priv, void *params);
|
||||
@@ -216,34 +206,40 @@ extern void device_reset_all(uint32_t match_flags);
|
||||
extern void *device_find_first_priv(uint32_t match_flags);
|
||||
extern void *device_get_priv(const device_t *dev);
|
||||
extern int device_available(const device_t *dev);
|
||||
extern int device_poll(const device_t *dev);
|
||||
extern void device_speed_changed(void);
|
||||
extern void device_force_redraw(void);
|
||||
extern void device_get_name(const device_t *dev, int bus, char *name);
|
||||
extern int device_has_config(const device_t *dev);
|
||||
|
||||
extern uint8_t device_get_bios_type(const device_t *dev, const char *internal_name);
|
||||
extern uint8_t device_get_bios_num_files(const device_t *dev, const char *internal_name);
|
||||
extern uint32_t device_get_bios_local(const device_t *dev, const char *internal_name);
|
||||
extern uint32_t device_get_bios_file_size(const device_t *dev, const char *internal_name);
|
||||
extern const char *device_get_bios_file(const device_t *dev, const char *internal_name, int file_no);
|
||||
|
||||
extern int device_is_valid(const device_t *, int m);
|
||||
extern int device_is_valid(const device_t *, int mch);
|
||||
|
||||
extern const device_t* device_context_get_device(void);
|
||||
|
||||
extern int device_get_config_int(const char *name);
|
||||
extern int device_get_config_int_ex(const char *s, int dflt_int);
|
||||
extern int device_get_config_int_ex(const char *str, int def);
|
||||
extern int device_get_config_hex16(const char *name);
|
||||
extern int device_get_config_hex20(const char *name);
|
||||
extern int device_get_config_mac(const char *name, int dflt_int);
|
||||
extern void device_set_config_int(const char *s, int val);
|
||||
extern void device_set_config_hex16(const char *s, int val);
|
||||
extern void device_set_config_hex20(const char *s, int val);
|
||||
extern void device_set_config_mac(const char *s, int val);
|
||||
extern int device_get_config_mac(const char *name, int def);
|
||||
extern void device_set_config_int(const char *str, int val);
|
||||
extern void device_set_config_hex16(const char *str, int val);
|
||||
extern void device_set_config_hex20(const char *str, int val);
|
||||
extern void device_set_config_mac(const char *str, int val);
|
||||
extern const char *device_get_config_string(const char *name);
|
||||
extern int device_get_instance(void);
|
||||
#define device_get_config_bios device_get_config_string
|
||||
|
||||
extern const char *device_get_internal_name(const device_t *dev);
|
||||
|
||||
extern int machine_get_config_int(char *s);
|
||||
extern char *machine_get_config_string(char *s);
|
||||
extern int machine_get_config_int(char *str);
|
||||
extern const char *machine_get_config_string(char *str);
|
||||
|
||||
extern int machine_device_available(const device_t *dev);
|
||||
|
||||
extern const device_t device_none;
|
||||
extern const device_t device_internal;
|
||||
|
||||
@@ -38,26 +38,27 @@
|
||||
#define FDC_QUATERNARY_IRQ 6
|
||||
#define FDC_QUATERNARY_DMA 2
|
||||
|
||||
#define FDC_FLAG_PCJR 0x01 /* PCjr */
|
||||
#define FDC_FLAG_DISKCHG_ACTLOW 0x02 /* Amstrad, PS/1, PS/2 ISA */
|
||||
#define FDC_FLAG_AT 0x04 /* AT+, PS/x */
|
||||
#define FDC_FLAG_PS2 0x08 /* PS/1, PS/2 ISA */
|
||||
#define FDC_FLAG_PS2_MCA 0x10 /* PS/2 MCA */
|
||||
#define FDC_FLAG_SUPERIO 0x20 /* Super I/O chips */
|
||||
#define FDC_FLAG_START_RWC_1 0x40 /* W83877F, W83977F */
|
||||
#define FDC_FLAG_MORE_TRACKS 0x80 /* W83877F, W83977F, PC87306, PC87309 */
|
||||
#define FDC_FLAG_NSC 0x100 /* PC87306, PC87309 */
|
||||
#define FDC_FLAG_TOSHIBA 0x200 /* T1000, T1200 */
|
||||
#define FDC_FLAG_AMSTRAD 0x400 /* Non-AT Amstrad machines */
|
||||
#define FDC_FLAG_UMC 0x800 /* UMC UM8398 */
|
||||
#define FDC_FLAG_ALI 0x1000 /* ALi M512x / M1543C */
|
||||
#define FDC_FLAG_NO_DSR_RESET 0x2000 /* Has no DSR reset */
|
||||
#define FDC_FLAG_DENSEL_INVERT 0x4000 /* Invert DENSEL polarity */
|
||||
#define FDC_FLAG_FINTR 0x8000 /* Raise FINTR on data command finish */
|
||||
#define FDC_FLAG_NEC 0x10000 /* Is NEC upd765-compatible */
|
||||
#define FDC_FLAG_SEC 0x20000 /* Is Secondary */
|
||||
#define FDC_FLAG_TER 0x40000 /* Is Tertiary */
|
||||
#define FDC_FLAG_QUA 0x80000 /* Is Quaternary */
|
||||
#define FDC_FLAG_PCJR 0x01 /* PCjr */
|
||||
#define FDC_FLAG_DISKCHG_ACTLOW 0x02 /* Amstrad, PS/1, PS/2 ISA */
|
||||
#define FDC_FLAG_AT 0x04 /* AT+, PS/x */
|
||||
#define FDC_FLAG_PS2 0x08 /* PS/1, PS/2 ISA */
|
||||
#define FDC_FLAG_PS2_MCA 0x10 /* PS/2 MCA */
|
||||
#define FDC_FLAG_SUPERIO 0x20 /* Super I/O chips */
|
||||
#define FDC_FLAG_START_RWC_1 0x40 /* W83877F, W83977F */
|
||||
#define FDC_FLAG_MORE_TRACKS 0x80 /* W83877F, W83977F, PC87306, PC87309 */
|
||||
#define FDC_FLAG_NSC 0x100 /* PC87306, PC87309 */
|
||||
#define FDC_FLAG_TOSHIBA 0x200 /* T1000, T1200 */
|
||||
#define FDC_FLAG_AMSTRAD 0x400 /* Non-AT Amstrad machines */
|
||||
#define FDC_FLAG_UMC 0x800 /* UMC UM8398 */
|
||||
#define FDC_FLAG_ALI 0x1000 /* ALi M512x / M1543C */
|
||||
#define FDC_FLAG_NO_DSR_RESET 0x2000 /* Has no DSR reset */
|
||||
#define FDC_FLAG_DENSEL_INVERT 0x4000 /* Invert DENSEL polarity */
|
||||
#define FDC_FLAG_FINTR 0x8000 /* Raise FINTR on data command finish */
|
||||
#define FDC_FLAG_NEC 0x10000 /* Is NEC upd765-compatible */
|
||||
#define FDC_FLAG_SEC 0x20000 /* Is Secondary */
|
||||
#define FDC_FLAG_TER 0x40000 /* Is Tertiary */
|
||||
#define FDC_FLAG_QUA 0x80000 /* Is Quaternary */
|
||||
#define FDC_FLAG_SMC661 0x100000 /* SM(s)C FDC37C661 - different TDR enhanced mode */
|
||||
|
||||
typedef struct fdc_t {
|
||||
uint8_t dor;
|
||||
@@ -103,7 +104,6 @@ typedef struct fdc_t {
|
||||
uint8_t densel_force;
|
||||
uint8_t fifo;
|
||||
uint8_t tfifo;
|
||||
uint8_t fifobufpos;
|
||||
|
||||
uint8_t drv2en;
|
||||
uint8_t gap;
|
||||
@@ -120,6 +120,8 @@ typedef struct fdc_t {
|
||||
uint8_t lock;
|
||||
uint8_t dsr;
|
||||
|
||||
uint8_t media_id;
|
||||
|
||||
uint8_t params[15];
|
||||
uint8_t specify[2];
|
||||
uint8_t res[11];
|
||||
@@ -148,6 +150,7 @@ typedef struct fdc_t {
|
||||
int drvrate[4];
|
||||
|
||||
void *fifo_p;
|
||||
int fifointest;
|
||||
|
||||
sector_id_t read_track_sector;
|
||||
sector_id_t format_sector_id;
|
||||
@@ -166,6 +169,9 @@ extern void fdc_3f1_enable(fdc_t *fdc, int enable);
|
||||
extern int fdc_get_bit_rate(fdc_t *fdc);
|
||||
extern int fdc_get_bitcell_period(fdc_t *fdc);
|
||||
|
||||
extern uint8_t fdc_get_media_id(fdc_t *fdc, int id);
|
||||
extern void fdc_set_media_id(fdc_t *fdc, int id, int set);
|
||||
|
||||
/* A few functions to communicate between Super I/O chips and the FDC. */
|
||||
extern void fdc_update_enh_mode(fdc_t *fdc, int enh_mode);
|
||||
extern int fdc_get_rwc(fdc_t *fdc, int drive);
|
||||
@@ -177,6 +183,7 @@ extern uint8_t fdc_get_densel_polarity(fdc_t *fdc);
|
||||
extern void fdc_update_densel_force(fdc_t *fdc, int densel_force);
|
||||
extern void fdc_update_drvrate(fdc_t *fdc, int drive, int drvrate);
|
||||
extern void fdc_update_drv2en(fdc_t *fdc, int drv2en);
|
||||
extern void fdc_toggle_flag(fdc_t *fdc, int flag, int on);
|
||||
|
||||
extern void fdc_noidam(fdc_t *fdc);
|
||||
extern void fdc_nosector(fdc_t *fdc);
|
||||
@@ -201,6 +208,7 @@ extern int fdc_get_drive(fdc_t *fdc);
|
||||
extern int fdc_get_perp(fdc_t *fdc);
|
||||
extern int fdc_get_format_n(fdc_t *fdc);
|
||||
extern int fdc_is_mfm(fdc_t *fdc);
|
||||
extern int fdc_is_dma(fdc_t *fdc);
|
||||
extern double fdc_get_hut(fdc_t *fdc);
|
||||
extern double fdc_get_hlt(fdc_t *fdc);
|
||||
extern void fdc_request_next_sector_id(fdc_t *fdc);
|
||||
@@ -254,6 +262,7 @@ extern const device_t fdc_at_sec_device;
|
||||
extern const device_t fdc_at_ter_device;
|
||||
extern const device_t fdc_at_qua_device;
|
||||
extern const device_t fdc_at_actlow_device;
|
||||
extern const device_t fdc_at_smc_661_device;
|
||||
extern const device_t fdc_at_smc_device;
|
||||
extern const device_t fdc_at_ali_device;
|
||||
extern const device_t fdc_at_winbond_device;
|
||||
|
||||
@@ -34,6 +34,10 @@ extern const device_t fdc_b215_device;
|
||||
extern const device_t fdc_pii151b_device;
|
||||
extern const device_t fdc_pii158b_device;
|
||||
|
||||
extern const device_t fdc_compaticard_i_device;
|
||||
extern const device_t fdc_compaticard_ii_device;
|
||||
extern const device_t fdc_compaticard_iv_device;
|
||||
|
||||
extern const device_t fdc_monster_device;
|
||||
|
||||
extern void fdc_card_init(void);
|
||||
|
||||
@@ -8,21 +8,19 @@
|
||||
*
|
||||
* Definitions for the floppy drive emulation.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Sarah Walker, <https://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2018 Sarah Walker.
|
||||
* Copyright 2016-2018 Miran Grca.
|
||||
* Copyright 2018 Fred N. van Kempen.
|
||||
* Copyright 2008-2025 Sarah Walker.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2018-2025 Fred N. van Kempen.
|
||||
*/
|
||||
#ifndef EMU_FDD_H
|
||||
#define EMU_FDD_H
|
||||
|
||||
#define FDD_NUM 4
|
||||
#define FLOPPY_IMAGE_HISTORY 4
|
||||
#define FLOPPY_IMAGE_HISTORY 10
|
||||
#define SEEK_RECALIBRATE -999
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -129,13 +127,6 @@ extern int drive_empty[FDD_NUM];
|
||||
#define SECTOR_FIRST -2
|
||||
#define SECTOR_NEXT -1
|
||||
|
||||
typedef union {
|
||||
uint16_t word;
|
||||
uint8_t bytes[2];
|
||||
} crc_t;
|
||||
|
||||
void fdd_calccrc(uint8_t byte, crc_t *crc_var);
|
||||
|
||||
typedef struct d86f_handler_t {
|
||||
uint16_t (*disk_flags)(int drive);
|
||||
uint16_t (*side_flags)(int drive);
|
||||
|
||||
@@ -8,13 +8,11 @@
|
||||
*
|
||||
* Definitions for the 86F floppy image format.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2016-2019 Miran Grca.
|
||||
* Copyright 2018-2019 Fred N. van Kempen.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2018-2025 Fred N. van Kempen.
|
||||
*/
|
||||
#ifndef EMU_FLOPPY_86F_H
|
||||
#define EMU_FLOPPY_86F_H
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
#ifndef FIFO_H
|
||||
#define FIFO_H
|
||||
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
@@ -13,8 +10,11 @@
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2023 Miran Grca.
|
||||
* Copyright 2023-2025 Miran Grca.
|
||||
*/
|
||||
#ifndef FIFO_H
|
||||
#define FIFO_H
|
||||
|
||||
#define FIFO(size) \
|
||||
typedef struct { \
|
||||
int start; \
|
||||
@@ -37,6 +37,7 @@
|
||||
void (*d_full_evt)(void *); \
|
||||
void (*d_ready_evt)(void *); \
|
||||
\
|
||||
uint8_t tag[64]; \
|
||||
uint8_t buf[size]; \
|
||||
} fifo## size ##_t;
|
||||
|
||||
@@ -50,9 +51,13 @@ FIFO(64)
|
||||
|
||||
extern int fifo_get_count(void *priv);
|
||||
extern void fifo_write(uint8_t val, void *priv);
|
||||
extern void fifo_write_tagged(uint8_t tag, uint8_t val, void *priv);
|
||||
extern void fifo_write_evt(uint8_t val, void *priv);
|
||||
extern void fifo_write_evt_tagged(uint8_t tag, uint8_t val, void *priv);
|
||||
extern uint8_t fifo_read(void *priv);
|
||||
extern uint8_t fifo_read_tagged(uint8_t *tag, void *priv);
|
||||
extern uint8_t fifo_read_evt(void *priv);
|
||||
extern uint8_t fifo_read_evt_tagged(uint8_t *tag, void *priv);
|
||||
extern void fifo_clear_overrun(void *priv);
|
||||
extern int fifo_get_full(void *priv);
|
||||
extern int fifo_get_d_full(void *priv);
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#ifndef EMU_FLASH_H
|
||||
#define EMU_FLASH_H
|
||||
|
||||
extern const device_t amd_am28f010_flash_device;
|
||||
extern const device_t catalyst_flash_device;
|
||||
|
||||
extern const device_t intel_flash_bxt_ami_device;
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
*
|
||||
* Definitions for the generic game port handlers.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Sarah Walker, <https://pcem-emulator.co.uk/>
|
||||
* RichardG, <richardg867@gmail.com>
|
||||
@@ -18,11 +16,13 @@
|
||||
* Copyright 2016-2022 Miran Grca.
|
||||
* Copyright 2008-2018 Sarah Walker.
|
||||
* Copyright 2021 RichardG.
|
||||
* Copyright 2021-2024 Jasmine Iwanek.
|
||||
* Copyright 2021-2025 Jasmine Iwanek.
|
||||
*/
|
||||
#ifndef EMU_GAMEPORT_H
|
||||
#define EMU_GAMEPORT_H
|
||||
|
||||
#define GAMEPORT_MAX 2
|
||||
|
||||
#define MAX_PLAT_JOYSTICKS 8
|
||||
#define MAX_JOYSTICKS 4
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
#define AXIS_NOT_PRESENT -99999
|
||||
|
||||
#define JOYSTICK_PRESENT(n) (joystick_state[n].plat_joystick_nr != 0)
|
||||
#define JOYSTICK_PRESENT(gp, js) (joystick_state[gp][js].plat_joystick_nr != 0)
|
||||
|
||||
#define GAMEPORT_1ADDR 0x010000
|
||||
#define GAMEPORT_6ADDR 0x060000
|
||||
@@ -110,10 +110,20 @@ typedef struct joystick_if_t {
|
||||
const char *pov_names[MAX_JOY_POVS];
|
||||
} joystick_if_t;
|
||||
|
||||
extern device_t game_ports[GAMEPORT_MAX];
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern int gameport_available(int port);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *gameport_getdevice(int port);
|
||||
#endif
|
||||
extern int gameport_has_config(int port);
|
||||
extern const char *gameport_get_internal_name(int port);
|
||||
extern int gameport_get_from_internal_name(const char *str);
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t gameport_device;
|
||||
extern const device_t gameport_201_device;
|
||||
@@ -136,7 +146,7 @@ extern const device_t *standalone_gameport_type;
|
||||
#endif
|
||||
extern int gameport_instance_id;
|
||||
extern plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS];
|
||||
extern joystick_t joystick_state[MAX_JOYSTICKS];
|
||||
extern joystick_t joystick_state[GAMEPORT_MAX][MAX_JOYSTICKS];
|
||||
extern int joysticks_present;
|
||||
|
||||
extern int joystick_type;
|
||||
@@ -169,10 +179,21 @@ extern const joystick_if_t joystick_2axis_6button;
|
||||
extern const joystick_if_t joystick_2axis_8button;
|
||||
|
||||
extern const joystick_if_t joystick_ch_flightstick_pro;
|
||||
extern const joystick_if_t joystick_ch_flightstick_pro_ch_pedals;
|
||||
|
||||
extern const joystick_if_t joystick_sw_pad;
|
||||
|
||||
extern const joystick_if_t joystick_tm_fcs;
|
||||
extern const joystick_if_t joystick_tm_fcs_rcs;
|
||||
|
||||
extern int gameport_available(int);
|
||||
extern int gameport_has_config(int);
|
||||
extern const char *gameport_get_internal_name(int);
|
||||
extern int gampeport_get_from_internal_name(char *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *gameport_getdevice(int);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2017-2020 Fred N. van Kempen.
|
||||
*/
|
||||
#ifndef EMU_HDC_H
|
||||
@@ -22,11 +22,6 @@
|
||||
#define MFM_NUM 2 /* 2 drives per controller supported */
|
||||
#define ESDI_NUM 2 /* 2 drives per controller supported */
|
||||
#define XTA_NUM 2 /* 2 drives per controller supported */
|
||||
#define IDE_NUM 10 /* 8 drives per AT IDE + 2 for XT IDE */
|
||||
#define ATAPI_NUM 8 /* 8 drives per AT IDE */
|
||||
#define SCSI_NUM 16 /* theoretically the controller can have at \
|
||||
* least 7 devices, with each device being \
|
||||
* able to support 8 units, but hey... */
|
||||
|
||||
/* Controller types. */
|
||||
#define HDC_NONE 0
|
||||
@@ -53,15 +48,20 @@ extern const device_t st506_xt_toshiba_t1200_device; /* st506_xt_toshiba_t1
|
||||
|
||||
extern const device_t esdi_at_wd1007vse1_device; /* esdi_at */
|
||||
extern const device_t esdi_ps2_device; /* esdi_mca */
|
||||
extern const device_t esdi_integrated_device; /* esdi_mca */
|
||||
|
||||
extern const device_t ide_isa_device; /* isa_ide */
|
||||
extern const device_t ide_isa_sec_device; /* isa_ide sec*/
|
||||
extern const device_t ide_isa_2ch_device; /* isa_ide_2ch */
|
||||
extern const device_t ide_isa_2ch_opt_device; /* isa_ide_2ch_opt */
|
||||
extern const device_t ide_vlb_device; /* vlb_ide */
|
||||
extern const device_t ide_vlb_sec_device; /* vlb_ide sec */
|
||||
extern const device_t ide_vlb_2ch_device; /* vlb_ide_2ch */
|
||||
extern const device_t ide_pci_device; /* pci_ide */
|
||||
extern const device_t ide_pci_sec_device; /* pci_ide sec */
|
||||
extern const device_t ide_pci_2ch_device; /* pci_ide_2ch */
|
||||
|
||||
extern const device_t ide_pci_ter_qua_2ch_device; /* pci_ide_ter_qua_2ch */
|
||||
|
||||
extern const device_t ide_ali1489_device; /* ALi M1489 */
|
||||
extern const device_t ide_ali5213_device; /* ALi M5213 */
|
||||
|
||||
@@ -78,10 +78,14 @@ extern const device_t ide_cmd640_pci_single_channel_sec_device; /* CMD PCI-640B
|
||||
extern const device_t ide_cmd646_device; /* CMD PCI-646 */
|
||||
extern const device_t ide_cmd646_legacy_only_device; /* CMD PCI-646 (Legacy Mode Only) */
|
||||
extern const device_t ide_cmd646_single_channel_device; /* CMD PCI-646 (Only primary channel) */
|
||||
extern const device_t ide_cmd646_ter_qua_device; /* CMD PCI-646 (Tertiary and quaternary channels) */
|
||||
|
||||
extern const device_t ide_opti611_vlb_device; /* OPTi 82c611/611A VLB */
|
||||
extern const device_t ide_opti611_vlb_sec_device; /* OPTi 82c611/611A VLB (Secondary channel) */
|
||||
|
||||
extern const device_t ide_rz1000_pci_device; /* PC Technology RZ-1000 PCI */
|
||||
extern const device_t ide_rz1000_pci_single_channel_device; /* PC Technology RZ-1000 PCI (Only primary channel) */
|
||||
|
||||
extern const device_t ide_um8673f_device; /* UMC UM8673F */
|
||||
extern const device_t ide_um8886af_device; /* UMC UM8886AF */
|
||||
|
||||
@@ -101,10 +105,12 @@ extern const device_t mcide_device;
|
||||
extern const device_t xta_wdxt150_device; /* xta_wdxt150 */
|
||||
extern const device_t xta_hd20_device; /* EuroPC internal */
|
||||
|
||||
extern const device_t xtide_device; /* xtide_xt */
|
||||
extern const device_t xtide_at_device; /* xtide_at */
|
||||
extern const device_t xtide_acculogic_device; /* xtide_ps2 */
|
||||
extern const device_t xtide_at_ps2_device; /* xtide_at_ps2 */
|
||||
extern const device_t xtide_device; /* xtide_xt */
|
||||
extern const device_t xtide_at_device; /* xtide_at */
|
||||
extern const device_t xtide_at_2ch_device; /* xtide_at_2ch */
|
||||
extern const device_t xtide_acculogic_device; /* xtide_ps2 */
|
||||
extern const device_t xtide_at_ps2_device; /* xtide_at_ps2 */
|
||||
extern const device_t xtide_at_ps2_2ch_device; /* xtide_at_ps2_2ch */
|
||||
|
||||
/* Miscellaneous */
|
||||
extern const device_t lba_enhancer_device;
|
||||
|
||||
@@ -19,20 +19,23 @@
|
||||
#ifndef EMU_IDE_H
|
||||
#define EMU_IDE_H
|
||||
|
||||
#define IDE_NUM 10 /* 8 drives per AT IDE + 2 for XT IDE */
|
||||
#define ATAPI_NUM 10 /* 8 drives per AT IDE + 2 for XT IDE */
|
||||
|
||||
#define IDE_BUS_MAX 4
|
||||
#define IDE_CHAN_MAX 2
|
||||
|
||||
#define HDC_PRIMARY_BASE 0x01F0
|
||||
#define HDC_PRIMARY_SIDE 0x03F6
|
||||
#define HDC_PRIMARY_BASE 0x01f0
|
||||
#define HDC_PRIMARY_SIDE 0x03f6
|
||||
#define HDC_PRIMARY_IRQ 14
|
||||
#define HDC_SECONDARY_BASE 0x0170
|
||||
#define HDC_SECONDARY_SIDE 0x0376
|
||||
#define HDC_SECONDARY_IRQ 15
|
||||
#define HDC_TERTIARY_BASE 0x01E8
|
||||
#define HDC_TERTIARY_SIDE 0x03EE
|
||||
#define HDC_TERTIARY_BASE 0x01e8
|
||||
#define HDC_TERTIARY_SIDE 0x03ee
|
||||
#define HDC_TERTIARY_IRQ 11
|
||||
#define HDC_QUATERNARY_BASE 0x0168
|
||||
#define HDC_QUATERNARY_SIDE 0x036E
|
||||
#define HDC_QUATERNARY_SIDE 0x036e
|
||||
#define HDC_QUATERNARY_IRQ 10
|
||||
|
||||
enum {
|
||||
@@ -121,15 +124,17 @@ typedef struct ide_s {
|
||||
double pending_delay;
|
||||
|
||||
#ifdef SCSI_DEVICE_H
|
||||
int (*get_max)(int ide_has_dma, int type);
|
||||
int (*get_timings)(int ide_has_dma, int type);
|
||||
void (*identify)(struct ide_s *ide, int ide_has_dma);
|
||||
void (*stop)(scsi_common_t *sc);
|
||||
void (*packet_command)(scsi_common_t *sc, uint8_t *cdb);
|
||||
int (*get_max)(const struct ide_s *ide, const int ide_has_dma, const int type);
|
||||
int (*get_timings)(const struct ide_s *ide, const int ide_has_dma, const int type);
|
||||
void (*identify)(const struct ide_s *ide, const int ide_has_dma);
|
||||
void (*stop)(const scsi_common_t *sc);
|
||||
void (*packet_command)(scsi_common_t *sc, const uint8_t *cdb);
|
||||
void (*device_reset)(scsi_common_t *sc);
|
||||
uint8_t (*phase_data_out)(scsi_common_t *sc);
|
||||
void (*command_stop)(scsi_common_t *sc);
|
||||
void (*bus_master_error)(scsi_common_t *sc);
|
||||
void (*read)(scsi_common_t *sc);
|
||||
void (*write)(scsi_common_t *sc);
|
||||
#else
|
||||
void * get_max;
|
||||
void * get_timings;
|
||||
@@ -142,10 +147,8 @@ typedef struct ide_s {
|
||||
#endif
|
||||
} ide_t;
|
||||
|
||||
#ifdef EMU_HDC_H
|
||||
extern ide_t *ide_drives[IDE_NUM];
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Type:
|
||||
0 = PIO,
|
||||
@@ -198,7 +201,7 @@ extern uint8_t ide_read_alt_status(uint16_t addr, void *priv);
|
||||
extern uint16_t ide_readw(uint16_t addr, void *priv);
|
||||
|
||||
extern void ide_set_bus_master(int board,
|
||||
int (*dma)(uint8_t *data, int transfer_length, int out, void *priv),
|
||||
int (*dma)(uint8_t *data, int transfer_length, int total_length, int out, void *priv),
|
||||
void (*set_irq)(uint8_t status, void *priv), void *priv);
|
||||
|
||||
extern void win_cdrom_eject(uint8_t id);
|
||||
|
||||
@@ -63,7 +63,7 @@ extern const device_t sff8038i_device;
|
||||
extern void sff_bus_master_handler(sff8038i_t *dev, int enabled, uint16_t base);
|
||||
|
||||
extern void sff_bus_master_set_irq(uint8_t status, void *priv);
|
||||
extern int sff_bus_master_dma(uint8_t *data, int transfer_length, int out, void *priv);
|
||||
extern int sff_bus_master_dma(uint8_t *data, int transfer_length, int total_length, int out, void *priv);
|
||||
|
||||
extern void sff_bus_master_write(uint16_t port, uint8_t val, void *priv);
|
||||
extern uint8_t sff_bus_master_read(uint16_t port, void *priv);
|
||||
|
||||
@@ -138,55 +138,63 @@ typedef struct hdd_zone_t {
|
||||
|
||||
/* Define the virtual Hard Disk. */
|
||||
typedef struct hard_disk_t {
|
||||
uint8_t id;
|
||||
uint8_t id;
|
||||
|
||||
union {
|
||||
uint8_t channel; /* Needed for Settings to reduce the number of if's */
|
||||
/* Needed for Settings to reduce the number of if's */
|
||||
uint8_t channel;
|
||||
|
||||
uint8_t mfm_channel; /* Should rename and/or unionize */
|
||||
uint8_t esdi_channel;
|
||||
uint8_t xta_channel;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_id;
|
||||
uint8_t mfm_channel;
|
||||
uint8_t esdi_channel;
|
||||
uint8_t xta_channel;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_id;
|
||||
};
|
||||
uint8_t bus;
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t wp; /* Disk has been mounted READ-ONLY */
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
|
||||
void *priv;
|
||||
uint8_t bus_type;
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t wp; /* Disk has been mounted
|
||||
READ-ONLY */
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
|
||||
char fn[1024]; /* Name of current image file */
|
||||
char vhd_parent[1041]; /* Differential VHD parent file */
|
||||
void *priv;
|
||||
|
||||
uint32_t seek_pos;
|
||||
uint32_t seek_len;
|
||||
uint32_t base;
|
||||
uint32_t spt;
|
||||
uint32_t hpc; /* Physical geometry parameters */
|
||||
uint32_t tracks;
|
||||
const char *model;
|
||||
char fn[1024]; /* Name of current image file */
|
||||
/* Differential VHD parent file */
|
||||
char vhd_parent[1280];
|
||||
|
||||
hdd_zone_t zones[HDD_MAX_ZONES];
|
||||
uint32_t num_zones;
|
||||
hdd_cache_t cache;
|
||||
uint32_t phy_cyl;
|
||||
uint32_t phy_heads;
|
||||
uint32_t rpm;
|
||||
uint8_t max_multiple_block;
|
||||
uint32_t seek_pos;
|
||||
uint32_t seek_len;
|
||||
uint32_t base;
|
||||
uint32_t spt; /* Physical geometry parameters */
|
||||
uint32_t hpc;
|
||||
uint32_t tracks;
|
||||
uint32_t speed_preset;
|
||||
|
||||
uint32_t cur_cylinder;
|
||||
uint32_t cur_track;
|
||||
uint32_t cur_addr;
|
||||
uint32_t num_zones;
|
||||
uint32_t phy_cyl;
|
||||
uint32_t phy_heads;
|
||||
uint32_t rpm;
|
||||
uint32_t cur_cylinder;
|
||||
uint32_t cur_track;
|
||||
uint32_t cur_addr;
|
||||
uint32_t vhd_blocksize;
|
||||
|
||||
uint32_t speed_preset;
|
||||
uint32_t vhd_blocksize;
|
||||
uint8_t max_multiple_block;
|
||||
uint8_t pad1[3];
|
||||
|
||||
double avg_rotation_lat_usec;
|
||||
double full_stroke_usec;
|
||||
double head_switch_usec;
|
||||
double cyl_switch_usec;
|
||||
const char *model;
|
||||
|
||||
hdd_zone_t zones[HDD_MAX_ZONES];
|
||||
|
||||
hdd_cache_t cache;
|
||||
|
||||
double avg_rotation_lat_usec;
|
||||
double full_stroke_usec;
|
||||
double head_switch_usec;
|
||||
double cyl_switch_usec;
|
||||
} hard_disk_t;
|
||||
|
||||
extern hard_disk_t hdd[HDD_NUM];
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* 8080 CPU emulation (header).
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Cacodemon345
|
||||
*
|
||||
* Copyright 2022 Cacodemon345
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct i8080 {
|
||||
union {
|
||||
uint16_t af; /* Intended in case we also go for μPD9002 emulation, which also has a Z80 emulation mode. */
|
||||
struct {
|
||||
uint8_t a;
|
||||
uint8_t flags;
|
||||
};
|
||||
};
|
||||
union {
|
||||
uint16_t bc;
|
||||
struct {
|
||||
uint8_t b;
|
||||
uint8_t c;
|
||||
};
|
||||
};
|
||||
union {
|
||||
uint16_t de;
|
||||
struct {
|
||||
uint8_t d;
|
||||
uint8_t e;
|
||||
};
|
||||
};
|
||||
union {
|
||||
uint16_t hl;
|
||||
struct {
|
||||
uint8_t h;
|
||||
uint8_t l;
|
||||
};
|
||||
};
|
||||
uint16_t pc;
|
||||
uint16_t sp;
|
||||
uint16_t oldpc;
|
||||
uint16_t ei;
|
||||
uint32_t pmembase;
|
||||
uint32_t dmembase; /* Base from where i8080 starts. */
|
||||
uint8_t emulated; /* 0 = not emulated, use separate registers, 1 = emulated, use x86 registers. */
|
||||
uint16_t *cpu_flags;
|
||||
void (*writemembyte)(uint32_t, uint8_t);
|
||||
uint8_t (*readmembyte)(uint32_t);
|
||||
void (*startclock)(void);
|
||||
void (*endclock)(void);
|
||||
void (*checkinterrupts)(void);
|
||||
uint8_t (*fetchinstruction)(void *);
|
||||
} i8080;
|
||||
|
||||
#define C_FLAG_I8080 (1 << 0)
|
||||
#define P_FLAG_I8080 (1 << 2)
|
||||
#define AC_FLAG_I8080 (1 << 4)
|
||||
#define Z_FLAG_I8080 (1 << 6)
|
||||
#define S_FLAG_I8080 (1 << 7)
|
||||
@@ -31,6 +31,7 @@ typedef void *ini_section_t;
|
||||
|
||||
extern ini_t ini_new(void);
|
||||
extern ini_t ini_read(const char *fn);
|
||||
extern void ini_strip_quotes(ini_t ini);
|
||||
extern void ini_write(ini_t ini, const char *fn);
|
||||
extern void ini_dump(ini_t ini);
|
||||
extern void ini_close(ini_t ini);
|
||||
@@ -58,6 +59,7 @@ extern void ini_section_set_hex20(ini_section_t section, const char *name, i
|
||||
extern void ini_section_set_mac(ini_section_t section, const char *name, int val);
|
||||
extern void ini_section_set_string(ini_section_t section, const char *name, const char *val);
|
||||
extern void ini_section_set_wstring(ini_section_t section, const char *name, wchar_t *val);
|
||||
extern int ini_has_entry(ini_section_t self, const char *name);
|
||||
|
||||
#define ini_delete_var(ini, head, name) ini_section_delete_var(ini_find_section(ini, head), name)
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef EMU_ISAMEM_H
|
||||
#define EMU_ISAMEM_H
|
||||
|
||||
@@ -52,17 +51,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Global variables. */
|
||||
extern const device_t isamem_device;
|
||||
extern const device_t isamem_brat80_device;
|
||||
extern const device_t isamem_ev159_device;
|
||||
|
||||
/* Functions. */
|
||||
extern void isamem_reset(void);
|
||||
|
||||
extern const char *isamem_get_name(int t);
|
||||
extern const char *isamem_get_internal_name(int t);
|
||||
extern int isamem_get_from_internal_name(const char *s);
|
||||
extern int isamem_get_from_internal_name(const char *str);
|
||||
extern const device_t *isamem_get_device(int t);
|
||||
extern int isamem_has_config(int board);
|
||||
|
||||
|
||||
37
src/include/86box/isarom.h
Normal file
37
src/include/86box/isarom.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Implementation of ISA ROM card Expansions.
|
||||
*
|
||||
* Authors: Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
*
|
||||
* Copyright 2025 Jasmine Iwanek.
|
||||
*/
|
||||
#ifndef EMU_ISAROM_H
|
||||
#define EMU_ISAROM_H
|
||||
|
||||
#define ISAROM_MAX 4 /* max #cards in system */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Functions. */
|
||||
extern void isarom_reset(void);
|
||||
|
||||
extern const char *isarom_get_name(int t);
|
||||
extern const char *isarom_get_internal_name(int t);
|
||||
extern int isarom_get_from_internal_name(const char *str);
|
||||
extern const device_t *isarom_get_device(int t);
|
||||
extern int isarom_has_config(int board);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*EMU_ISAROM_H*/
|
||||
@@ -42,7 +42,6 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef EMU_ISARTC_H
|
||||
#define EMU_ISARTC_H
|
||||
|
||||
@@ -50,13 +49,11 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Global variables. */
|
||||
|
||||
/* Functions. */
|
||||
extern void isartc_reset(void);
|
||||
|
||||
extern const char *isartc_get_internal_name(int t);
|
||||
extern int isartc_get_from_internal_name(char *s);
|
||||
extern int isartc_get_from_internal_name(const char *str);
|
||||
extern const device_t *isartc_get_device(int t);
|
||||
extern int isartc_has_config(int board);
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2019 Sarah Walker.
|
||||
* Copyright 2016-2019 Miran Grca.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2017-2019 Fred N. van Kempen.
|
||||
*/
|
||||
|
||||
@@ -54,16 +54,16 @@ typedef struct kbc_at_port_t {
|
||||
typedef struct atkbc_dev_t {
|
||||
const char *name; /* name of this device */
|
||||
|
||||
uint8_t type;
|
||||
uint8_t command;
|
||||
uint8_t last_scan_code;
|
||||
uint8_t state;
|
||||
uint8_t resolution;
|
||||
uint8_t rate;
|
||||
uint8_t cmd_queue_start;
|
||||
uint8_t cmd_queue_end;
|
||||
uint8_t queue_start;
|
||||
uint8_t queue_end;
|
||||
uint8_t type;
|
||||
uint8_t command;
|
||||
uint8_t last_scan_code;
|
||||
uint8_t state;
|
||||
uint8_t resolution;
|
||||
uint8_t rate;
|
||||
uint8_t cmd_queue_start;
|
||||
uint8_t cmd_queue_end;
|
||||
uint8_t queue_start;
|
||||
uint8_t queue_end;
|
||||
|
||||
uint16_t flags;
|
||||
|
||||
@@ -194,8 +194,8 @@ typedef struct scancode {
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern uint8_t keyboard_mode;
|
||||
extern int keyboard_scan;
|
||||
extern uint8_t keyboard_mode;
|
||||
extern int keyboard_scan;
|
||||
|
||||
extern uint16_t scancode_map[768];
|
||||
|
||||
@@ -224,39 +224,41 @@ extern const device_t keyboard_xt86_device;
|
||||
extern const device_t keyboard_xt_compaq_device;
|
||||
extern const device_t keyboard_xt_t1x00_device;
|
||||
extern const device_t keyboard_tandy_device;
|
||||
# ifdef USE_LASERXT
|
||||
extern const device_t keyboard_xt_lxt3_device;
|
||||
# endif /* USE_LASERXT */
|
||||
extern const device_t keyboard_xt_olivetti_device;
|
||||
extern const device_t keyboard_xt_zenith_device;
|
||||
extern const device_t keyboard_xt_hyundai_device;
|
||||
extern const device_t keyboard_xt_fe2010_device;
|
||||
extern const device_t keyboard_xtclone_device;
|
||||
extern const device_t keyboard_at_device;
|
||||
extern const device_t keyboard_at_siemens_device;
|
||||
extern const device_t keyboard_at_ami_device;
|
||||
extern const device_t keyboard_at_compaq_device;
|
||||
extern const device_t keyboard_at_phoenix_device;
|
||||
extern const device_t keyboard_at_ncr_device;
|
||||
extern const device_t keyboard_at_olivetti_device;
|
||||
extern const device_t keyboard_at_siemens_device;
|
||||
extern const device_t keyboard_at_tg_ami_device;
|
||||
extern const device_t keyboard_at_toshiba_device;
|
||||
extern const device_t keyboard_at_olivetti_device;
|
||||
extern const device_t keyboard_at_ncr_device;
|
||||
extern const device_t keyboard_at_compaq_device;
|
||||
extern const device_t keyboard_ps2_device;
|
||||
extern const device_t keyboard_ps2_ps1_device;
|
||||
extern const device_t keyboard_ps2_ps1_pci_device;
|
||||
extern const device_t keyboard_ps2_xi8088_device;
|
||||
extern const device_t keyboard_ps2_ami_device;
|
||||
extern const device_t keyboard_ps2_compaq_device;
|
||||
extern const device_t keyboard_ps2_holtek_device;
|
||||
extern const device_t keyboard_ps2_tg_ami_device;
|
||||
extern const device_t keyboard_ps2_tg_ami_green_device;
|
||||
extern const device_t keyboard_ps2_olivetti_device;
|
||||
extern const device_t keyboard_ps2_phoenix_device;
|
||||
extern const device_t keyboard_ps2_mca_1_device;
|
||||
extern const device_t keyboard_ps2_mca_2_device;
|
||||
extern const device_t keyboard_ps2_olivetti_device;
|
||||
extern const device_t keyboard_ps2_phoenix_device;
|
||||
extern const device_t keyboard_ps2_quadtel_device;
|
||||
extern const device_t keyboard_ps2_tg_ami_device;
|
||||
extern const device_t keyboard_ps2_tg_ami_green_device;
|
||||
extern const device_t keyboard_ps2_pci_device;
|
||||
extern const device_t keyboard_ps2_ami_pci_device;
|
||||
extern const device_t keyboard_ps2_intel_ami_pci_device;
|
||||
extern const device_t keyboard_ps2_acer_pci_device;
|
||||
extern const device_t keyboard_ps2_ali_pci_device;
|
||||
extern const device_t keyboard_ps2_phoenix_pci_device;
|
||||
extern const device_t keyboard_ps2_tg_ami_pci_device;
|
||||
|
||||
extern const device_t keyboard_at_generic_device;
|
||||
@@ -269,9 +271,12 @@ extern void keyboard_poll_host(void);
|
||||
extern void keyboard_process(void);
|
||||
extern uint16_t keyboard_convert(int ch);
|
||||
extern void keyboard_input(int down, uint16_t scan);
|
||||
extern void keyboard_update_states(uint8_t cl, uint8_t nl, uint8_t sl);
|
||||
extern void keyboard_all_up(void);
|
||||
extern void keyboard_update_states(uint8_t cl, uint8_t nl, uint8_t sl, uint8_t kl);
|
||||
extern uint8_t keyboard_get_shift(void);
|
||||
extern void keyboard_get_states(uint8_t *cl, uint8_t *nl, uint8_t *sl);
|
||||
extern void keyboard_set_in_reset(uint8_t in_reset);
|
||||
extern uint8_t keyboard_get_in_reset(void);
|
||||
extern void keyboard_get_states(uint8_t *cl, uint8_t *nl, uint8_t *sl, uint8_t *kl);
|
||||
extern void keyboard_set_states(uint8_t cl, uint8_t nl, uint8_t sl);
|
||||
extern int keyboard_recv(uint16_t key);
|
||||
extern int keyboard_recv_ui(uint16_t key);
|
||||
@@ -279,13 +284,17 @@ extern int keyboard_isfsenter(void);
|
||||
extern int keyboard_isfsenter_up(void);
|
||||
extern int keyboard_isfsexit(void);
|
||||
extern int keyboard_isfsexit_up(void);
|
||||
extern int keyboard_ismsexit(void);
|
||||
extern void keyboard_set_is_amstrad(int ams);
|
||||
extern void kbc_at_set_ps2(void *priv, uint8_t ps2);
|
||||
extern uint8_t kbc_at_read_p(void *priv, uint8_t port, uint8_t mask);
|
||||
extern void kbc_at_write_p(void *priv, uint8_t port, uint8_t mask, uint8_t val);
|
||||
|
||||
extern void kbc_at_set_fast_reset(uint8_t new_fast_reset);
|
||||
extern void kbc_at_handler(int set, void *priv);
|
||||
extern void kbc_at_port_handler(int num, int set, uint16_t port, void *priv);
|
||||
extern void kbc_at_handler(int set, uint16_t port, void *priv);
|
||||
extern void kbc_at_set_irq(int num, uint16_t irq, void *priv);
|
||||
|
||||
extern void kbc_at_dev_queue_reset(atkbc_dev_t *dev, uint8_t reset_main);
|
||||
extern uint8_t kbc_at_dev_queue_pos(atkbc_dev_t *dev, uint8_t main);
|
||||
extern void kbc_at_dev_queue_add(atkbc_dev_t *dev, uint8_t val, uint8_t main);
|
||||
extern void kbc_at_dev_reset(atkbc_dev_t *dev, int do_fa);
|
||||
|
||||
@@ -6,42 +6,48 @@
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Main include file for the application.
|
||||
*
|
||||
*
|
||||
* New logging system handler header.
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Connor Hyde, <mario64crashed@gmail.com, nomorestarfrost@gmail.com>
|
||||
*
|
||||
* Copyright 2021 Miran Grca.
|
||||
* Copyright 2021 Fred N. van Kempen.
|
||||
* Copyright 2021-25 Miran Grca.
|
||||
* Copyright 2021-25 Fred N. van Kempen.
|
||||
* Copyright 2025 Connor Hyde.
|
||||
*/
|
||||
|
||||
#ifndef EMU_LOG_H
|
||||
#define EMU_LOG_H
|
||||
|
||||
#ifndef RELEASE_BUILD
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
#ifdef __NetBSD__
|
||||
/* Doesn't compile on NetBSD without this include */
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
#define LOG_SIZE_BUFFER 1024 /* Log size buffer */
|
||||
#define LOG_SIZE_BUFFER_CYCLIC_LINES 32 /* Cyclic log size buffer (number of lines that should be cehcked) */
|
||||
#define LOG_MINIMUM_REPEAT_ORDER 4 /* Minimum repeat size */
|
||||
|
||||
/* Function prototypes. */
|
||||
extern void log_set_suppr_seen(void *priv, int suppr_seen);
|
||||
extern void log_set_dev_name(void *priv, char *dev_name);
|
||||
# ifdef HAVE_STDARG_H
|
||||
#ifndef RELEASE_BUILD
|
||||
extern void log_out(void *priv, const char *fmt, va_list);
|
||||
extern void log_out_cyclic(void* priv, const char *fmt, va_list);
|
||||
#endif /*RELEASE_BUILD*/
|
||||
extern void log_fatal(void *priv, const char *fmt, ...);
|
||||
# endif
|
||||
extern void *log_open(char *dev_name);
|
||||
extern void log_warning(void *priv, const char *fmt, ...);
|
||||
extern void *log_open(const char *dev_name);
|
||||
extern void *log_open_cyclic(const char *dev_name);
|
||||
extern void log_close(void *priv);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#else
|
||||
# define log_fatal(priv, fmt, ...) fatal(fmt, ...)
|
||||
#endif /*RELEASE_BUILD*/
|
||||
|
||||
#endif /*EMU_LOG_H*/
|
||||
|
||||
@@ -25,39 +25,49 @@ typedef struct lpt_device_t {
|
||||
void (*close)(void *priv);
|
||||
void (*write_data)(uint8_t val, void *priv);
|
||||
void (*write_ctrl)(uint8_t val, void *priv);
|
||||
uint8_t (*read_data)(void *priv);
|
||||
void (*autofeed)(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);
|
||||
} lpt_device_t;
|
||||
|
||||
extern void lpt_set_ext(int port, uint8_t ext);
|
||||
extern void lpt_set_ecp(int port, uint8_t ecp);
|
||||
extern void lpt_set_epp(int port, uint8_t epp);
|
||||
extern void lpt_set_lv2(int port, uint8_t lv2);
|
||||
extern void lpt_reset(void);
|
||||
extern void lpt_close(void);
|
||||
extern void lpt_init(void);
|
||||
extern void lpt_port_init(int i, uint16_t port);
|
||||
extern void lpt_port_setup(int i, uint16_t port);
|
||||
extern void lpt_port_irq(int i, uint8_t irq);
|
||||
extern void lpt_port_dma(int i, uint8_t dma);
|
||||
extern void lpt_port_remove(int i);
|
||||
extern void lpt1_remove_ams(void);
|
||||
|
||||
#define lpt1_init(a) lpt_port_init(0, a)
|
||||
#define lpt1_setup(a) lpt_port_setup(0, a)
|
||||
#define lpt1_irq(a) lpt_port_irq(0, a)
|
||||
#define lpt1_remove() lpt_port_remove(0)
|
||||
|
||||
#define lpt2_init(a) lpt_port_init(1, a)
|
||||
#define lpt2_setup(a) lpt_port_setup(1, a)
|
||||
#define lpt2_irq(a) lpt_port_irq(1, a)
|
||||
#define lpt2_remove() lpt_port_remove(1)
|
||||
|
||||
#define lpt3_init(a) lpt_port_init(2, a)
|
||||
#define lpt3_setup(a) lpt_port_setup(2, a)
|
||||
#define lpt3_irq(a) lpt_port_irq(2, a)
|
||||
#define lpt3_remove() lpt_port_remove(2)
|
||||
|
||||
#define lpt4_init(a) lpt_port_init(3, a)
|
||||
#define lpt4_setup(a) lpt_port_setup(3, a)
|
||||
#define lpt4_irq(a) lpt_port_irq(3, a)
|
||||
#define lpt4_remove() lpt_port_remove(3)
|
||||
|
||||
#if 0
|
||||
#define lpt5_init(a) lpt_port_init(4, a)
|
||||
#define lpt5_setup(a) lpt_port_setup(4, a)
|
||||
#define lpt5_irq(a) lpt_port_irq(4, a)
|
||||
#define lpt5_remove() lpt_port_remove(4)
|
||||
|
||||
#define lpt6_init(a) lpt_port_init(5, a)
|
||||
#define lpt6_setup(a) lpt_port_setup(5, a)
|
||||
#define lpt6_irq(a) lpt_port_irq(5, a)
|
||||
#define lpt6_remove() lpt_port_remove(5)
|
||||
#endif
|
||||
@@ -68,31 +78,62 @@ void lpt_devices_close(void);
|
||||
typedef struct lpt_port_t {
|
||||
uint8_t enabled;
|
||||
uint8_t irq;
|
||||
uint8_t irq_state;
|
||||
uint8_t dma;
|
||||
uint8_t dat;
|
||||
uint8_t ctrl;
|
||||
uint8_t ext;
|
||||
uint8_t epp;
|
||||
uint8_t ecp;
|
||||
uint8_t ecr;
|
||||
uint8_t in_dat;
|
||||
uint8_t fifo_stat;
|
||||
uint8_t dma_stat;
|
||||
uint8_t state;
|
||||
uint8_t autofeed;
|
||||
uint8_t strobe;
|
||||
uint8_t lv2;
|
||||
uint8_t pad[7];
|
||||
uint16_t addr;
|
||||
uint16_t pad0;
|
||||
uint16_t id;
|
||||
uint16_t pad0[2];
|
||||
int device;
|
||||
int enable_irq;
|
||||
lpt_device_t *dt;
|
||||
#ifdef FIFO_H
|
||||
fifo16_t *fifo;
|
||||
#else
|
||||
void *fifo;
|
||||
#endif
|
||||
void *priv;
|
||||
|
||||
pc_timer_t fifo_out_timer;
|
||||
} lpt_port_t;
|
||||
|
||||
typedef enum {
|
||||
LPT_STATE_IDLE = 0,
|
||||
LPT_STATE_READ_DMA,
|
||||
LPT_STATE_WRITE_FIFO
|
||||
} lpt_state_t;
|
||||
|
||||
extern lpt_port_t lpt_ports[PARALLEL_MAX];
|
||||
|
||||
extern void lpt_write(uint16_t port, uint8_t val, void *priv);
|
||||
extern uint8_t lpt_read(uint16_t port, void *priv);
|
||||
extern void lpt_write(uint16_t port, uint8_t val, void *priv);
|
||||
|
||||
extern uint8_t lpt_read_port(int port, uint16_t reg);
|
||||
extern void lpt_write_to_fifo(void *priv, uint8_t val);
|
||||
|
||||
extern uint8_t lpt_read_status(int port);
|
||||
extern void lpt_irq(void *priv, int raise);
|
||||
extern uint8_t lpt_read(uint16_t port, void *priv);
|
||||
|
||||
extern uint8_t lpt_read_port(int port, uint16_t reg);
|
||||
|
||||
extern uint8_t lpt_read_status(int port);
|
||||
extern void lpt_irq(void *priv, int raise);
|
||||
|
||||
extern int lpt_device_get_from_internal_name(const char *s);
|
||||
|
||||
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(char *s);
|
||||
|
||||
extern const lpt_device_t lpt_dac_device;
|
||||
extern const lpt_device_t lpt_dac_stereo_device;
|
||||
|
||||
|
||||
74
src/include/86box/m_pcjr.h
Normal file
74
src/include/86box/m_pcjr.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Header files for the PCjr keyboard and video subsystems.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Connor Hyde, <mario64crashed@gmail.com>
|
||||
*
|
||||
* Copyright 2025 starfrost
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define PCJR_RGB 0
|
||||
#define PCJR_COMPOSITE 1
|
||||
#define PCJR_RGB_NO_BROWN 4
|
||||
#define PCJR_RGB_IBM_5153 5
|
||||
|
||||
typedef struct pcjr_s
|
||||
{
|
||||
/* Video Controller stuff. */
|
||||
mem_mapping_t mapping;
|
||||
uint8_t crtc[32];
|
||||
int crtcreg;
|
||||
int array_index;
|
||||
uint8_t array[32];
|
||||
int array_ff;
|
||||
int memctrl;
|
||||
uint8_t status;
|
||||
int addr_mode;
|
||||
uint8_t *vram;
|
||||
uint8_t *b8000;
|
||||
int linepos;
|
||||
int displine;
|
||||
int scanline;
|
||||
int vc;
|
||||
int dispon;
|
||||
int cursorvisible; // Is the cursor visible on the current scanline?
|
||||
int cursoron;
|
||||
int blink;
|
||||
int vsynctime;
|
||||
int fullchange;
|
||||
int vadj;
|
||||
uint16_t memaddr;
|
||||
uint16_t memaddr_backup;
|
||||
uint64_t dispontime;
|
||||
uint64_t dispofftime;
|
||||
pc_timer_t timer;
|
||||
int firstline;
|
||||
int lastline;
|
||||
int composite;
|
||||
int apply_hd;
|
||||
|
||||
/* Keyboard Controller stuff. */
|
||||
int latched;
|
||||
int data;
|
||||
int serial_data[44];
|
||||
int serial_pos;
|
||||
uint8_t pa;
|
||||
uint8_t pb;
|
||||
pc_timer_t send_delay_timer;
|
||||
|
||||
} pcjr_t;
|
||||
|
||||
void pcjr_recalc_timings(pcjr_t *pcjr);
|
||||
|
||||
// Note: This is a temporary solution until the pcjr video is made its own gfx card
|
||||
void pcjr_vid_init(pcjr_t *pcjr);
|
||||
95
src/include/86box/m_tandy.h
Normal file
95
src/include/86box/m_tandy.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Header files for the Tandy keyboard and video subsystems.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Connor Hyde, <mario64crashed@gmail.com>
|
||||
*
|
||||
* Copyright 2025 starfrost
|
||||
*/
|
||||
|
||||
typedef struct t1kvid_t {
|
||||
mem_mapping_t mapping;
|
||||
mem_mapping_t vram_mapping;
|
||||
|
||||
uint8_t crtc[32];
|
||||
int crtcreg;
|
||||
|
||||
int array_index;
|
||||
uint8_t array[256];
|
||||
int memctrl;
|
||||
uint8_t mode;
|
||||
uint8_t col;
|
||||
uint8_t status;
|
||||
|
||||
uint8_t *vram;
|
||||
uint8_t *b8000;
|
||||
uint32_t b8000_mask;
|
||||
uint32_t b8000_limit;
|
||||
uint8_t planar_ctrl;
|
||||
uint8_t lp_strobe;
|
||||
|
||||
int linepos;
|
||||
int displine;
|
||||
int scanline;
|
||||
int vc;
|
||||
int dispon;
|
||||
int cursorvisible;
|
||||
int cursoron;
|
||||
int blink;
|
||||
int fullchange;
|
||||
int vsynctime;
|
||||
int vadj;
|
||||
uint16_t memaddr;
|
||||
uint16_t memaddr_backup;
|
||||
|
||||
uint64_t dispontime;
|
||||
uint64_t dispofftime;
|
||||
pc_timer_t timer;
|
||||
int firstline;
|
||||
int lastline;
|
||||
|
||||
int composite;
|
||||
} t1kvid_t;
|
||||
|
||||
typedef struct t1keep_t {
|
||||
char *path;
|
||||
|
||||
int state;
|
||||
int count;
|
||||
int addr;
|
||||
int clk;
|
||||
uint16_t data;
|
||||
uint16_t store[64];
|
||||
} t1keep_t;
|
||||
|
||||
typedef struct tandy_t {
|
||||
mem_mapping_t ram_mapping;
|
||||
mem_mapping_t rom_mapping; /* SL2 */
|
||||
|
||||
uint8_t *rom; /* SL2 */
|
||||
uint8_t ram_bank;
|
||||
uint8_t rom_bank; /* SL2 */
|
||||
int rom_offset; /* SL2 */
|
||||
|
||||
uint32_t base;
|
||||
uint32_t mask;
|
||||
int is_hx;
|
||||
int is_sl2;
|
||||
|
||||
t1kvid_t *vid;
|
||||
} tandy_t;
|
||||
|
||||
void tandy_vid_init(tandy_t* dev);
|
||||
uint8_t tandy_vid_in(uint16_t addr, void* priv);
|
||||
void tandy_vid_out(uint16_t addr, uint8_t val, void *priv);
|
||||
|
||||
void tandy_vid_close(void* priv);
|
||||
void tandy_recalc_address_sl(tandy_t* dev); //this function is needed by both m_ and vid_tandy.c
|
||||
@@ -23,34 +23,32 @@
|
||||
#define EMU_MACHINE_H
|
||||
|
||||
/* Machine feature flags. */
|
||||
#define MACHINE_BUS_NONE 0x00000000 /* sys has no bus */
|
||||
#define MACHINE_BUS_NONE 0x00000000 /* sys has no bus */
|
||||
/* Feature flags for BUS'es. */
|
||||
#define MACHINE_BUS_ISA 0x00000001 /* sys has ISA bus */
|
||||
#define MACHINE_BUS_CASSETTE 0x00000002 /* sys has cassette port */
|
||||
#define MACHINE_BUS_CARTRIDGE 0x00000004 /* sys has two cartridge bays */
|
||||
#define MACHINE_BUS_PCJR 0x00000008 /* sys has PCjr sidecar bus */
|
||||
#define MACHINE_BUS_DM_KBC 0x00000010 /* system has keyboard controller that supports
|
||||
both XT and AT keyboards */
|
||||
#define MACHINE_BUS_CASSETTE 0x00000001 /* sys has cassette port */
|
||||
#define MACHINE_BUS_SIDECAR 0x00000002 /* sys has PCjr sidecar bus */
|
||||
#define MACHINE_BUS_ISA 0x00000004 /* sys has ISA bus */
|
||||
#define MACHINE_BUS_XT_KBD 0x00000008 /* sys has an XT keyboard port */
|
||||
#define MACHINE_BUS_CBUS 0x00000010 /* sys has C-BUS bus */
|
||||
#define MACHINE_BUS_ISA16 0x00000020 /* sys has ISA16 bus - PC/AT architecture */
|
||||
#define MACHINE_BUS_CBUS 0x00000040 /* sys has C-BUS bus */
|
||||
#define MACHINE_BUS_PCMCIA 0x00000080 /* sys has PCMCIA bus */
|
||||
#define MACHINE_BUS_PS2_LATCH 0x00000100 /* system has PS/2 keyboard controller IRQ latch */
|
||||
#define MACHINE_BUS_AT_KBD 0x00000040 /* sys has an AT keyboard port */
|
||||
#define MACHINE_BUS_MCA 0x00000080 /* sys has MCA bus */
|
||||
#define MACHINE_BUS_MCA32 0x00000100 /* sys has MCA32 bus */
|
||||
#define MACHINE_BUS_PS2_PORTS 0x00000200 /* system has PS/2 keyboard and mouse ports */
|
||||
#define MACHINE_BUS_PS2 (MACHINE_BUS_PS2_LATCH | MACHINE_BUS_PS2_PORTS)
|
||||
#define MACHINE_BUS_HIL 0x00000400 /* system has HP HIL keyboard and mouse ports */
|
||||
#define MACHINE_BUS_EISA 0x00000800 /* sys has EISA bus */
|
||||
#define MACHINE_BUS_AT32 0x00001000 /* sys has Mylex AT/32 local bus */
|
||||
#define MACHINE_BUS_OLB 0x00002000 /* sys has OPTi local bus */
|
||||
#define MACHINE_BUS_VLB 0x00004000 /* sys has VL bus */
|
||||
#define MACHINE_BUS_MCA 0x00008000 /* sys has MCA bus */
|
||||
#define MACHINE_BUS_PS2 MACHINE_BUS_PS2_PORTS
|
||||
#define MACHINE_BUS_PCMCIA 0x00000400 /* sys has PCMCIA bus */
|
||||
#define MACHINE_BUS_HIL 0x00000800 /* system has HP HIL keyboard and mouse ports */
|
||||
#define MACHINE_BUS_EISA 0x00001000 /* sys has EISA bus */
|
||||
#define MACHINE_BUS_AT32 0x00002000 /* sys has Mylex AT/32 local bus */
|
||||
#define MACHINE_BUS_OLB 0x00004000 /* sys has OPTi local bus */
|
||||
#define MACHINE_BUS_VLB 0x00008000 /* sys has VL bus */
|
||||
#define MACHINE_BUS_PCI 0x00010000 /* sys has PCI bus */
|
||||
#define MACHINE_BUS_CARDBUS 0x00020000 /* sys has CardBus bus */
|
||||
#define MACHINE_BUS_USB 0x00040000 /* sys has USB bus */
|
||||
#define MACHINE_BUS_AGP 0x00080000 /* sys has AGP bus */
|
||||
#define MACHINE_BUS_AC97 0x00100000 /* sys has AC97 bus (ACR/AMR/CNR slot) */
|
||||
/* Aliases. */
|
||||
#define MACHINE_CASSETTE (MACHINE_BUS_CASSETTE) /* sys has cassette port */
|
||||
#define MACHINE_CARTRIDGE (MACHINE_BUS_CARTRIDGE) /* sys has two cartridge bays */
|
||||
#define MACHINE_CASSETTE (MACHINE_BUS_CASSETTE) /* sys has cassette port */
|
||||
/* Combined flags. */
|
||||
#define MACHINE_PC (MACHINE_BUS_ISA) /* sys is PC/XT-compatible (ISA) */
|
||||
#define MACHINE_AT (MACHINE_BUS_ISA | MACHINE_BUS_ISA16) /* sys is AT-compatible (ISA + ISA16) */
|
||||
@@ -69,18 +67,19 @@
|
||||
#define MACHINE_AGP (MACHINE_BUS_AGP | MACHINE_PCI) /* sys is AT-compatible with AGP */
|
||||
#define MACHINE_AGP98 (MACHINE_BUS_AGP | MACHINE_PCI98) /* sys is NEC PC-98x1 series with AGP (did that even exist?) */
|
||||
|
||||
#define MACHINE_PC5150 (MACHINE_PC | MACHINE_CASSETTE) /* sys is IBM PC 5150 */
|
||||
#define MACHINE_PCJR (MACHINE_PC | MACHINE_CASSETTE | MACHINE_CARTRIDGE) /* sys is PCjr */
|
||||
#define MACHINE_PS2 (MACHINE_AT | MACHINE_BUS_PS2) /* sys is PS/2 */
|
||||
#define MACHINE_PS2_MCA (MACHINE_MCA | MACHINE_BUS_PS2) /* sys is MCA PS/2 */
|
||||
#define MACHINE_PS2_VLB (MACHINE_VLB | MACHINE_BUS_PS2) /* sys is VLB PS/2 */
|
||||
#define MACHINE_PS2_PCI (MACHINE_PCI | MACHINE_BUS_PS2) /* sys is PCI PS/2 */
|
||||
#define MACHINE_PS2_PCIV (MACHINE_PCIV | MACHINE_BUS_PS2) /* sys is VLB/PCI PS/2 */
|
||||
#define MACHINE_PS2_AGP (MACHINE_AGP | MACHINE_BUS_PS2) /* sys is AGP PS/2 */
|
||||
#define MACHINE_PS2_A97 (MACHINE_PS2_AGP | MACHINE_BUS_AC97) /* sys is AGP/AC97 PS/2 */
|
||||
#define MACHINE_PS2_NOISA (MACHINE_PS2_AGP & ~MACHINE_AT) /* sys is AGP PS/2 without ISA */
|
||||
#define MACHINE_PS2_PCIONLY (MACHINE_PS2_NOISA & ~MACHINE_BUS_AGP) /* sys is PCI PS/2 without ISA */
|
||||
#define MACHINE_PS2_NOI97 (MACHINE_PS2_A97 & ~MACHINE_AT) /* sys is AGP/AC97 PS/2 without ISA */
|
||||
#define MACHINE_PC5150 (MACHINE_CASSETTE | MACHINE_PC) /* sys is IBM PC 5150 */
|
||||
#define MACHINE_PCJR (MACHINE_CASSETTE | MACHINE_BUS_SIDECAR) /* sys is PCjr */
|
||||
#define MACHINE_PS2 (MACHINE_AT | MACHINE_BUS_PS2) /* sys is PS/2 */
|
||||
#define MACHINE_PS2_MCA (MACHINE_MCA | MACHINE_BUS_PS2) /* sys is MCA PS/2 */
|
||||
#define MACHINE_PS2_VLB (MACHINE_VLB | MACHINE_BUS_PS2) /* sys is VLB PS/2 */
|
||||
#define MACHINE_PS2_PCI (MACHINE_PCI | MACHINE_BUS_PS2) /* sys is PCI PS/2 */
|
||||
#define MACHINE_PS2_PCIV (MACHINE_PCIV | MACHINE_BUS_PS2) /* sys is VLB/PCI PS/2 */
|
||||
#define MACHINE_PS2_AGP (MACHINE_AGP | MACHINE_BUS_PS2) /* sys is AGP PS/2 */
|
||||
#define MACHINE_PS2_A97 (MACHINE_PS2_AGP | MACHINE_BUS_AC97) /* sys is AGP/AC97 PS/2 */
|
||||
#define MACHINE_PS2_NOISA (MACHINE_PS2_AGP & ~MACHINE_AT) /* sys is AGP PS/2 without ISA */
|
||||
#define MACHINE_PS2_PCIONLY (MACHINE_PS2_NOISA & ~MACHINE_BUS_AGP) /* sys is PCI PS/2 without ISA */
|
||||
#define MACHINE_PS2_NOI97 (MACHINE_PS2_A97 & ~MACHINE_AT) /* sys is AGP/AC97 PS/2 without ISA */
|
||||
|
||||
/* Feature flags for miscellaneous internal devices. */
|
||||
#define MACHINE_FLAGS_NONE 0x00000000 /* sys has no int devices */
|
||||
#define MACHINE_SOFTFLOAT_ONLY 0x00000001 /* sys requires SoftFloat FPU */
|
||||
@@ -93,7 +92,8 @@
|
||||
#define MACHINE_LPT_PRI 0x00000080 /* sys has int pri LPT */
|
||||
#define MACHINE_LPT_SEC 0x00000100 /* sys has int sec LPT */
|
||||
#define MACHINE_LPT_TER 0x00000200 /* sys has int ter LPT */
|
||||
#define MACHINE_LPT_QUA 0x00000400 /* sys has int qua LPT */
|
||||
#define MACHINE_PS2_KBC 0x00000400 /* sys has a PS/2 keyboard controller */
|
||||
/* this is separate from having PS/2 ports */
|
||||
#define MACHINE_UART_PRI 0x00000800 /* sys has int pri UART */
|
||||
#define MACHINE_UART_SEC 0x00001000 /* sys has int sec UART */
|
||||
#define MACHINE_UART_TER 0x00002000 /* sys has int ter UART */
|
||||
@@ -101,12 +101,12 @@
|
||||
#define MACHINE_GAMEPORT 0x00008000 /* sys has int game port */
|
||||
#define MACHINE_SOUND 0x00010000 /* sys has int sound */
|
||||
#define MACHINE_NIC 0x00020000 /* sys has int NIC */
|
||||
#define MACHINE_MODEM 0x00040000 /* sys has int modem */
|
||||
#define MACHINE_AX 0x00040000 /* sys adheres to Japanese AX standard */
|
||||
/* Feature flags for advanced devices. */
|
||||
#define MACHINE_APM 0x00080000 /* sys has APM */
|
||||
#define MACHINE_ACPI 0x00100000 /* sys has ACPI */
|
||||
#define MACHINE_HWM 0x00200000 /* sys has hw monitor */
|
||||
#define MACHINE_COREBOOT 0x00400000 /* sys has coreboot BIOS */
|
||||
#define MACHINE_PCI_INTERNAL 0x00200000 /* sys has only internal PCI */
|
||||
#define MACHINE_CARTRIDGE 0x00400000 /* sys has cartridge bays */
|
||||
/* Feature flags for internal storage controllers. */
|
||||
#define MACHINE_MFM 0x00800000 /* sys has int MFM/RLL */
|
||||
#define MACHINE_XTA 0x01000000 /* sys has int XTA */
|
||||
@@ -173,20 +173,21 @@ enum {
|
||||
MACHINE_TYPE_486 = 8,
|
||||
MACHINE_TYPE_486_S2 = 9,
|
||||
MACHINE_TYPE_486_S3 = 10,
|
||||
MACHINE_TYPE_486_MISC = 11,
|
||||
MACHINE_TYPE_SOCKET4 = 12,
|
||||
MACHINE_TYPE_SOCKET5 = 13,
|
||||
MACHINE_TYPE_SOCKET7_3V = 14,
|
||||
MACHINE_TYPE_SOCKET7 = 15,
|
||||
MACHINE_TYPE_SOCKETS7 = 16,
|
||||
MACHINE_TYPE_SOCKET8 = 17,
|
||||
MACHINE_TYPE_SLOT1 = 18,
|
||||
MACHINE_TYPE_SLOT1_2 = 19,
|
||||
MACHINE_TYPE_SLOT1_370 = 20,
|
||||
MACHINE_TYPE_SLOT2 = 21,
|
||||
MACHINE_TYPE_SOCKET370 = 22,
|
||||
MACHINE_TYPE_MISC = 23,
|
||||
MACHINE_TYPE_MAX = 24
|
||||
MACHINE_TYPE_486_S3_PCI = 11,
|
||||
MACHINE_TYPE_486_MISC = 12,
|
||||
MACHINE_TYPE_SOCKET4 = 13,
|
||||
MACHINE_TYPE_SOCKET5 = 14,
|
||||
MACHINE_TYPE_SOCKET7_3V = 15,
|
||||
MACHINE_TYPE_SOCKET7 = 16,
|
||||
MACHINE_TYPE_SOCKETS7 = 17,
|
||||
MACHINE_TYPE_SOCKET8 = 18,
|
||||
MACHINE_TYPE_SLOT1 = 19,
|
||||
MACHINE_TYPE_SLOT1_2 = 20,
|
||||
MACHINE_TYPE_SLOT1_370 = 21,
|
||||
MACHINE_TYPE_SLOT2 = 22,
|
||||
MACHINE_TYPE_SOCKET370 = 23,
|
||||
MACHINE_TYPE_MISC = 24,
|
||||
MACHINE_TYPE_MAX = 25
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -196,6 +197,7 @@ enum {
|
||||
MACHINE_CHIPSET_GC100A,
|
||||
MACHINE_CHIPSET_GC103,
|
||||
MACHINE_CHIPSET_HT18,
|
||||
MACHINE_CHIPSET_ACC_2036,
|
||||
MACHINE_CHIPSET_ACC_2168,
|
||||
MACHINE_CHIPSET_ALI_M1217,
|
||||
MACHINE_CHIPSET_ALI_M6117,
|
||||
@@ -207,7 +209,10 @@ enum {
|
||||
MACHINE_CHIPSET_ALI_ALADDIN_V,
|
||||
MACHINE_CHIPSET_ALI_ALADDIN_PRO_II,
|
||||
MACHINE_CHIPSET_SCAT,
|
||||
MACHINE_CHIPSET_SCAT_SX,
|
||||
MACHINE_CHIPSET_NEAT,
|
||||
MACHINE_CHIPSET_NEAT_SX,
|
||||
MACHINE_CHIPSET_CT_AT,
|
||||
MACHINE_CHIPSET_CT_386,
|
||||
MACHINE_CHIPSET_CT_CS4031,
|
||||
MACHINE_CHIPSET_CONTAQ_82C596,
|
||||
@@ -236,7 +241,9 @@ enum {
|
||||
MACHINE_CHIPSET_OPTI_391,
|
||||
MACHINE_CHIPSET_OPTI_481,
|
||||
MACHINE_CHIPSET_OPTI_493,
|
||||
MACHINE_CHIPSET_OPTI_495,
|
||||
MACHINE_CHIPSET_OPTI_495SLC,
|
||||
MACHINE_CHIPSET_OPTI_495SX,
|
||||
MACHINE_CHIPSET_OPTI_498,
|
||||
MACHINE_CHIPSET_OPTI_499,
|
||||
MACHINE_CHIPSET_OPTI_895_802G,
|
||||
MACHINE_CHIPSET_OPTI_547_597,
|
||||
@@ -320,27 +327,29 @@ typedef struct _machine_ {
|
||||
int ram_granularity;
|
||||
int nvrmask;
|
||||
#ifdef EMU_DEVICE_H
|
||||
const device_t *kbc_device;
|
||||
const device_t *kbc_device;
|
||||
#else
|
||||
void *kbc_device;
|
||||
void *kbc_device;
|
||||
#endif /* EMU_DEVICE_H */
|
||||
uint8_t kbc_p1;
|
||||
uint32_t gpio;
|
||||
uint32_t gpio_acpi;
|
||||
uintptr_t kbc_params;
|
||||
/* Bits 23-16: XOR mask, bits 15-8: OR mask, bits 7-0: AND mask. */
|
||||
uint32_t kbc_p1;
|
||||
uint32_t gpio;
|
||||
uint32_t gpio_acpi;
|
||||
#ifdef EMU_DEVICE_H
|
||||
const device_t *device;
|
||||
const device_t *fdc_device;
|
||||
const device_t *sio_device;
|
||||
const device_t *vid_device;
|
||||
const device_t *snd_device;
|
||||
const device_t *net_device;
|
||||
const device_t *device;
|
||||
const device_t *fdc_device;
|
||||
const device_t *sio_device;
|
||||
const device_t *vid_device;
|
||||
const device_t *snd_device;
|
||||
const device_t *net_device;
|
||||
#else
|
||||
void *device;
|
||||
void *fdc_device;
|
||||
void *sio_device;
|
||||
void *vid_device;
|
||||
void *snd_device;
|
||||
void *net_device;
|
||||
void *device;
|
||||
void *fdc_device;
|
||||
void *sio_device;
|
||||
void *vid_device;
|
||||
void *snd_device;
|
||||
void *net_device;
|
||||
#endif
|
||||
} machine_t;
|
||||
|
||||
@@ -358,6 +367,7 @@ extern int machine_available(int m);
|
||||
extern const char *machine_getname(void);
|
||||
extern const char *machine_getname_ex(int m);
|
||||
extern const char *machine_get_internal_name(void);
|
||||
extern const char *machine_get_nvr_name(void);
|
||||
extern int machine_get_machine_from_internal_name(const char *s);
|
||||
extern void machine_init(void);
|
||||
#ifdef EMU_DEVICE_H
|
||||
@@ -370,6 +380,7 @@ extern const device_t *machine_get_snd_device(int m);
|
||||
extern const device_t *machine_get_net_device(int m);
|
||||
#endif
|
||||
extern const char *machine_get_internal_name_ex(int m);
|
||||
extern const char *machine_get_nvr_name_ex(int m);
|
||||
extern int machine_get_nvrmask(int m);
|
||||
extern int machine_has_flags(int m, int flags);
|
||||
extern int machine_has_bus(int m, int bus_flags);
|
||||
@@ -378,6 +389,7 @@ extern int machine_get_min_ram(int m);
|
||||
extern int machine_get_max_ram(int m);
|
||||
extern int machine_get_ram_granularity(int m);
|
||||
extern int machine_get_type(int m);
|
||||
extern int machine_get_chipset(int m);
|
||||
extern void machine_close(void);
|
||||
extern int machine_has_mouse(void);
|
||||
extern int machine_is_sony(void);
|
||||
@@ -434,12 +446,11 @@ extern int machine_at_ibmatquadtel_init(const machine_t *); // IBM AT with Quadt
|
||||
|
||||
extern int machine_at_ibmxt286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_pb286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_siemens_init(const machine_t *); // Siemens PCD-2L. N82330 discrete machine. It segfaults in some places
|
||||
|
||||
extern int machine_at_wellamerastar_init(const machine_t *); // Wells American A*Star with custom award BIOS
|
||||
#ifdef USE_OPEN_AT
|
||||
extern int machine_at_openat_init(const machine_t *);
|
||||
#endif /* USE_OPEN_AT */
|
||||
|
||||
/* m_at_286_386sx.c */
|
||||
extern int machine_at_tg286m_init(const machine_t *);
|
||||
@@ -448,6 +459,7 @@ extern int machine_at_px286_init(const machine_t *);
|
||||
extern int machine_at_quadt286_init(const machine_t *);
|
||||
extern int machine_at_mr286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_pbl300sx_init(const machine_t *);
|
||||
extern int machine_at_neat_init(const machine_t *);
|
||||
extern int machine_at_neat_ami_init(const machine_t *);
|
||||
extern int machine_at_ataripc4_init(const machine_t *);
|
||||
@@ -466,18 +478,22 @@ extern int machine_at_spc4620p_init(const machine_t *);
|
||||
extern int machine_at_kmxc02_init(const machine_t *);
|
||||
extern int machine_at_deskmaster286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_dells200_init(const machine_t *);
|
||||
extern int machine_at_at122_init(const machine_t *);
|
||||
extern int machine_at_tuliptc7_init(const machine_t *);
|
||||
|
||||
extern int machine_at_pc8_init(const machine_t *);
|
||||
extern int machine_at_3302_init(const machine_t *);
|
||||
|
||||
#ifdef USE_OLIVETTI
|
||||
extern int machine_at_m290_init(const machine_t *);
|
||||
#endif /* USE_OLIVETTI */
|
||||
|
||||
extern int machine_at_shuttle386sx_init(const machine_t *);
|
||||
extern int machine_at_adi386sx_init(const machine_t *);
|
||||
extern int machine_at_cmdsl386sx16_init(const machine_t *);
|
||||
extern int machine_at_cmdsl386sx25_init(const machine_t *);
|
||||
extern int machine_at_dataexpert386sx_init(const machine_t *);
|
||||
extern int machine_at_dells333sl_init(const machine_t *);
|
||||
extern int machine_at_if386sx_init(const machine_t *);
|
||||
extern int machine_at_spc6033p_init(const machine_t *);
|
||||
extern int machine_at_wd76c10_init(const machine_t *);
|
||||
extern int machine_at_arb1374_init(const machine_t *);
|
||||
@@ -498,15 +514,19 @@ extern int machine_at_pc916sx_init(const machine_t *);
|
||||
sure this appear here (and in the .c file) in the order and position
|
||||
in which they appear in the machine table. */
|
||||
extern int machine_at_dataexpert386wb_init(const machine_t *);
|
||||
extern int machine_at_isa486c_init(const machine_t *);
|
||||
extern int machine_at_genoa486_init(const machine_t *);
|
||||
extern int machine_at_ga486l_init(const machine_t *);
|
||||
extern int machine_at_cobalt_init(const machine_t *);
|
||||
extern int machine_at_cougar_init(const machine_t *);
|
||||
|
||||
extern int machine_at_acc386_init(const machine_t *);
|
||||
extern int machine_at_asus3863364k_init(const machine_t *);
|
||||
extern int machine_at_asus386_init(const machine_t *);
|
||||
extern int machine_at_ecs386_init(const machine_t *);
|
||||
extern int machine_at_spc6000a_init(const machine_t *);
|
||||
extern int machine_at_micronics386_init(const machine_t *);
|
||||
extern int machine_at_micronics386px_init(const machine_t *);
|
||||
extern int machine_at_ecs386v_init(const machine_t *);
|
||||
extern int machine_at_tandy4000_init(const machine_t *);
|
||||
|
||||
@@ -519,6 +539,8 @@ extern int machine_at_cs4031_init(const machine_t *);
|
||||
extern int machine_at_pb410a_init(const machine_t *);
|
||||
|
||||
extern int machine_at_decpclpv_init(const machine_t *);
|
||||
extern int machine_at_dell466np_init(const machine_t *);
|
||||
|
||||
extern int machine_at_acerv10_init(const machine_t *);
|
||||
|
||||
extern int machine_at_acera1g_init(const machine_t *);
|
||||
@@ -528,10 +550,13 @@ extern int machine_at_winbios1429_init(const machine_t *);
|
||||
extern int machine_at_opti495_init(const machine_t *);
|
||||
extern int machine_at_opti495_ami_init(const machine_t *);
|
||||
extern int machine_at_opti495_mr_init(const machine_t *);
|
||||
extern int machine_at_c747_init(const machine_t *);
|
||||
extern int machine_at_exp4349_init(const machine_t *);
|
||||
|
||||
extern int machine_at_vect486vl_init(const machine_t *);
|
||||
extern int machine_at_d824_init(const machine_t *);
|
||||
extern int machine_at_tuliptc38_init(const machine_t *);
|
||||
extern int machine_at_martin_init(const machine_t *);
|
||||
|
||||
extern int machine_at_403tg_init(const machine_t *);
|
||||
extern int machine_at_403tg_d_init(const machine_t *);
|
||||
@@ -542,9 +567,11 @@ extern int machine_at_aptiva510_init(const machine_t *);
|
||||
extern int machine_at_pc330_6573_init(const machine_t *);
|
||||
extern int machine_at_mvi486_init(const machine_t *);
|
||||
|
||||
extern int machine_at_dtk461_init(const machine_t *);
|
||||
extern int machine_at_sis401_init(const machine_t *);
|
||||
extern int machine_at_isa486_init(const machine_t *);
|
||||
extern int machine_at_av4_init(const machine_t *);
|
||||
extern int machine_at_advantage40xxd_init(const machine_t *);
|
||||
extern int machine_at_valuepoint433_init(const machine_t *);
|
||||
|
||||
extern int machine_at_vli486sv2g_init(const machine_t *);
|
||||
@@ -561,6 +588,7 @@ extern int machine_at_r418_init(const machine_t *);
|
||||
extern int machine_at_ls486e_init(const machine_t *);
|
||||
extern int machine_at_4dps_init(const machine_t *);
|
||||
extern int machine_at_ms4144_init(const machine_t *);
|
||||
extern int machine_at_acerp3_init(const machine_t *);
|
||||
extern int machine_at_4saw2_init(const machine_t *);
|
||||
extern int machine_at_m4li_init(const machine_t *);
|
||||
extern int machine_at_alfredo_init(const machine_t *);
|
||||
@@ -572,6 +600,7 @@ extern int machine_at_sb486p_init(const machine_t *);
|
||||
extern int machine_at_486sp3_init(const machine_t *);
|
||||
extern int machine_at_486sp3c_init(const machine_t *);
|
||||
extern int machine_at_486sp3g_init(const machine_t *);
|
||||
extern int machine_at_sb486pv_init(const machine_t *);
|
||||
extern int machine_at_486ap4_init(const machine_t *);
|
||||
extern int machine_at_g486vpa_init(const machine_t *);
|
||||
extern int machine_at_486vipio2_init(const machine_t *);
|
||||
@@ -592,6 +621,7 @@ extern int machine_at_iach488_init(const machine_t *);
|
||||
extern int machine_at_pcm9340_init(const machine_t *);
|
||||
extern int machine_at_pcm5330_init(const machine_t *);
|
||||
|
||||
extern int machine_at_84xxuuda_init(const machine_t *);
|
||||
extern int machine_at_ecs486_init(const machine_t *);
|
||||
extern int machine_at_hot433a_init(const machine_t *);
|
||||
extern int machine_at_pl4600c_init(const machine_t *);
|
||||
@@ -637,6 +667,7 @@ extern int machine_at_m5pi_init(const machine_t *);
|
||||
|
||||
extern int machine_at_excalibur_init(const machine_t *);
|
||||
|
||||
extern int machine_at_globalyst330_p5_init(const machine_t *);
|
||||
extern int machine_at_p5vl_init(const machine_t *);
|
||||
|
||||
extern int machine_at_excaliburpci2_init(const machine_t *);
|
||||
@@ -645,6 +676,7 @@ extern int machine_at_p5sp4_init(const machine_t *);
|
||||
/* m_at_socket5.c */
|
||||
extern int machine_at_plato_init(const machine_t *);
|
||||
extern int machine_at_dellplato_init(const machine_t *);
|
||||
extern int machine_at_d842_init(const machine_t *);
|
||||
extern int machine_at_ambradp90_init(const machine_t *);
|
||||
extern int machine_at_p54np4_init(const machine_t *);
|
||||
extern int machine_at_586ip_init(const machine_t *);
|
||||
@@ -652,6 +684,7 @@ extern int machine_at_tek932_init(const machine_t *);
|
||||
|
||||
extern int machine_at_acerv30_init(const machine_t *);
|
||||
extern int machine_at_apollo_init(const machine_t *);
|
||||
extern int machine_at_optiplexgxl_init(const machine_t *);
|
||||
extern int machine_at_zappa_init(const machine_t *);
|
||||
extern int machine_at_powermatev_init(const machine_t *);
|
||||
extern int machine_at_hawk_init(const machine_t *);
|
||||
@@ -688,6 +721,7 @@ extern int machine_at_fmb_init(const machine_t *);
|
||||
extern int machine_at_acerm3a_init(const machine_t *);
|
||||
extern int machine_at_ap53_init(const machine_t *);
|
||||
extern int machine_at_8500tuc_init(const machine_t *);
|
||||
extern int machine_at_d943_init(const machine_t *);
|
||||
extern int machine_at_p55t2s_init(const machine_t *);
|
||||
|
||||
extern int machine_at_p5vxb_init(const machine_t *);
|
||||
@@ -702,6 +736,8 @@ extern int machine_at_vectra54_init(const machine_t *);
|
||||
extern int machine_at_5sbm2_init(const machine_t *);
|
||||
|
||||
/* m_at_socket7.c */
|
||||
extern void machine_at_optiplex_21152_init(void);
|
||||
|
||||
extern int machine_at_acerv35n_init(const machine_t *);
|
||||
extern int machine_at_p55t2p4_init(const machine_t *);
|
||||
extern int machine_at_m7shi_init(const machine_t *);
|
||||
@@ -731,11 +767,10 @@ extern int machine_at_gw2kte_init(const machine_t *);
|
||||
extern int machine_at_ma23c_init(const machine_t *);
|
||||
extern int machine_at_nupro592_init(const machine_t *);
|
||||
extern int machine_at_tx97_init(const machine_t *);
|
||||
#ifdef USE_AN430TX
|
||||
extern int machine_at_an430tx_init(const machine_t *);
|
||||
#endif /* USE_AN430TX */
|
||||
extern int machine_at_optiplexgn_init(const machine_t *);
|
||||
extern int machine_at_ym430tx_init(const machine_t *);
|
||||
extern int machine_at_thunderbolt_init(const machine_t *);
|
||||
extern int machine_at_an430tx_init(const machine_t *);
|
||||
extern int machine_at_mb540n_init(const machine_t *);
|
||||
extern int machine_at_56a5_init(const machine_t *);
|
||||
extern int machine_at_p5mms98_init(const machine_t *);
|
||||
@@ -745,6 +780,7 @@ extern int machine_at_tomahawk_init(const machine_t *);
|
||||
extern int machine_at_ficva502_init(const machine_t *);
|
||||
|
||||
extern int machine_at_ficpa2012_init(const machine_t *);
|
||||
extern int machine_at_via809ds_init(const machine_t *);
|
||||
|
||||
extern int machine_at_r534f_init(const machine_t *);
|
||||
extern int machine_at_ms5146_init(const machine_t *);
|
||||
@@ -769,6 +805,7 @@ extern int machine_at_ax59pro_init(const machine_t *);
|
||||
extern int machine_at_mvp3_init(const machine_t *);
|
||||
extern int machine_at_ficva503a_init(const machine_t *);
|
||||
extern int machine_at_5emapro_init(const machine_t *);
|
||||
extern int machine_at_delhi3_init(const machine_t *);
|
||||
|
||||
extern int machine_at_5sg100_init(const machine_t *);
|
||||
|
||||
@@ -780,6 +817,7 @@ extern int machine_at_686nx_init(const machine_t *);
|
||||
extern int machine_at_acerv60n_init(const machine_t *);
|
||||
extern int machine_at_lgibmx61_init(const machine_t *);
|
||||
extern int machine_at_vs440fx_init(const machine_t *);
|
||||
extern int machine_at_dellvenus_init(const machine_t *);
|
||||
extern int machine_at_gw2kvenus_init(const machine_t *);
|
||||
extern int machine_at_ap440fx_init(const machine_t *);
|
||||
extern int machine_at_mb600n_init(const machine_t *);
|
||||
@@ -793,12 +831,13 @@ extern int machine_at_p65up5_cp6nd_init(const machine_t *);
|
||||
/* m_at_slot1.c */
|
||||
extern int machine_at_m729_init(const machine_t *);
|
||||
|
||||
extern int machine_at_acerv62x_init(const machine_t *);
|
||||
extern int machine_at_p65up5_cpknd_init(const machine_t *);
|
||||
extern int machine_at_kn97_init(const machine_t *);
|
||||
|
||||
extern int machine_at_lx6_init(const machine_t *);
|
||||
extern int machine_at_optiplexgxa_init(const machine_t *);
|
||||
extern int machine_at_spitfire_init(const machine_t *);
|
||||
|
||||
extern int machine_at_ma30d_init(const machine_t *);
|
||||
|
||||
extern int machine_at_p6i440e2_init(const machine_t *);
|
||||
@@ -807,6 +846,7 @@ extern int machine_at_p2bls_init(const machine_t *);
|
||||
extern int machine_at_lgibmx7g_init(const machine_t *);
|
||||
extern int machine_at_p3bf_init(const machine_t *);
|
||||
extern int machine_at_bf6_init(const machine_t *);
|
||||
extern int machine_at_bx6_init(const machine_t *);
|
||||
extern int machine_at_ax6bc_init(const machine_t *);
|
||||
extern int machine_at_atc6310bxii_init(const machine_t *);
|
||||
extern int machine_at_686bx_init(const machine_t *);
|
||||
@@ -847,6 +887,7 @@ extern int machine_at_s1857_init(const machine_t *);
|
||||
extern int machine_at_p6bap_init(const machine_t *);
|
||||
extern int machine_at_p6bat_init(const machine_t *);
|
||||
extern int machine_at_prosignias31x_bx_init(const machine_t *);
|
||||
extern int machine_at_7sbb_init(const machine_t *);
|
||||
|
||||
/* m_at_misc.c */
|
||||
extern int machine_at_vpc2007_init(const machine_t *);
|
||||
@@ -896,6 +937,8 @@ extern int machine_ps2_model_70_type3_init(const machine_t *);
|
||||
extern int machine_ps2_model_80_init(const machine_t *);
|
||||
extern int machine_ps2_model_80_axx_init(const machine_t *);
|
||||
extern int machine_ps2_model_70_type4_init(const machine_t *);
|
||||
extern int machine_ps55_model_50t_init(const machine_t*);
|
||||
extern int machine_ps55_model_50v_init(const machine_t*);
|
||||
|
||||
/* m_tandy.c */
|
||||
extern int tandy1k_eeprom_read(void);
|
||||
@@ -938,6 +981,7 @@ extern int machine_xt_kaypropc_init(const machine_t *);
|
||||
extern int machine_xt_sansx16_init(const machine_t *);
|
||||
extern int machine_xt_bw230_init(const machine_t *);
|
||||
extern int machine_xt_pb8810_init(const machine_t *);
|
||||
extern int machine_xt_tuliptc8_init(const machine_t *);
|
||||
|
||||
extern int machine_xt_v20xt_init(const machine_t *);
|
||||
|
||||
@@ -952,10 +996,14 @@ extern int machine_xt_compaq_deskpro_init(const machine_t *);
|
||||
extern int machine_xt_compaq_portable_init(const machine_t *);
|
||||
|
||||
/* m_xt_laserxt.c */
|
||||
#ifdef USE_LASERXT
|
||||
extern int machine_xt_laserxt_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t laserxt_device;
|
||||
#endif
|
||||
extern int machine_xt_lxt3_init(const machine_t *);
|
||||
#endif /* USE_LASERXT */
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t lxt3_device;
|
||||
#endif
|
||||
|
||||
/* m_xt_philips.c */
|
||||
extern int machine_xt_p3105_init(const machine_t *);
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
typedef struct dev_status_empty_active_t {
|
||||
atomic_bool_t empty;
|
||||
atomic_bool_t active;
|
||||
atomic_bool_t write_active;
|
||||
} dev_status_empty_active_t;
|
||||
|
||||
typedef struct dev_status_active_t {
|
||||
atomic_bool_t active;
|
||||
atomic_bool_t write_active;
|
||||
} dev_status_active_t;
|
||||
|
||||
typedef struct dev_status_empty_t {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
extern void mca_init(int nr_cards);
|
||||
extern void mca_add(uint8_t (*read)(int addr, void *priv), void (*write)(int addr, uint8_t val, void *priv), uint8_t (*feedb)(void *priv), void (*reset)(void *priv), void *priv);
|
||||
extern void mca_add_to_slot(uint8_t(*read)(int addr, void* priv), void (*write)(int addr, uint8_t val, void* priv), uint8_t(*feedb)(void* priv), void (*reset)(void* priv), void* priv, int c);
|
||||
extern void mca_set_index(int index);
|
||||
extern uint8_t mca_read(uint16_t port);
|
||||
extern uint8_t mca_read_index(uint16_t port, int index);
|
||||
|
||||
@@ -265,12 +265,16 @@ extern uint32_t biosmask;
|
||||
extern uint32_t biosaddr;
|
||||
|
||||
extern int readlookup[256];
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern uintptr_t *readlookup2;
|
||||
#endif
|
||||
extern uintptr_t old_rl2;
|
||||
extern uint8_t uncached;
|
||||
extern int readlnext;
|
||||
extern int writelookup[256];
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern uintptr_t *writelookup2;
|
||||
#endif
|
||||
extern int writelnext;
|
||||
extern uint32_t ram_mapped_addr[64];
|
||||
extern uint8_t page_ff[4096];
|
||||
@@ -288,7 +292,16 @@ extern mem_mapping_t bios_high_mapping;
|
||||
extern uint32_t mem_logical_addr;
|
||||
|
||||
extern page_t *pages;
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern page_t **page_lookup;
|
||||
#endif
|
||||
|
||||
#if (defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)
|
||||
/* The lookup tables. */
|
||||
extern page_t *page_lookup[1048576];
|
||||
extern uintptr_t readlookup2[1048576];
|
||||
extern uintptr_t writelookup2[1048576];
|
||||
#endif
|
||||
|
||||
extern uint32_t get_phys_virt;
|
||||
extern uint32_t get_phys_phys;
|
||||
@@ -300,7 +313,6 @@ extern int writelnum;
|
||||
|
||||
extern int memspeed[11];
|
||||
|
||||
extern int mmu_perm;
|
||||
extern uint8_t high_page; /* if a high (> 4 gb) page was detected */
|
||||
|
||||
extern uint8_t *_mem_exec[MEM_MAPPINGS_NO];
|
||||
@@ -448,6 +460,7 @@ extern void mem_flush_write_page(uint32_t addr, uint32_t virt);
|
||||
extern void mem_reset_page_blocks(void);
|
||||
|
||||
extern void flushmmucache(void);
|
||||
extern void flushmmucache_write(void);
|
||||
extern void flushmmucache_pc(void);
|
||||
extern void flushmmucache_nopc(void);
|
||||
|
||||
@@ -457,10 +470,16 @@ extern void mem_a20_init(void);
|
||||
extern void mem_a20_recalc(void);
|
||||
|
||||
extern void mem_init(void);
|
||||
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||
extern void mem_free(void);
|
||||
#endif
|
||||
extern void mem_close(void);
|
||||
extern void mem_zero(void);
|
||||
extern void mem_reset(void);
|
||||
extern void mem_remap_top_ex(int kb, uint32_t start);
|
||||
extern void mem_remap_top_ex_nomid(int kb, uint32_t start);
|
||||
extern void mem_remap_top(int kb);
|
||||
extern void mem_remap_top_nomid(int kb);
|
||||
|
||||
extern void umc_smram_recalc(uint32_t start, int set);
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
* Implementation of a generic Magneto-Optical Disk drive
|
||||
* commands, for both ATAPI and SCSI usage.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Natalia Portillo <claunia@claunia.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2020 Miran Grca.
|
||||
* Copyright 2020-2025 Natalia Portillo.
|
||||
* Copyright 2020-2025 Miran Grca.
|
||||
* Copyright 2020-2025 Fred N. van Kempen
|
||||
*/
|
||||
|
||||
#ifndef EMU_MO_H
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#define MO_TIME 10.0
|
||||
|
||||
#define MO_IMAGE_HISTORY 4
|
||||
#define MO_IMAGE_HISTORY 10
|
||||
|
||||
typedef struct mo_type_t {
|
||||
uint32_t sectors;
|
||||
@@ -51,10 +51,10 @@ static const mo_type_t mo_types[KNOWN_MO_TYPES] = {
|
||||
};
|
||||
|
||||
typedef struct mo_drive_type_t {
|
||||
const char vendor[9];
|
||||
const char model[16];
|
||||
const char revision[5];
|
||||
int8_t supported_media[KNOWN_MO_TYPES];
|
||||
const char *vendor;
|
||||
const char *model;
|
||||
const char *revision;
|
||||
int8_t supported_media[KNOWN_MO_TYPES];
|
||||
} mo_drive_type_t;
|
||||
|
||||
#define KNOWN_MO_DRIVE_TYPES 22
|
||||
@@ -91,88 +91,90 @@ enum {
|
||||
};
|
||||
|
||||
typedef struct mo_drive_t {
|
||||
uint8_t id;
|
||||
uint8_t id;
|
||||
|
||||
union {
|
||||
uint8_t res;
|
||||
uint8_t res0; /* Reserved for other ID's. */
|
||||
uint8_t res1;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_device_id;
|
||||
uint8_t res;
|
||||
/* Reserved for other ID's. */
|
||||
uint8_t res0;
|
||||
uint8_t res1;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_device_id;
|
||||
};
|
||||
|
||||
uint8_t bus_type; /* 0 = ATAPI, 1 = SCSI */
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t read_only; /* Struct variable reserved for
|
||||
media status. */
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
uint8_t bus_type; /* 0 = ATAPI, 1 = SCSI */
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t read_only; /* Struct variable reserved for
|
||||
media status. */
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
|
||||
FILE *fp;
|
||||
void *priv;
|
||||
FILE *fp;
|
||||
void *priv;
|
||||
|
||||
char image_path[1024];
|
||||
char prev_image_path[1024];
|
||||
char image_path[1024];
|
||||
char prev_image_path[1024];
|
||||
|
||||
char *image_history[MO_IMAGE_HISTORY];
|
||||
char *image_history[MO_IMAGE_HISTORY];
|
||||
|
||||
uint32_t type;
|
||||
uint32_t medium_size;
|
||||
uint32_t base;
|
||||
uint16_t sector_size;
|
||||
uint32_t type;
|
||||
uint32_t medium_size;
|
||||
uint32_t base;
|
||||
uint16_t sector_size;
|
||||
|
||||
int supported;
|
||||
} mo_drive_t;
|
||||
|
||||
typedef struct mo_t {
|
||||
mode_sense_pages_t ms_pages_saved;
|
||||
|
||||
mo_drive_t *drv;
|
||||
mo_drive_t *drv;
|
||||
#ifdef EMU_IDE_H
|
||||
ide_tf_t * tf;
|
||||
ide_tf_t *tf;
|
||||
#else
|
||||
void * tf;
|
||||
void *tf;
|
||||
#endif
|
||||
|
||||
uint8_t *buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
void * log;
|
||||
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
uint8_t *buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int old_len;
|
||||
int pad3;
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int old_len;
|
||||
int transition;
|
||||
|
||||
double callback;
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
uint32_t block_len;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
double callback;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
} mo_t;
|
||||
|
||||
extern mo_t *mo[MO_NUM];
|
||||
extern mo_drive_t mo_drives[MO_NUM];
|
||||
#if 0
|
||||
extern uint8_t atapi_mo_drives[8];
|
||||
extern uint8_t scsi_mo_drives[16];
|
||||
#endif
|
||||
extern mo_drive_t mo_drives[MO_NUM];
|
||||
|
||||
#define mo_sense_error dev->sense[0]
|
||||
#define mo_sense_key dev->sense[2]
|
||||
#define mo_info *(uint32_t *) &(dev->sense[3])
|
||||
#define mo_asc dev->sense[12]
|
||||
#define mo_ascq dev->sense[13]
|
||||
|
||||
@@ -180,15 +182,16 @@ extern uint8_t scsi_mo_drives[16];
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void mo_disk_close(mo_t *dev);
|
||||
extern void mo_disk_reload(mo_t *dev);
|
||||
extern void mo_disk_close(const mo_t *dev);
|
||||
extern void mo_disk_reload(const mo_t *dev);
|
||||
extern void mo_insert(mo_t *dev);
|
||||
|
||||
extern void mo_global_init(void);
|
||||
extern void mo_hard_reset(void);
|
||||
|
||||
extern void mo_reset(scsi_common_t *sc);
|
||||
extern int mo_load(mo_t *dev, char *fn);
|
||||
extern int mo_is_empty(const uint8_t id);
|
||||
extern void mo_load(const mo_t *dev, const char *fn, const int skip_insert);
|
||||
extern void mo_close(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#define MOUSE_TYPE_PS2 11 /* PS/2 series Bus Mouse */
|
||||
#define MOUSE_TYPE_WACOM 12 /* WACOM tablet */
|
||||
#define MOUSE_TYPE_WACOMARTP 13 /* WACOM tablet (ArtPad) */
|
||||
#define MOUSE_TYPE_MSYSTEMSB 14 /* Mouse Systems bus mouse */
|
||||
|
||||
#define MOUSE_TYPE_ONBOARD 0x80 /* Mouse is an on-board version of one of the above. */
|
||||
|
||||
@@ -68,6 +69,7 @@ extern const device_t mouse_msinport_device;
|
||||
extern const device_t mouse_genibus_device;
|
||||
# endif
|
||||
extern const device_t mouse_mssystems_device;
|
||||
extern const device_t mouse_mssystems_bus_device;
|
||||
extern const device_t mouse_msserial_device;
|
||||
extern const device_t mouse_ltserial_device;
|
||||
extern const device_t mouse_ps2_device;
|
||||
@@ -100,6 +102,9 @@ extern void mouse_scale_axis(int axis, int val);
|
||||
extern void mouse_set_z(int z);
|
||||
extern void mouse_clear_z(void);
|
||||
extern void mouse_subtract_z(int *delta_z, int min, int max, int invert);
|
||||
extern void mouse_set_w(int w);
|
||||
extern void mouse_clear_w(void);
|
||||
extern void mouse_subtract_w(int *delta_w, int min, int max, int invert);
|
||||
extern void mouse_set_buttons_ex(int b);
|
||||
extern int mouse_get_buttons_ex(void);
|
||||
extern void mouse_set_sample_rate(double new_rate);
|
||||
|
||||
@@ -44,7 +44,7 @@ enum {
|
||||
NE2K_NE2000_COMPAT = 4, /* 16-bit ISA NE2000-Compatible */
|
||||
NE2K_NE2000_COMPAT_8BIT = 5, /* 8-bit ISA NE2000-Compatible, like: https://github.com/skiselev/isa8_eth */
|
||||
NE2K_ETHERNEXT_MC = 6, /* 16-bit MCA EtherNext/MC */
|
||||
NE2K_RTL8019AS = 7, /* 16-bit ISA PnP Realtek 8019AS */
|
||||
NE2K_RTL8019AS_PNP = 7, /* 16-bit ISA PnP Realtek 8019AS */
|
||||
NE2K_DE220P = 8, /* 16-bit ISA PnP D-Link DE-220P */
|
||||
NE2K_RTL8029AS = 9, /* 32-bit PCI Realtek 8029AS */
|
||||
/* Check nic_init() if adding items after this point. */
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
/* Queue size must be a power of 2 */
|
||||
#define NET_QUEUE_LEN 16
|
||||
#define NET_QUEUE_LEN_MASK (NET_QUEUE_LEN - 1)
|
||||
#define NET_QUEUE_COUNT 3
|
||||
#define NET_QUEUE_COUNT 4
|
||||
#define NET_CARD_MAX 4
|
||||
#define NET_HOST_INTF_MAX 64
|
||||
|
||||
@@ -85,9 +85,10 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
NET_QUEUE_RX = 0,
|
||||
NET_QUEUE_TX_VM = 1,
|
||||
NET_QUEUE_TX_HOST = 2
|
||||
NET_QUEUE_RX = 0,
|
||||
NET_QUEUE_TX_VM = 1,
|
||||
NET_QUEUE_TX_HOST = 2,
|
||||
NET_QUEUE_RX_ON_TX = 3
|
||||
};
|
||||
|
||||
typedef struct netcard_conf_t {
|
||||
@@ -202,7 +203,10 @@ extern const device_t *network_card_getdevice(int);
|
||||
extern int network_tx_pop(netcard_t *card, netpkt_t *out_pkt);
|
||||
extern int network_tx_popv(netcard_t *card, netpkt_t *pkt_vec, int vec_size);
|
||||
extern int network_rx_put(netcard_t *card, uint8_t *bufp, int len);
|
||||
extern int network_rx_on_tx_popv(netcard_t *card, netpkt_t *pkt_vec, int vec_size);
|
||||
extern int network_rx_on_tx_put(netcard_t *card, uint8_t *bufp, int len);
|
||||
extern int network_rx_put_pkt(netcard_t *card, netpkt_t *pkt);
|
||||
extern int network_rx_on_tx_put_pkt(netcard_t *card, netpkt_t *pkt);
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
/* 3Com Etherlink */
|
||||
@@ -216,7 +220,7 @@ extern const device_t ne2000_device;
|
||||
extern const device_t ne2000_compat_device;
|
||||
extern const device_t ne2000_compat_8bit_device;
|
||||
extern const device_t ethernext_mc_device;
|
||||
extern const device_t rtl8019as_device;
|
||||
extern const device_t rtl8019as_pnp_device;
|
||||
extern const device_t de220p_device;
|
||||
extern const device_t rtl8029as_device;
|
||||
|
||||
|
||||
84
src/include/86box/nv/vid_nv_rivatimer.h
Normal file
84
src/include/86box/nv/vid_nv_rivatimer.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Fast, high-frequency, guest CPU-independent timer for Riva emulation.
|
||||
*
|
||||
*
|
||||
* Authors: Connor Hyde, <mario64crashed@gmail.com> I need a better email address ;^)
|
||||
*
|
||||
* Copyright 2024-2025 starfrost
|
||||
*/
|
||||
|
||||
/*
|
||||
RivaTimer
|
||||
|
||||
This is a fast, high-frequency, guest CPU-independent timer.
|
||||
|
||||
The main 86box timer is dependent on the TSC (time-stamp counter) register of the emulated CPU core.
|
||||
This is fine for most purposes and has advantages in the fields of synchronisation and integrates neatly with
|
||||
the clock dividers of the PC architecture, but in the case of the RIVA 128 it does not particularly suffice
|
||||
(although it can be made to work with various techniques) since the clock source on the RIVA 128 is on the board itself
|
||||
and the GPU has several different clocks that control different parts of the GPU (e.g., PTIMER runs on the memory clock but the core gpu is using the pixel clock).
|
||||
|
||||
As faster graphics cards that offload more and more of the 3D graphics pipeline are emulated in the future, more and more work needs to be done by the emulator and
|
||||
issues of synchronisation with a host CPU will simply make that work harder. Some features that are required for
|
||||
|
||||
Architecture Brand Name 3D Features
|
||||
NV1 (1995) NV1 Some weird URBS rectangle crap but feature set generally similar to nv3 but a bit worse
|
||||
NV3 (1997) RIVA 128 (ZX) Triangle setup, edge-slope calculations, edge interpolation, span-slope calculations, span interpolation (Color-buffer, z-buffer, texture mapping, filtering)
|
||||
NV4 (1998) RIVA TNT NV3 + 2x1 pixel pipelines + 32-bit colour + larger textures + trilinear + more ram (16mb)
|
||||
NV5 (1999) RIVA TNT2 NV4 + higher clock speed
|
||||
NV10 (1999) GeForce 256 NV5 + initial geometry transformation + lighting (8x lights) + MPEG-2 motion compensation + 4x1 pixel pipelines
|
||||
NV15 (2000) GeForce 2 NV10 + First attempt at programmability + 4x2 pixel pipelines
|
||||
NV20 (2001) GeForce 3 Programmable shaders!
|
||||
|
||||
As you can see, the performance basically exponentially increases over a period of only 4 years.
|
||||
|
||||
So I decided to create this timer that is completely separate from the CPU Core.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <86box/86box.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
// Linux & MacOS should have the same API since OSX 10.12
|
||||
#else
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
typedef struct rivatimer_s
|
||||
{
|
||||
struct rivatimer_s* prev; // Previous Rivatimer
|
||||
double period; // Period in uS before firing
|
||||
double value; // The current value of the rivatimer
|
||||
bool running; // Is this RivaTimer running?
|
||||
struct rivatimer_s* next; // Next RivaTimer
|
||||
void (*callback)(double real_time); // Callback to call on fire
|
||||
#ifdef _WIN32
|
||||
LARGE_INTEGER starting_time; // Starting time.
|
||||
#else
|
||||
struct timespec starting_time; // Starting time.
|
||||
#endif
|
||||
double time; // Accumulated time in uS.
|
||||
} rivatimer_t;
|
||||
|
||||
void rivatimer_init(void); // Initialise the Rivatimer.
|
||||
rivatimer_t* rivatimer_create(double period, void (*callback)(double real_time));
|
||||
void rivatimer_destroy(rivatimer_t* rivatimer_ptr);
|
||||
|
||||
void rivatimer_update_all(void);
|
||||
void rivatimer_start(rivatimer_t* rivatimer_ptr);
|
||||
void rivatimer_stop(rivatimer_t* rivatimer_ptr);
|
||||
double rivatimer_get_time(rivatimer_t* rivatimer_ptr);
|
||||
void rivatimer_set_callback(rivatimer_t* rivatimer_ptr, void (*callback)(double real_time));
|
||||
void rivatimer_set_period(rivatimer_t* rivatimer_ptr, double period);
|
||||
@@ -60,6 +60,7 @@
|
||||
#define TIME_SYNC_ENABLED 1
|
||||
#define TIME_SYNC_UTC 2
|
||||
|
||||
#ifdef _TIMER_H_
|
||||
/* Define a generic RTC/NVRAM device. */
|
||||
typedef struct _nvr_ {
|
||||
char *fn; /* pathname of image file */
|
||||
@@ -98,14 +99,13 @@ extern const device_t ami_1994_nvr_device;
|
||||
extern const device_t ami_1995_nvr_device;
|
||||
extern const device_t via_nvr_device;
|
||||
extern const device_t p6rp4_nvr_device;
|
||||
extern const device_t martin_nvr_device;
|
||||
extern const device_t elt_nvr_device;
|
||||
#endif
|
||||
|
||||
extern void rtc_tick(void);
|
||||
|
||||
extern void nvr_init(nvr_t *);
|
||||
extern char *nvr_path(char *str);
|
||||
extern FILE *nvr_fopen(char *str, char *mode);
|
||||
extern int nvr_load(void);
|
||||
extern void nvr_close(void);
|
||||
extern void nvr_set_ven_save(void (*ven_save)(void));
|
||||
@@ -114,8 +114,8 @@ extern int nvr_save(void);
|
||||
extern int nvr_is_leap(int year);
|
||||
extern int nvr_get_days(int month, int year);
|
||||
extern void nvr_time_sync(void);
|
||||
extern void nvr_time_get(struct tm *);
|
||||
extern void nvr_time_set(struct tm *);
|
||||
extern void nvr_time_get(void *priv);
|
||||
extern void nvr_time_set(void *priv);
|
||||
|
||||
extern void nvr_reg_write(uint16_t reg, uint8_t val, void *priv);
|
||||
extern void nvr_at_handler(int set, uint16_t base, nvr_t *nvr);
|
||||
@@ -132,5 +132,9 @@ extern void nvr_irq_set(int irq, nvr_t *nvr);
|
||||
extern void nvr_smi_enable(int enable, nvr_t *nvr);
|
||||
extern uint8_t nvr_smi_status(nvr_t *nvr);
|
||||
extern void nvr_smi_status_clear(nvr_t *nvr);
|
||||
#endif
|
||||
|
||||
extern char *nvr_path(char *str);
|
||||
extern FILE *nvr_fopen(char *str, char *mode);
|
||||
|
||||
#endif /*EMU_NVR_H*/
|
||||
|
||||
@@ -283,9 +283,11 @@ extern void pci_init(int flags);
|
||||
|
||||
/* PCI bridge stuff. */
|
||||
extern void pci_bridge_set_ctl(void *priv, uint8_t ctl);
|
||||
extern uint8_t pci_bridge_get_bus_index(void *priv);
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t dec21150_device;
|
||||
extern const device_t dec21152_device;
|
||||
|
||||
extern const device_t ali5243_agp_device;
|
||||
extern const device_t ali5247_agp_device;
|
||||
|
||||
@@ -102,4 +102,6 @@ extern int picinterrupt(void);
|
||||
|
||||
extern uint8_t pic_irq_ack(void);
|
||||
|
||||
extern void pic_toggle_latch(int is_ps2);
|
||||
|
||||
#endif /*EMU_PIC_H*/
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
/* String ID numbers. */
|
||||
enum {
|
||||
STRING_MOUSE_CAPTURE, /* "Click to capture mouse" */
|
||||
STRING_MOUSE_RELEASE, /* "Press F8+F12/Ctrl+End to release mouse" */
|
||||
STRING_MOUSE_RELEASE_MMB, /* "Press F8+F12/Ctrl+End or middle button to release mouse" */
|
||||
STRING_MOUSE_RELEASE, /* "Press %1 to release mouse" */
|
||||
STRING_MOUSE_RELEASE_MMB, /* "Press %1 or middle button to release mouse" */
|
||||
STRING_INVALID_CONFIG, /* "Invalid configuration" */
|
||||
STRING_NO_ST506_ESDI_CDROM, /* "MFM/RLL or ESDI CD-ROM drives never existed" */
|
||||
STRING_NET_ERROR, /* "Failed to initialize network driver" */
|
||||
@@ -47,9 +47,12 @@ enum {
|
||||
STRING_HW_NOT_AVAILABLE_MACHINE, /* "Machine \"%hs\" is not available..." */
|
||||
STRING_HW_NOT_AVAILABLE_VIDEO, /* "Video card \"%hs\" is not available..." */
|
||||
STRING_HW_NOT_AVAILABLE_VIDEO2, /* "Video card #2 \"%hs\" is not available..." */
|
||||
STRING_HW_NOT_AVAILABLE_DEVICE, /* "Device \"%hs\" is not available..." */
|
||||
STRING_MONITOR_SLEEP, /* "Monitor in sleep mode" */
|
||||
STRING_GHOSTPCL_ERROR_TITLE, /* "Unable to initialize GhostPCL" */
|
||||
STRING_GHOSTPCL_ERROR_DESC /* "gpcl6dll32.dll/gpcl6dll64.dll/libgpcl6 is required..." */
|
||||
STRING_GHOSTPCL_ERROR_DESC, /* "gpcl6dll32.dll/gpcl6dll64.dll/libgpcl6 is required..." */
|
||||
STRING_ESCP_ERROR_TITLE, /* "Unable to find Dot-Matrix fonts" */
|
||||
STRING_ESCP_ERROR_DESC /* "TrueType fonts in the \"roms/printer/fonts\" directory..." */
|
||||
};
|
||||
|
||||
/* The Win32 API uses _wcsicmp. */
|
||||
@@ -157,10 +160,11 @@ extern int plat_vidapi(const char *name);
|
||||
extern char *plat_vidapi_name(int api);
|
||||
extern void plat_resize(int x, int y, int monitor_index);
|
||||
extern void plat_resize_request(int x, int y, int monitor_index);
|
||||
extern uint32_t plat_language_code(char *langcode);
|
||||
extern void plat_language_code_r(uint32_t lcid, char *outbuf, int len);
|
||||
extern int plat_language_code(char *langcode);
|
||||
extern void plat_language_code_r(int id, char *outbuf, int len);
|
||||
extern void plat_get_cpu_string(char *outbuf, uint8_t len);
|
||||
extern void plat_set_thread_name(void *thread, const char *name);
|
||||
extern void plat_break(void);
|
||||
|
||||
/* Resource management. */
|
||||
extern wchar_t *plat_get_string(int id);
|
||||
@@ -187,9 +191,6 @@ extern void zip_reload(uint8_t id);
|
||||
extern void mo_eject(uint8_t id);
|
||||
extern void mo_mount(uint8_t id, char *fn, uint8_t wp);
|
||||
extern void mo_reload(uint8_t id);
|
||||
extern int ioctl_open(uint8_t id, char d);
|
||||
extern void ioctl_reset(uint8_t id);
|
||||
extern void ioctl_close(uint8_t id);
|
||||
|
||||
/* Other stuff. */
|
||||
extern void startblit(void);
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Definitions for platform specific serial to host passthrough.
|
||||
*
|
||||
*
|
||||
* Authors: Andreas J. Reichel <webmaster@6th-dimension.com>,
|
||||
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
||||
*
|
||||
* Copyright 2021 Andreas J. Reichel.
|
||||
* Copyright 2021-2022 Jasmine Iwanek.
|
||||
*/
|
||||
|
||||
#ifndef PLAT_CDROM_H
|
||||
#define PLAT_CDROM_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define RAW_SECTOR_SIZE 2352
|
||||
#define COOKED_SECTOR_SIZE 2048
|
||||
|
||||
#define DATA_TRACK 0x14
|
||||
#define AUDIO_TRACK 0x10
|
||||
|
||||
#define CD_FPS 75
|
||||
#define FRAMES_TO_MSF(f, M, S, F) \
|
||||
{ \
|
||||
uint64_t value = f; \
|
||||
*(F) = (value % CD_FPS) & 0xff; \
|
||||
value /= CD_FPS; \
|
||||
*(S) = (value % 60) & 0xff; \
|
||||
value /= 60; \
|
||||
*(M) = value & 0xff; \
|
||||
}
|
||||
#define MSF_TO_FRAMES(M, S, F) ((M) *60 * CD_FPS + (S) *CD_FPS + (F))
|
||||
|
||||
typedef struct SMSF {
|
||||
uint16_t min;
|
||||
uint8_t sec;
|
||||
uint8_t fr;
|
||||
} TMSF;
|
||||
|
||||
extern void plat_cdrom_get_raw_track_info(void *local, int *num, raw_track_info_t *rti);
|
||||
extern int plat_cdrom_is_track_audio(void *local, uint32_t sector);
|
||||
extern int plat_cdrom_is_track_pre(void *local, uint32_t sector);
|
||||
extern uint32_t plat_cdrom_get_last_block(void *local);
|
||||
extern int plat_cdrom_get_audio_track_info(void *local, int end, int track, int *track_num, TMSF *start,
|
||||
uint8_t *attr);
|
||||
extern int plat_cdrom_get_audio_sub(void *local, uint32_t sector, uint8_t *attr, uint8_t *track,
|
||||
uint8_t *index, TMSF *rel_pos, TMSF *abs_pos);
|
||||
extern int plat_cdrom_get_sector_size(void *local, uint32_t sector);
|
||||
extern int plat_cdrom_read_sector(void *local, uint8_t *buffer, uint32_t sector);
|
||||
extern void plat_cdrom_eject(void *local);
|
||||
extern void plat_cdrom_close(void *local);
|
||||
extern int plat_cdrom_set_drive(void *local, const char *drv);
|
||||
extern int plat_cdrom_ext_medium_changed(void *local);
|
||||
extern uint32_t plat_cdrom_get_track_start(void *local, uint32_t sector, uint8_t *attr, uint8_t *track);
|
||||
extern int plat_cdrom_get_local_size(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
34
src/include/86box/plat_cdrom_ioctl.h
Normal file
34
src/include/86box/plat_cdrom_ioctl.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Definitions for platform specific serial to host passthrough.
|
||||
*
|
||||
*
|
||||
* Authors: Andreas J. Reichel <webmaster@6th-dimension.com>,
|
||||
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
||||
*
|
||||
* Copyright 2021 Andreas J. Reichel.
|
||||
* Copyright 2021-2022 Jasmine Iwanek.
|
||||
*/
|
||||
|
||||
#ifndef PLAT_CDROM_IOCTL_H
|
||||
#define PLAT_CDROM_IOCTL_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void * ioctl_open(cdrom_t *dev, const char *drv);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
158
src/include/86box/qt-glsl.h
Normal file
158
src/include/86box/qt-glsl.h
Normal file
@@ -0,0 +1,158 @@
|
||||
#ifndef SRC_WX_GLSL_H_
|
||||
#define SRC_WX_GLSL_H_
|
||||
|
||||
#define MAX_PREV 7
|
||||
|
||||
#define MAX_SHADERS 20
|
||||
#define MAX_TEXTURES 20
|
||||
#define MAX_PARAMETERS 100
|
||||
|
||||
#define MAX_USER_SHADERS 20
|
||||
//#define SDL2_SHADER_DEBUG
|
||||
|
||||
struct shader_scale {
|
||||
int mode[2];
|
||||
float value[2];
|
||||
};
|
||||
|
||||
struct shader_state {
|
||||
float input_size[2];
|
||||
float input_texture_size[2];
|
||||
float output_texture_size[2];
|
||||
float output_size[2];
|
||||
float tex_coords[8];
|
||||
};
|
||||
|
||||
struct shader_vbo {
|
||||
int vertex_coord;
|
||||
int tex_coord;
|
||||
int color;
|
||||
};
|
||||
|
||||
struct shader_texture {
|
||||
int id;
|
||||
int width;
|
||||
int height;
|
||||
int type;
|
||||
int internal_format;
|
||||
int format;
|
||||
int min_filter;
|
||||
int mag_filter;
|
||||
int wrap_mode;
|
||||
void *data;
|
||||
int mipmap;
|
||||
};
|
||||
|
||||
struct shader_lut_texture {
|
||||
char name[50];
|
||||
struct shader_texture texture;
|
||||
};
|
||||
|
||||
struct shader_fbo {
|
||||
int id;
|
||||
struct shader_texture texture;
|
||||
int srgb;
|
||||
int mipmap_input;
|
||||
};
|
||||
|
||||
struct shader_prev {
|
||||
struct shader_fbo fbo;
|
||||
struct shader_vbo vbo;
|
||||
};
|
||||
|
||||
struct shader_input {
|
||||
int texture;
|
||||
int input_size;
|
||||
int texture_size;
|
||||
int tex_coord;
|
||||
};
|
||||
|
||||
struct shader_uniforms {
|
||||
int mvp_matrix;
|
||||
int vertex_coord;
|
||||
int tex_coord;
|
||||
int color;
|
||||
|
||||
int texture;
|
||||
int input_size;
|
||||
int texture_size;
|
||||
int output_size;
|
||||
|
||||
int frame_count;
|
||||
int frame_direction;
|
||||
|
||||
struct shader_input orig;
|
||||
struct shader_input pass[MAX_SHADERS];
|
||||
struct shader_input prev_pass[MAX_SHADERS];
|
||||
struct shader_input prev[MAX_PREV];
|
||||
|
||||
int parameters[MAX_PARAMETERS];
|
||||
int lut_textures[MAX_TEXTURES];
|
||||
};
|
||||
|
||||
struct shader_program {
|
||||
int vertex_shader;
|
||||
int fragment_shader;
|
||||
int id;
|
||||
};
|
||||
|
||||
struct shader_parameter {
|
||||
char id[64];
|
||||
char description[64];
|
||||
float default_value;
|
||||
float value;
|
||||
float min;
|
||||
float max;
|
||||
float step;
|
||||
};
|
||||
|
||||
struct shader_pass {
|
||||
int active;
|
||||
char alias[64];
|
||||
int vertex_array;
|
||||
int frame_count_mod;
|
||||
struct shader_program program;
|
||||
struct shader_uniforms uniforms;
|
||||
struct shader_fbo fbo;
|
||||
struct shader_vbo vbo;
|
||||
struct shader_state state;
|
||||
struct shader_scale scale;
|
||||
};
|
||||
|
||||
struct glsl_shader {
|
||||
int active;
|
||||
char name[64];
|
||||
|
||||
int num_passes;
|
||||
struct shader_pass passes[MAX_SHADERS];
|
||||
|
||||
int num_lut_textures;
|
||||
struct shader_lut_texture lut_textures[MAX_TEXTURES];
|
||||
|
||||
int num_parameters;
|
||||
struct shader_parameter parameters[MAX_PARAMETERS];
|
||||
|
||||
struct shader_pass prev_scene;
|
||||
struct shader_prev prev[MAX_PREV + 1];
|
||||
|
||||
int last_prev_update;
|
||||
int has_prev;
|
||||
|
||||
float shader_refresh_rate;
|
||||
|
||||
int input_filter_linear;
|
||||
};
|
||||
|
||||
typedef struct glsl_t {
|
||||
int num_shaders;
|
||||
struct glsl_shader shaders[MAX_USER_SHADERS];
|
||||
struct shader_pass scene;
|
||||
struct shader_pass final_pass;
|
||||
struct shader_pass fs_color;
|
||||
#ifdef SDL2_SHADER_DEBUG
|
||||
struct shader_pass debug;
|
||||
#endif
|
||||
int srgb;
|
||||
} glsl_t;
|
||||
|
||||
#endif
|
||||
59
src/include/86box/qt-glslp-parser.h
Normal file
59
src/include/86box/qt-glslp-parser.h
Normal file
@@ -0,0 +1,59 @@
|
||||
#ifndef SRC_WX_GLSLP_PARSER_H_
|
||||
#define SRC_WX_GLSLP_PARSER_H_
|
||||
|
||||
#include "qt-glsl.h"
|
||||
|
||||
struct parameter {
|
||||
char id[64];
|
||||
char description[64];
|
||||
float default_value;
|
||||
float value;
|
||||
float min;
|
||||
float max;
|
||||
float step;
|
||||
};
|
||||
|
||||
struct texture {
|
||||
char path[256];
|
||||
char name[50];
|
||||
int linear;
|
||||
int mipmap;
|
||||
char wrap_mode[50];
|
||||
};
|
||||
|
||||
struct shader {
|
||||
char shader_fn[1024];
|
||||
char *shader_program;
|
||||
char alias[64];
|
||||
int filter_linear;
|
||||
int float_framebuffer;
|
||||
int srgb_framebuffer;
|
||||
int mipmap_input;
|
||||
int frame_count_mod;
|
||||
char wrap_mode[50];
|
||||
char scale_type_x[9], scale_type_y[9];
|
||||
float scale_x, scale_y;
|
||||
};
|
||||
|
||||
typedef struct glslp_t {
|
||||
char name[64];
|
||||
int num_shaders;
|
||||
struct shader shaders[MAX_SHADERS];
|
||||
|
||||
int num_textures;
|
||||
struct texture textures[MAX_TEXTURES];
|
||||
|
||||
int num_parameters;
|
||||
struct parameter parameters[MAX_PARAMETERS];
|
||||
|
||||
int input_filter_linear;
|
||||
} glslp_t;
|
||||
|
||||
void get_glslp_name(const char *f, char *s, int size);
|
||||
glslp_t *glslp_parse(const char *f);
|
||||
void glslp_free(glslp_t *p);
|
||||
|
||||
void glslp_read_shader_config(glslp_t *shader);
|
||||
void glslp_write_shader_config(glslp_t *shader);
|
||||
|
||||
#endif /* SRC_WX_GLSLP_PARSER_H_ */
|
||||
@@ -52,6 +52,12 @@ extern uint8_t rom_read(uint32_t addr, void *priv);
|
||||
extern uint16_t rom_readw(uint32_t addr, void *priv);
|
||||
extern uint32_t rom_readl(uint32_t addr, void *priv);
|
||||
|
||||
extern void rom_write(uint32_t addr, uint8_t val, void *priv);
|
||||
extern void rom_writew(uint32_t addr, uint16_t val, void *priv);
|
||||
extern void rom_writel(uint32_t addr, uint32_t val, void *priv);
|
||||
|
||||
extern void rom_get_full_path(char *dest, const char *fn);
|
||||
|
||||
extern FILE *rom_fopen(const char *fn, char *mode);
|
||||
extern int rom_getfile(char *fn, char *s, int size);
|
||||
extern int rom_present(const char *fn);
|
||||
|
||||
@@ -29,15 +29,21 @@
|
||||
#define SCSI_ID_MAX 16 /* 16 on wide buses */
|
||||
#define SCSI_LUN_MAX 8 /* always 8 */
|
||||
|
||||
extern int scsi_card_current[SCSI_CARD_MAX];
|
||||
extern int scsi_card_current[SCSI_CARD_MAX];
|
||||
|
||||
extern int scsi_card_available(int card);
|
||||
extern void scsi_reset(void);
|
||||
extern uint8_t scsi_get_bus(void);
|
||||
|
||||
extern int scsi_card_available(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *scsi_card_getdevice(int card);
|
||||
#endif
|
||||
extern int scsi_card_has_config(int card);
|
||||
extern const char *scsi_card_get_internal_name(int card);
|
||||
extern int scsi_card_get_from_internal_name(char *s);
|
||||
extern void scsi_card_init(void);
|
||||
extern int scsi_card_has_config(int card);
|
||||
extern const char *scsi_card_get_internal_name(int card);
|
||||
extern int scsi_card_get_from_internal_name(char *s);
|
||||
extern void scsi_card_init(void);
|
||||
|
||||
extern void scsi_bus_set_speed(uint8_t bus, double speed);
|
||||
extern double scsi_bus_get_speed(uint8_t bus);
|
||||
|
||||
#endif /*EMU_SCSI_H*/
|
||||
|
||||
@@ -26,47 +26,61 @@ typedef struct scsi_cdrom_t {
|
||||
/* Common block. */
|
||||
mode_sense_pages_t ms_pages_saved;
|
||||
|
||||
cdrom_t * drv;
|
||||
cdrom_t * drv;
|
||||
#ifdef EMU_IDE_H
|
||||
ide_tf_t *tf;
|
||||
ide_tf_t * tf;
|
||||
#else
|
||||
void * tf;
|
||||
void * tf;
|
||||
#endif
|
||||
|
||||
uint8_t *buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
void * log;
|
||||
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t early;
|
||||
uint8_t pad1;
|
||||
uint8_t * buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t early;
|
||||
uint8_t sector_type;
|
||||
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int old_len;
|
||||
int media_status;
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t sector_flags;
|
||||
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int wait;
|
||||
int buffer_pos;
|
||||
|
||||
double callback;
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
uint32_t block_len;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
double callback;
|
||||
|
||||
int sony_vendor;
|
||||
uint8_t (*ven_cmd)(void *sc, const uint8_t *cdb, int32_t *BufLen);
|
||||
|
||||
int use_cdb_9;
|
||||
int was_cached;
|
||||
int toc_cached;
|
||||
int media_access;
|
||||
int sectors_num;
|
||||
|
||||
uint8_t vendor_type;
|
||||
uint8_t ven_cmd_is_data[256];
|
||||
|
||||
mode_sense_pages_t ms_pages_saved_sony;
|
||||
mode_sense_pages_t ms_drive_status_pages_saved;
|
||||
|
||||
uint64_t ms_page_flags;
|
||||
|
||||
mode_sense_pages_t ms_pages_default;
|
||||
mode_sense_pages_t ms_pages_changeable;
|
||||
} scsi_cdrom_t;
|
||||
#endif
|
||||
|
||||
@@ -74,10 +88,12 @@ extern scsi_cdrom_t *scsi_cdrom[CDROM_NUM];
|
||||
|
||||
#define scsi_cdrom_sense_error dev->sense[0]
|
||||
#define scsi_cdrom_sense_key dev->sense[2]
|
||||
#define scsi_cdrom_info *(uint32_t *) &(dev->sense[3])
|
||||
#define scsi_cdrom_asc dev->sense[12]
|
||||
#define scsi_cdrom_ascq dev->sense[13]
|
||||
#define scsi_cdrom_drive cdrom_drives[id].host_drive
|
||||
|
||||
extern void scsi_cdrom_reset(scsi_common_t *sc);
|
||||
extern void scsi_cdrom_drive_reset(const int c);
|
||||
|
||||
#endif /*EMU_SCSI_CDROM_H*/
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#define SCSI_DEVICE_H
|
||||
|
||||
/* Configuration. */
|
||||
#define SCSI_NUM (SCSI_BUS_MAX * SCSI_ID_MAX)
|
||||
|
||||
#define SCSI_LUN_USE_CDB 0xff
|
||||
|
||||
@@ -53,8 +54,8 @@
|
||||
#define GPCMD_SEEK_6 0x0b
|
||||
#define GPCMD_IOMEGA_SET_PROTECTION_MODE 0x0c
|
||||
#define GPCMD_IOMEGA_EJECT 0x0d /* ATAPI only? */
|
||||
#define GPCMD_NO_OPERATION_TOSHIBA 0x0d /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_NO_OPERATION_NEC 0x0d /* NEC Vendor Unique command */
|
||||
#define GPCMD_NO_OPERATION_TOSHIBA 0x0d /* Toshiba Vendor Unique command. */
|
||||
#define GPCMD_NO_OPERATION_NEC 0x0d /* NEC Vendor Unique command. */
|
||||
#define GPCMD_INQUIRY 0x12
|
||||
#define GPCMD_VERIFY_6 0x13
|
||||
#define GPCMD_MODE_SELECT_6 0x15
|
||||
@@ -66,7 +67,7 @@
|
||||
#define GPCMD_PREVENT_REMOVAL 0x1e
|
||||
#define GPCMD_READ_FORMAT_CAPACITIES 0x23
|
||||
#define GPCMD_READ_CDROM_CAPACITY 0x25
|
||||
#define GPCMD_UNKNOWN_CHINON 0x26 /*Chinon Vendor Unique command*/
|
||||
#define GPCMD_UNKNOWN_CHINON 0x26 /* Chinon Vendor Unique command. */
|
||||
#define GPCMD_READ_10 0x28
|
||||
#define GPCMD_READ_GENERATION 0x29
|
||||
#define GPCMD_WRITE_10 0x2a
|
||||
@@ -109,39 +110,40 @@
|
||||
#define GPCMD_MECHANISM_STATUS 0xbd
|
||||
#define GPCMD_READ_CD 0xbe
|
||||
#define GPCMD_SEND_DVD_STRUCTURE 0xbf /* This is for writing only, irrelevant to 86Box. */
|
||||
#define GPCMD_EJECT_CHINON 0xc0 /* Chinon Vendor Unique command */
|
||||
#define GPCMD_AUDIO_TRACK_SEARCH_TOSHIBA 0xc0 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_SET_ADDRESS_FORMAT_SONY 0xc0 /* Sony Vendor Unique command */
|
||||
#define GPCMD_EJECT_CHINON 0xc0 /* Chinon Vendor Unique command */
|
||||
#define GPCMD_MAGAZINE_EJECT_PIONEER 0xc0 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_SET_ADDRESS_FORMAT_SONY 0xc0 /* Sony Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_TOSHIBA 0xc1 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_READ_TOC_SONY 0xc1 /* Sony Vendor Unique command */
|
||||
#define GPCMD_READ_TOC_PIONEER 0xc1 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_READ_TOC_SONY 0xc1 /* Sony Vendor Unique command */
|
||||
#define GPCMD_PAUSE_RESUME_ALT 0xc2
|
||||
#define GPCMD_READ_SUBCHANNEL_MATSUSHITA 0xc2 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_READ_SUBCODEQ_PIONEER 0xc2 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_READ_SUBCHANNEL_SONY 0xc2 /* Sony Vendor Unique command */
|
||||
#define GPCMD_STILL_TOSHIBA 0xc2 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_READ_SUBCODEQ_PIONEER 0xc2 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_READ_TOC_MATSUSHITA 0xc3 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_READ_HEADER_SONY 0xc3 /* Sony Vendor Unique command */
|
||||
#define GPCMD_SET_STOP_TIME_TOSHIBA 0xc3 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_READ_HEADER_MATSUSHITA 0xc4 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_PLAYBACK_STATUS_SONY 0xc4 /* Sony Vendor Unique command */
|
||||
#define GPCMD_CADDY_EJECT_TOSHIBA 0xc4 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_PLAYBACK_STATUS_SONY 0xc4 /* Sony Vendor Unique command */
|
||||
#define GPCMD_READ_HEADER_MATSUSHITA 0xc4 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_PAUSE_SONY 0xc5 /* Sony Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_MATSUSHITA 0xc5 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_UNKNOWN_SCSI2_NEC 0xc5 /* NEC Vendor Unique Command */
|
||||
#define GPCMD_STOP_CHINON 0xc6 /* Chinon Vendor Unique command */
|
||||
#define GPCMD_PLAY_TRACK_SONY 0xc6 /* Sony Vendor Unique command */
|
||||
#define GPCMD_READ_SUBCODEQ_PLAYING_STATUS_TOSHIBA 0xc6 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_STOP_CHINON 0xc6 /* Chinon Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_MSF_MATSUSHITA 0xc7 /* Matsushita Vendor Unique command*/
|
||||
#define GPCMD_PLAY_MSF_SONY 0xc7 /* Sony Vendor Unique command*/
|
||||
#define GPCMD_READ_DISC_INFORMATION_TOSHIBA 0xc7 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_TRACK_INDEX_MATSUSHITA 0xc8 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_SONY 0xc8 /* Sony Vendor Unique command */
|
||||
#define GPCMD_AUDIO_TRACK_SEARCH_PIONEER 0xc8 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_SONY 0xc8 /* Sony Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_TRACK_INDEX_MATSUSHITA 0xc8 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_READ_CDROM_MODE_TOSHIBA 0xc8 /* Toshiba Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_PIONEER 0xc9 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10_MATSUSHITA 0xc9 /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_PLAYBACK_CONTROL_SONY 0xc9 /* Sony Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_PIONEER 0xc9 /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_PAUSE_PIONEER 0xca /* Pioneer Vendor Unique command */
|
||||
#define GPCMD_PAUSE_RESUME_MATSUSHITA 0xcb /* Matsushita Vendor Unique command */
|
||||
#define GPCMD_STOP_PIONEER 0xcb /* Pioneer Vendor Unique command */
|
||||
@@ -150,8 +152,8 @@
|
||||
#define GPCMD_READ_CD_MSF_OLD 0xd5 /* Should be equivalent to 0xb9 */
|
||||
#define GPCMD_AUDIO_TRACK_SEARCH_NEC 0xd8 /* NEC Vendor Unique command */
|
||||
#define GPCMD_PLAY_AUDIO_NEC 0xd9 /* NEC Vendor Unique command */
|
||||
#define GPCMD_STILL_NEC 0xda /* NEC Vendor Unique command */
|
||||
#define GPCMD_SET_SPEED_ALT 0xda /* Should be equivalent to 0xbb */
|
||||
#define GPCMD_STILL_NEC 0xda /* NEC Vendor Unique command */
|
||||
#define GPCMD_SET_STOP_TIME_NEC 0xdb /* NEC Vendor Unique command */
|
||||
#define GPCMD_CADDY_EJECT_NEC 0xdc /* NEC Vendor Unique command */
|
||||
#define GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC 0xdd /* NEC Vendor Unique command */
|
||||
@@ -218,7 +220,7 @@
|
||||
#define ASC_INV_FIELD_IN_PARAMETER_LIST 0x26
|
||||
#define ASC_WRITE_PROTECTED 0x27
|
||||
#define ASC_MEDIUM_MAY_HAVE_CHANGED 0x28
|
||||
#define ASC_CAPACITY_DATA_CHANGED 0x2A
|
||||
#define ASC_CAPACITY_DATA_CHANGED 0x2a
|
||||
#define ASC_INCOMPATIBLE_FORMAT 0x30
|
||||
#define ASC_MEDIUM_NOT_PRESENT 0x3a
|
||||
#define ASC_DATA_PHASE_ERROR 0x4b
|
||||
@@ -233,16 +235,12 @@
|
||||
#define ASCQ_AUDIO_PLAY_OPERATION_PAUSED 0x12
|
||||
#define ASCQ_AUDIO_PLAY_OPERATION_COMPLETED 0x13
|
||||
|
||||
/* Tell RISC OS that we have a 4x CD-ROM drive (600kb/sec data, 706kb/sec raw).
|
||||
Not that it means anything */
|
||||
#define CDROM_SPEED 706 /* 0x2C2 */
|
||||
|
||||
#define BUFFER_SIZE (256 * 1024)
|
||||
|
||||
#define RW_DELAY (TIMER_USEC * 500)
|
||||
|
||||
/* Some generally useful CD-ROM information */
|
||||
#ifdef CONSERVATIVE_MAXIMUM
|
||||
#define CD_MINS 90 /* max. minutes per CD */
|
||||
#else
|
||||
#define CD_MINS 100 /* max. minutes per CD - yes, 100-minute CD's in fact existed */
|
||||
#endif
|
||||
#define CD_SECS 60 /* seconds per minute */
|
||||
#define CD_FRAMES 75 /* frames per second */
|
||||
#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */
|
||||
@@ -276,6 +274,10 @@
|
||||
|
||||
/* Profile list from MMC-6 revision 1 table 91 */
|
||||
#define MMC_PROFILE_NONE 0x0000
|
||||
#define MMC_PROFILE_REMOVABLE_DISK 0x0002
|
||||
#define MMC_PROFILE_MO 0x0003
|
||||
#define MMC_PROFILE_MO_WORM 0x0004
|
||||
#define MMC_PROFILE_AS_MO 0x0005
|
||||
#define MMC_PROFILE_CD_ROM 0x0008
|
||||
#define MMC_PROFILE_CD_R 0x0009
|
||||
#define MMC_PROFILE_CD_RW 0x000A
|
||||
@@ -304,7 +306,6 @@
|
||||
#define MMC_PROFILE_HDDVD_RW_DL 0x005A
|
||||
#define MMC_PROFILE_INVALID 0xFFFF
|
||||
|
||||
#define EARLY_ONLY 64
|
||||
#define SCSI_ONLY 32
|
||||
#define ATAPI_ONLY 16
|
||||
#define IMPLEMENTED 8
|
||||
@@ -312,8 +313,6 @@
|
||||
#define CHECK_READY 2
|
||||
#define ALLOW_UA 1
|
||||
|
||||
#define MSFtoLBA(m, s, f) ((((m * 60) + s) * 75) + f)
|
||||
|
||||
#define MSG_COMMAND_COMPLETE 0x00
|
||||
|
||||
#define BUS_DBP 0x01
|
||||
@@ -333,6 +332,20 @@
|
||||
|
||||
#define BUS_IDLE (1 << 31)
|
||||
|
||||
#define STATE_IDLE 0
|
||||
#define STATE_COMMAND 1
|
||||
#define STATE_DATAIN 2
|
||||
#define STATE_DATAOUT 3
|
||||
#define STATE_STATUS 4
|
||||
#define STATE_MESSAGEIN 5
|
||||
#define STATE_SELECT 6
|
||||
#define STATE_MESSAGEOUT 7
|
||||
#define STATE_MESSAGE_ID 8
|
||||
|
||||
#define PIO_TX_BUS 0
|
||||
#define DMA_IN_TX_BUS 1
|
||||
#define DMA_OUT_TX_BUS 2
|
||||
|
||||
#define PHASE_IDLE 0x00
|
||||
#define PHASE_COMMAND 0x01
|
||||
#define PHASE_DATA_IN 0x02
|
||||
@@ -357,7 +370,7 @@
|
||||
#define MODE_SELECT_PHASE_PAGE 4
|
||||
|
||||
typedef struct mode_sense_pages_t {
|
||||
uint8_t pages[0x40][0x40];
|
||||
uint8_t pages[0x40][0x40];
|
||||
} mode_sense_pages_t;
|
||||
|
||||
/* This is so we can access the common elements to all SCSI device structs
|
||||
@@ -365,61 +378,109 @@ typedef struct mode_sense_pages_t {
|
||||
typedef struct scsi_common_s {
|
||||
mode_sense_pages_t ms_pages_saved;
|
||||
|
||||
void * priv;
|
||||
void * priv;
|
||||
#ifdef EMU_IDE_H
|
||||
ide_tf_t *tf;
|
||||
ide_tf_t * tf;
|
||||
#else
|
||||
void * tf;
|
||||
void * tf;
|
||||
#endif
|
||||
|
||||
uint8_t *temp_buffer;
|
||||
uint8_t atapi_cdb[16]; /* This is atapi_cdb in ATAPI-supporting devices,
|
||||
and pad in SCSI-only devices. */
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
void * log;
|
||||
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
uint8_t * temp_buffer;
|
||||
/*
|
||||
This is atapi_cdb in ATAPI-supporting devices,
|
||||
and pad in SCSI-only devices.
|
||||
*/
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int old_len;
|
||||
int media_status;
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int wait;
|
||||
int buffer_pos;
|
||||
|
||||
double callback;
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
uint32_t block_len;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
double callback;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
} scsi_common_t;
|
||||
|
||||
typedef struct scsi_device_t {
|
||||
int32_t buffer_length;
|
||||
int32_t buffer_length;
|
||||
|
||||
uint8_t status;
|
||||
uint8_t phase;
|
||||
uint16_t type;
|
||||
uint8_t status;
|
||||
uint8_t phase;
|
||||
|
||||
scsi_common_t *sc;
|
||||
uint16_t type;
|
||||
|
||||
void (*command)(scsi_common_t *sc, uint8_t *cdb);
|
||||
void (*request_sense)(scsi_common_t *sc, uint8_t *buffer, uint8_t alloc_length);
|
||||
void (*reset)(scsi_common_t *sc);
|
||||
uint8_t (*phase_data_out)(scsi_common_t *sc);
|
||||
void (*command_stop)(scsi_common_t *sc);
|
||||
scsi_common_t * sc;
|
||||
|
||||
void (*command)(scsi_common_t *sc, const uint8_t *cdb);
|
||||
void (*request_sense)(scsi_common_t *sc, uint8_t *buffer,
|
||||
uint8_t alloc_length);
|
||||
void (*reset)(scsi_common_t *sc);
|
||||
uint8_t (*phase_data_out)(scsi_common_t *sc);
|
||||
void (*command_stop)(scsi_common_t *sc);
|
||||
} scsi_device_t;
|
||||
|
||||
typedef struct scsi_bus_t {
|
||||
uint8_t data;
|
||||
uint8_t msglun;
|
||||
uint8_t data_wait;
|
||||
uint8_t target_id;
|
||||
uint8_t bus_device;
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
|
||||
uint8_t command[16];
|
||||
uint8_t msgout[4];
|
||||
uint8_t pad2[4];
|
||||
|
||||
int tx_mode;
|
||||
int clear_req;
|
||||
int wait_data;
|
||||
int wait_complete;
|
||||
int bus_out;
|
||||
int bus_in;
|
||||
int command_pos;
|
||||
int command_issued;
|
||||
int data_pos;
|
||||
int msgout_pos;
|
||||
int is_msgout;
|
||||
int state;
|
||||
|
||||
uint32_t bus_phase;
|
||||
uint32_t total_len;
|
||||
uint32_t data_repeat;
|
||||
|
||||
double period;
|
||||
double speed;
|
||||
double divider;
|
||||
double multi;
|
||||
|
||||
void *priv;
|
||||
void (*timer)(void *priv, double period);
|
||||
} scsi_bus_t;
|
||||
|
||||
/* These are based on the INQUIRY values. */
|
||||
#define SCSI_NONE 0x0060
|
||||
#define SCSI_FIXED_DISK 0x0000
|
||||
@@ -430,15 +491,8 @@ typedef struct scsi_device_t {
|
||||
extern scsi_device_t scsi_devices[SCSI_BUS_MAX][SCSI_ID_MAX];
|
||||
#endif /* EMU_SCSI_H */
|
||||
|
||||
extern int cdrom_add_error_and_subchannel(uint8_t *b, int real_sector_type);
|
||||
extern int cdrom_LBAtoMSF_accurate(void);
|
||||
|
||||
extern int mode_select_init(uint8_t command, uint16_t pl_length, uint8_t do_save);
|
||||
extern int mode_select_terminate(int force);
|
||||
extern int mode_select_write(uint8_t val);
|
||||
|
||||
extern uint8_t *scsi_device_sense(scsi_device_t *dev);
|
||||
extern double scsi_device_get_callback(scsi_device_t *dev);
|
||||
extern uint8_t *scsi_device_sense(scsi_device_t *dev);
|
||||
extern void scsi_device_request_sense(scsi_device_t *dev, uint8_t *buffer,
|
||||
uint8_t alloc_length);
|
||||
extern void scsi_device_reset(scsi_device_t *dev);
|
||||
@@ -446,14 +500,16 @@ extern int scsi_device_present(scsi_device_t *dev);
|
||||
extern int scsi_device_valid(scsi_device_t *dev);
|
||||
extern int scsi_device_cdb_length(scsi_device_t *dev);
|
||||
extern void scsi_device_command_phase0(scsi_device_t *dev, uint8_t *cdb);
|
||||
extern void scsi_device_command_phase1(scsi_device_t *dev);
|
||||
extern void scsi_device_command_stop(scsi_device_t *dev);
|
||||
extern void scsi_device_command_phase1(scsi_device_t *dev);
|
||||
extern void scsi_device_identify(scsi_device_t *dev, uint8_t lun);
|
||||
extern void scsi_device_close_all(void);
|
||||
extern void scsi_device_init(void);
|
||||
|
||||
extern void scsi_reset(void);
|
||||
extern uint8_t scsi_get_bus(void);
|
||||
extern int scsi_bus_read(scsi_bus_t *scsi_bus);
|
||||
extern void scsi_bus_update(scsi_bus_t *scsi_bus, int bus);
|
||||
|
||||
extern void scsi_bus_set_speed(uint8_t bus, double speed);
|
||||
extern double scsi_bus_get_speed(uint8_t bus);
|
||||
|
||||
@@ -19,42 +19,45 @@
|
||||
typedef struct scsi_disk_t {
|
||||
mode_sense_pages_t ms_pages_saved;
|
||||
|
||||
hard_disk_t *drv;
|
||||
hard_disk_t * drv;
|
||||
#ifdef EMU_IDE_H
|
||||
ide_tf_t * tf;
|
||||
ide_tf_t * tf;
|
||||
#else
|
||||
void * tf;
|
||||
void * tf;
|
||||
#endif
|
||||
|
||||
uint8_t *temp_buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
void * log;
|
||||
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
uint8_t * temp_buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int pad6;
|
||||
int pad7;
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int pad6;
|
||||
int pad7;
|
||||
|
||||
double callback;
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
uint32_t block_len;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
double callback;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
} scsi_disk_t;
|
||||
|
||||
extern scsi_disk_t *scsi_disk[HDD_NUM];
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
#define ICR_ACK 0x10
|
||||
#define ICR_ARB_LOST 0x20
|
||||
#define ICR_ARB_IN_PROGRESS 0x40
|
||||
#define ICR_RST 0x80
|
||||
#define ICR_PHASE 0x9e
|
||||
#define ICR_WRITE 0x9f
|
||||
|
||||
#define MODE_ARBITRATE 0x01
|
||||
#define MODE_DMA 0x02
|
||||
@@ -63,69 +66,34 @@
|
||||
#define TCR_REQ 0x08
|
||||
#define TCR_LAST_BYTE_SENT 0x80
|
||||
|
||||
|
||||
#define STATE_IDLE 0
|
||||
#define STATE_COMMAND 1
|
||||
#define STATE_DATAIN 2
|
||||
#define STATE_DATAOUT 3
|
||||
#define STATE_STATUS 4
|
||||
#define STATE_MESSAGEIN 5
|
||||
#define STATE_SELECT 6
|
||||
#define STATE_MESSAGEOUT 7
|
||||
#define STATE_MESSAGE_ID 8
|
||||
|
||||
#define DMA_IDLE 0
|
||||
#define DMA_SEND 1
|
||||
#define DMA_INITIATOR_RECEIVE 2
|
||||
|
||||
typedef struct ncr_t {
|
||||
uint8_t icr;
|
||||
uint8_t mode;
|
||||
uint8_t tcr;
|
||||
uint8_t data_wait;
|
||||
uint8_t isr;
|
||||
uint8_t output_data;
|
||||
uint8_t target_id;
|
||||
uint8_t tx_data;
|
||||
uint8_t msglun;
|
||||
uint8_t irq_state;
|
||||
uint8_t isr_reg;
|
||||
|
||||
uint8_t command[20];
|
||||
uint8_t msgout[4];
|
||||
uint8_t bus;
|
||||
|
||||
int msgout_pos;
|
||||
int is_msgout;
|
||||
|
||||
int dma_mode;
|
||||
int cur_bus;
|
||||
int bus_in;
|
||||
int new_phase;
|
||||
int state;
|
||||
int clear_req;
|
||||
int wait_data;
|
||||
int wait_complete;
|
||||
int command_pos;
|
||||
int data_pos;
|
||||
|
||||
int irq;
|
||||
|
||||
double period;
|
||||
|
||||
void *priv;
|
||||
void (*dma_mode_ext)(void *priv, void *ext_priv);
|
||||
void (*dma_mode_ext)(void *priv, void *ext_priv, uint8_t val);
|
||||
int (*dma_send_ext)(void *priv, void *ext_priv);
|
||||
int (*dma_initiator_receive_ext)(void *priv, void *ext_priv);
|
||||
void (*timer)(void *ext_priv, double period);
|
||||
|
||||
scsi_bus_t scsibus;
|
||||
} ncr_t;
|
||||
|
||||
extern int ncr5380_cmd_len[8];
|
||||
|
||||
extern void ncr5380_irq(ncr_t *ncr, int set_irq);
|
||||
extern void ncr5380_set_irq(ncr_t *ncr, int irq);
|
||||
extern void ncr5380_set_irq(ncr_t *ncr, int irq);
|
||||
extern uint32_t ncr5380_get_bus_host(ncr_t *ncr);
|
||||
extern void ncr5380_bus_read(ncr_t *ncr);
|
||||
extern void ncr5380_bus_update(ncr_t *ncr, int bus);
|
||||
extern void ncr5380_write(uint16_t port, uint8_t val, ncr_t *ncr);
|
||||
extern uint8_t ncr5380_read(uint16_t port, ncr_t *ncr);
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ typedef struct t128_t {
|
||||
uint8_t status;
|
||||
uint8_t buffer[512];
|
||||
uint8_t ext_ram[0x80];
|
||||
uint8_t block_count;
|
||||
uint32_t block_count;
|
||||
|
||||
int block_loaded;
|
||||
int pos, host_pos;
|
||||
@@ -39,6 +39,7 @@ typedef struct t128_t {
|
||||
|
||||
int bios_enabled;
|
||||
uint8_t pos_regs[8];
|
||||
int type;
|
||||
|
||||
pc_timer_t timer;
|
||||
} t128_t;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2020 Sarah Walker.
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
* Copyright 2016-2025 Miran Grca.
|
||||
* Copyright 2017-2020 Fred N. van Kempen.
|
||||
*/
|
||||
|
||||
@@ -137,6 +137,7 @@ extern serial_t *serial_attach_ex_2(int port,
|
||||
extern void serial_remove(serial_t *dev);
|
||||
extern void serial_set_type(serial_t *dev, int type);
|
||||
extern void serial_setup(serial_t *dev, uint16_t addr, uint8_t irq);
|
||||
extern void serial_irq(serial_t *dev, uint8_t irq);
|
||||
extern void serial_clear_fifo(serial_t *dev);
|
||||
extern void serial_write_fifo(serial_t *dev, uint8_t dat);
|
||||
extern void serial_set_next_inst(int ni);
|
||||
|
||||
@@ -55,7 +55,7 @@ typedef struct serial_passthrough_s {
|
||||
void *backend_priv; /* Private platform backend data */
|
||||
} serial_passthrough_t;
|
||||
|
||||
extern bool serial_passthrough_enabled[SERIAL_MAX];
|
||||
extern bool serial_passthrough_enabled[SERIAL_MAX - 1];
|
||||
extern const device_t serial_passthrough_device;
|
||||
|
||||
extern void serial_passthrough_init(void);
|
||||
|
||||
@@ -16,13 +16,20 @@
|
||||
#ifndef EMU_SIO_H
|
||||
#define EMU_SIO_H
|
||||
|
||||
extern void vt82c686_sio_write(uint8_t addr, uint8_t val, void *priv);
|
||||
|
||||
/* ACC Micro */
|
||||
extern const device_t acc3221_device;
|
||||
|
||||
/* Acer / ALi */
|
||||
extern const device_t ali5105_device;
|
||||
|
||||
extern const device_t ali5123_device;
|
||||
extern const device_t f82c710_device;
|
||||
|
||||
/* Chips & Technologies */
|
||||
extern const device_t f82c606_device;
|
||||
|
||||
extern const device_t f82c710_device;
|
||||
|
||||
/* SM(S)C */
|
||||
extern const device_t fdc37c651_device;
|
||||
extern const device_t fdc37c651_ide_device;
|
||||
extern const device_t fdc37c661_device;
|
||||
@@ -35,33 +42,48 @@ extern const device_t fdc37c665_ide_device;
|
||||
extern const device_t fdc37c665_ide_pri_device;
|
||||
extern const device_t fdc37c665_ide_sec_device;
|
||||
extern const device_t fdc37c666_device;
|
||||
extern const device_t fdc37c67x_device;
|
||||
|
||||
extern const device_t fdc37c669_device;
|
||||
extern const device_t fdc37c669_370_device;
|
||||
extern const device_t fdc37c931apm_device;
|
||||
extern const device_t fdc37c931apm_compaq_device;
|
||||
extern const device_t fdc37c932fr_device;
|
||||
extern const device_t fdc37c932qf_device;
|
||||
extern const device_t fdc37c932_device;
|
||||
extern const device_t fdc37c935_device;
|
||||
extern const device_t fdc37c935_370_device;
|
||||
extern const device_t fdc37c935_no_nvr_device;
|
||||
|
||||
extern const device_t fdc37c67x_device;
|
||||
|
||||
#define FDC37C93X_NORMAL 0x0002
|
||||
#define FDC37C93X_FR 0x0003
|
||||
#define FDC37C93X_APM 0x0030
|
||||
#define FDC37C93X_CHIP_ID 0x00ff
|
||||
|
||||
#define FDC37C931 0x0100 /* Compaq KBC firmware and configuration registers on GPIO ports. */
|
||||
#define FDC37C932 0x0200 /* AMI '5' Megakey KBC firmware. */
|
||||
#define FDC37C933 0x0300 /* IBM KBC firmware. */
|
||||
#define FDC37C935 0x0500 /* Phoenix Multikey/42 1.38 KBC firmware. */
|
||||
#define FDC37C937 0x0700 /* Phoenix Multikey/42i 4.16 KBC firmware. */
|
||||
#define FDC37C93X_KBC 0x0f00
|
||||
|
||||
#define FDC37C93X_NO_NVR 0x1000
|
||||
#define FDC37C93X_370 0x2000
|
||||
|
||||
extern const device_t fdc37c93x_device;
|
||||
|
||||
extern const device_t fdc37m60x_device;
|
||||
extern const device_t fdc37m60x_370_device;
|
||||
|
||||
/* ITE */
|
||||
extern const device_t it8661f_device;
|
||||
extern const device_t it8671f_device;
|
||||
|
||||
/* Intel */
|
||||
extern const device_t i82091aa_device;
|
||||
extern const device_t i82091aa_26e_device;
|
||||
extern const device_t i82091aa_398_device;
|
||||
extern const device_t i82091aa_ide_pri_device;
|
||||
extern const device_t i82091aa_ide_device;
|
||||
extern const device_t pc87306_device;
|
||||
extern const device_t pc87307_device;
|
||||
extern const device_t pc87307_15c_device;
|
||||
extern const device_t pc87307_both_device;
|
||||
extern const device_t pc87309_device;
|
||||
extern const device_t pc87309_15c_device;
|
||||
|
||||
/* National Semiconductors */
|
||||
extern const device_t pc87310_device;
|
||||
extern const device_t pc87310_ide_device;
|
||||
|
||||
extern const device_t pc87306_device;
|
||||
extern const device_t pc87311_device;
|
||||
extern const device_t pc87311_ide_device;
|
||||
extern const device_t pc87332_device;
|
||||
@@ -69,35 +91,80 @@ extern const device_t pc87332_398_device;
|
||||
extern const device_t pc87332_398_ide_device;
|
||||
extern const device_t pc87332_398_ide_sec_device;
|
||||
extern const device_t pc87332_398_ide_fdcon_device;
|
||||
extern const device_t pc97307_device;
|
||||
|
||||
#define PCX7307_PC87307 0x00c0
|
||||
#define PCX7307_PC97307 0x00cf
|
||||
|
||||
#define PC87309_PC87309 0x00e0
|
||||
|
||||
#define PCX730X_CHIP_ID 0x00ff
|
||||
|
||||
#define PCX730X_AMI 0x0200 /* AMI '5' Megakey KBC firmware. */
|
||||
#define PCX730X_PHOENIX_42 0x0500 /* Phoenix Multikey/42 1.37 KBC firmware. */
|
||||
#define PCX730X_PHOENIX_42I 0x0700 /* Phoenix Multikey/42i 4.16 KBC firmware. */
|
||||
#define PCX730X_KBC 0x0f00
|
||||
|
||||
#define PCX730X_15C 0x2000
|
||||
|
||||
extern const device_t pc87307_device;
|
||||
|
||||
extern const device_t pc87309_device;
|
||||
|
||||
/* LG Prime */
|
||||
extern const device_t prime3b_device;
|
||||
extern const device_t prime3b_ide_device;
|
||||
extern const device_t prime3c_device;
|
||||
extern const device_t prime3c_ide_device;
|
||||
|
||||
/* IBM PS/1 */
|
||||
extern const device_t ps1_m2133_sio;
|
||||
|
||||
/* Super I/O Detect */
|
||||
#ifdef USE_SIO_DETECT
|
||||
extern const device_t sio_detect_device;
|
||||
#endif /* USE_SIO_DETECT */
|
||||
|
||||
/* UMC */
|
||||
extern const device_t um82c862f_device;
|
||||
extern const device_t um82c862f_ide_device;
|
||||
extern const device_t um82c863f_device;
|
||||
extern const device_t um82c863f_ide_device;
|
||||
extern const device_t um8663af_device;
|
||||
extern const device_t um8663af_ide_device;
|
||||
extern const device_t um8663af_sec_device;
|
||||
extern const device_t um8663bf_device;
|
||||
extern const device_t um8663bf_ide_device;
|
||||
extern const device_t um8663bf_sec_device;
|
||||
|
||||
extern const device_t um8669f_device;
|
||||
extern const device_t um8669f_ide_device;
|
||||
extern const device_t um8669f_ide_sec_device;
|
||||
|
||||
/* VIA */
|
||||
extern void vt82c686_sio_write(uint8_t addr, uint8_t val, void *priv);
|
||||
|
||||
extern const device_t via_vt82c686_sio_device;
|
||||
|
||||
/* VLSI */
|
||||
extern const device_t vl82c113_device;
|
||||
|
||||
/* Winbond */
|
||||
extern const device_t w83787f_88h_device;
|
||||
extern const device_t w83787f_device;
|
||||
extern const device_t w83787f_ide_device;
|
||||
extern const device_t w83787f_ide_en_device;
|
||||
extern const device_t w83787f_ide_sec_device;
|
||||
|
||||
extern const device_t w83877f_device;
|
||||
extern const device_t w83877f_president_device;
|
||||
extern const device_t w83877tf_device;
|
||||
extern const device_t w83877tf_acorp_device;
|
||||
|
||||
#define TYPE_W83977EF 0x52F0
|
||||
#define TYPE_W83977F 0x9771
|
||||
#define TYPE_W83977TF 0x9773
|
||||
#define TYPE_W83977ATF 0x9774
|
||||
|
||||
extern const device_t w83977f_device;
|
||||
extern const device_t w83977f_370_device;
|
||||
extern const device_t w83977tf_device;
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
#define AC97_CODEC_STAC9708 AC97_VENDOR_ID(0x83, 0x84, 0x76, 0x08)
|
||||
#define AC97_CODEC_STAC9721 AC97_VENDOR_ID(0x83, 0x84, 0x76, 0x09)
|
||||
#define AC97_CODEC_TR28023 AC97_VENDOR_ID('T', 'R', 'A', 0x03)
|
||||
#define AC97_CODEC_W83971D AC97_VENDOR_ID('W', 'E', 'C', 0x01)
|
||||
#define AC97_CODEC_WM9701A AC97_VENDOR_ID('W', 'M', 'L', 0x00)
|
||||
|
||||
typedef struct ac97_vendor_reg_t {
|
||||
@@ -150,6 +151,7 @@ extern const device_t cs4297a_device;
|
||||
extern const device_t stac9708_device;
|
||||
extern const device_t stac9721_device;
|
||||
extern const device_t tr28023_device;
|
||||
extern const device_t w83971d_device;
|
||||
extern const device_t wm9701a_device;
|
||||
|
||||
extern const device_t ac97_via_device;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*
|
||||
* Copyright 2008-2020 Sarah Walker.
|
||||
* Copyright 2018-2020 TheCollector1995.
|
||||
* Copyright 2021 RichardG.
|
||||
* Copyright 2021-2025 RichardG.
|
||||
*/
|
||||
|
||||
#ifndef SOUND_AD1848_H
|
||||
@@ -26,8 +26,10 @@ enum {
|
||||
AD1848_TYPE_DEFAULT = 0,
|
||||
AD1848_TYPE_CS4248 = 1,
|
||||
AD1848_TYPE_CS4231 = 2,
|
||||
AD1848_TYPE_CS4235 = 3,
|
||||
AD1848_TYPE_CS4236 = 4
|
||||
AD1848_TYPE_CS4232 = 3,
|
||||
AD1848_TYPE_CS4236 = 4,
|
||||
AD1848_TYPE_CS4236B = 5,
|
||||
AD1848_TYPE_CS4235 = 6
|
||||
};
|
||||
|
||||
typedef struct ad1848_t {
|
||||
|
||||
42
src/include/86box/snd_mmb.h
Normal file
42
src/include/86box/snd_mmb.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Mindscape Music Board emulation.
|
||||
*
|
||||
* Authors: Roy Baer, <https://pcem-emulator.co.uk/>
|
||||
* Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
*
|
||||
* Copyright 2025 Roy Baer.
|
||||
* Copyright 2025 Jasmine Iwanek.
|
||||
*/
|
||||
#ifndef _SOUND_SND_MMB_H_
|
||||
#define _SOUND_SND_MMB_H_
|
||||
|
||||
#define MMB_FREQ FREQ_48000
|
||||
|
||||
/* NOTE:
|
||||
* The constant clock rate is a deviation from the real hardware which has
|
||||
* the design flaw that the clock rate is always half the ISA bus clock.
|
||||
*/
|
||||
#define MMB_CLOCK 2386364
|
||||
|
||||
typedef struct ay_3_891x_s {
|
||||
uint8_t index;
|
||||
uint8_t regs[16];
|
||||
struct ayumi chip;
|
||||
} ay_3_891x_t;
|
||||
|
||||
typedef struct mmb_s {
|
||||
ay_3_891x_t first;
|
||||
ay_3_891x_t second;
|
||||
|
||||
int16_t buffer[SOUNDBUFLEN * 2];
|
||||
int pos;
|
||||
} mmb_t;
|
||||
|
||||
#endif /* _SOUND_SND_MMB_H_ */
|
||||
@@ -170,7 +170,9 @@ extern const device_t sb_awe64_gold_device;
|
||||
/* Crystal CS423x */
|
||||
extern const device_t cs4235_device;
|
||||
extern const device_t cs4235_onboard_device;
|
||||
extern const device_t cs4236_onboard_device;
|
||||
extern const device_t cs4236b_device;
|
||||
extern const device_t cs4236b_onboard_device;
|
||||
extern const device_t cs4237b_device;
|
||||
extern const device_t cs4238b_device;
|
||||
|
||||
@@ -195,6 +197,7 @@ extern const device_t ct5880_onboard_device;
|
||||
|
||||
/* Gravis UltraSound and UltraSound Max */
|
||||
extern const device_t gus_device;
|
||||
extern const device_t gus_max_device;
|
||||
|
||||
/* IBM PS/1 Audio Card */
|
||||
extern const device_t ps1snd_device;
|
||||
@@ -203,6 +206,9 @@ extern const device_t ps1snd_device;
|
||||
extern const device_t ssi2001_device;
|
||||
extern const device_t entertainer_device;
|
||||
|
||||
/* Mindscape Music Board */
|
||||
extern const device_t mmb_device;
|
||||
|
||||
/* Pro Audio Spectrum Plus, 16, and 16D */
|
||||
extern const device_t pasplus_device;
|
||||
extern const device_t pas16_device;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _TIMER_H_
|
||||
#define _TIMER_H_
|
||||
|
||||
#include "cpu.h"
|
||||
extern uint64_t tsc;
|
||||
|
||||
/* Maximum period, currently 1 second. */
|
||||
#define MAX_USEC64 1000000ULL
|
||||
|
||||
@@ -65,6 +65,7 @@ extern void ui_sb_update_panes(void);
|
||||
extern void ui_sb_update_text(void);
|
||||
extern void ui_sb_update_tip(int meaning);
|
||||
extern void ui_sb_update_icon(int tag, int active);
|
||||
extern void ui_sb_update_icon_write(int tag, int write);
|
||||
extern void ui_sb_update_icon_state(int tag, int state);
|
||||
extern void ui_sb_set_text_w(wchar_t *wstr);
|
||||
extern void ui_sb_set_text(char *str);
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
*
|
||||
* Copyright 2020 Miran Grca.
|
||||
*/
|
||||
#ifndef EMU_VERSION_H
|
||||
#define EMU_VERSION_H
|
||||
|
||||
#define _LSTR(s) L ## s
|
||||
#define LSTR(s) _LSTR(s)
|
||||
@@ -58,3 +60,5 @@
|
||||
# define EMU_DOCS_URL "https://86box.readthedocs.io"
|
||||
#endif
|
||||
#define EMU_DOCS_URL_W LSTR(EMU_DOCS_URL)
|
||||
|
||||
#endif /*EMU_VERSION_H*/
|
||||
|
||||
@@ -18,6 +18,25 @@
|
||||
#ifndef VIDEO_8514A_H
|
||||
#define VIDEO_8514A_H
|
||||
|
||||
#define INT_VSY (1 << 0)
|
||||
#define INT_GE_BSY (1 << 1)
|
||||
#define INT_FIFO_OVR (1 << 2)
|
||||
#define INT_FIFO_EMP (1 << 3)
|
||||
#define INT_MASK 0xf
|
||||
|
||||
typedef enum {
|
||||
IBM_8514A_TYPE = 0,
|
||||
ATI_38800_TYPE,
|
||||
ATI_68800_TYPE,
|
||||
TYPE_MAX
|
||||
} ibm8514_card_type;
|
||||
|
||||
typedef enum {
|
||||
IBM = 0,
|
||||
ATI,
|
||||
EXTENSIONS_MAX
|
||||
} ibm8514_extensions_t;
|
||||
|
||||
typedef struct hwcursor8514_t {
|
||||
int ena;
|
||||
int x;
|
||||
@@ -52,7 +71,7 @@ typedef struct ibm8514_t {
|
||||
|
||||
int force_old_addr;
|
||||
int type;
|
||||
int local;
|
||||
ibm8514_card_type local;
|
||||
int bpp;
|
||||
int on;
|
||||
int accel_bpp;
|
||||
@@ -61,6 +80,7 @@ typedef struct ibm8514_t {
|
||||
uint32_t vram_mask;
|
||||
uint32_t pallook[512];
|
||||
uint32_t bios_addr;
|
||||
uint32_t memaddr_latch;
|
||||
|
||||
PALETTE vgapal;
|
||||
uint8_t hwcursor_oddeven;
|
||||
@@ -83,6 +103,7 @@ typedef struct ibm8514_t {
|
||||
uint16_t subsys_cntl;
|
||||
uint16_t setup_md;
|
||||
uint16_t advfunc_cntl;
|
||||
uint16_t advfunc_cntl_old;
|
||||
uint16_t cur_y;
|
||||
uint16_t cur_x;
|
||||
int16_t destx;
|
||||
@@ -100,8 +121,10 @@ typedef struct ibm8514_t {
|
||||
uint16_t wrt_mask;
|
||||
uint16_t rd_mask;
|
||||
uint16_t color_cmp;
|
||||
uint16_t bkgd_mix;
|
||||
uint16_t frgd_mix;
|
||||
uint8_t bkgd_mix;
|
||||
uint8_t frgd_mix;
|
||||
uint8_t bkgd_sel;
|
||||
uint8_t frgd_sel;
|
||||
uint16_t multifunc_cntl;
|
||||
uint16_t multifunc[16];
|
||||
uint16_t clip_right;
|
||||
@@ -117,6 +140,8 @@ typedef struct ibm8514_t {
|
||||
int y1;
|
||||
int y2;
|
||||
int temp_cnt;
|
||||
int16_t dx_ibm;
|
||||
int16_t dy_ibm;
|
||||
int16_t cx;
|
||||
int16_t cx_back;
|
||||
int16_t cy;
|
||||
@@ -150,6 +175,14 @@ typedef struct ibm8514_t {
|
||||
int ydir;
|
||||
int linedraw;
|
||||
uint32_t ge_offset;
|
||||
uint32_t src_ge_offset;
|
||||
uint32_t dst_ge_offset;
|
||||
uint16_t src_pitch;
|
||||
uint16_t dst_pitch;
|
||||
int64_t cur_x_24bpp;
|
||||
int64_t cur_y_24bpp;
|
||||
int64_t dest_x_24bpp;
|
||||
int64_t dest_y_24bpp;
|
||||
} accel;
|
||||
|
||||
uint16_t test;
|
||||
@@ -187,8 +220,8 @@ typedef struct ibm8514_t {
|
||||
int lastline_draw;
|
||||
int displine;
|
||||
int fullchange;
|
||||
uint32_t ma;
|
||||
uint32_t maback;
|
||||
uint32_t memaddr;
|
||||
uint32_t memaddr_backup;
|
||||
|
||||
uint8_t *vram;
|
||||
uint8_t *changedvram;
|
||||
@@ -203,7 +236,7 @@ typedef struct ibm8514_t {
|
||||
int hdisp;
|
||||
int hdisp2;
|
||||
int hdisped;
|
||||
int sc;
|
||||
int scanline;
|
||||
int vsyncstart;
|
||||
int vsyncwidth;
|
||||
int vtotal;
|
||||
@@ -213,13 +246,12 @@ typedef struct ibm8514_t {
|
||||
int vdisp2;
|
||||
int disp_cntl;
|
||||
int interlace;
|
||||
uint8_t subsys_cntl;
|
||||
uint16_t subsys_cntl;
|
||||
uint8_t subsys_stat;
|
||||
|
||||
atomic_int fifo_idx;
|
||||
atomic_int ext_fifo_idx;
|
||||
atomic_int force_busy;
|
||||
atomic_int force_busy2;
|
||||
atomic_int fifo_idx;
|
||||
|
||||
int blitter_busy;
|
||||
uint64_t blitter_time;
|
||||
@@ -227,14 +259,27 @@ typedef struct ibm8514_t {
|
||||
int pitch;
|
||||
int ext_pitch;
|
||||
int ext_crt_pitch;
|
||||
int extensions;
|
||||
ibm8514_extensions_t extensions;
|
||||
int onboard;
|
||||
int linear;
|
||||
uint32_t vram_amount;
|
||||
int vram_512k_8514;
|
||||
int vendor_mode;
|
||||
int _8514on;
|
||||
int _8514crt;
|
||||
PALETTE _8514pal;
|
||||
|
||||
latch8514_t latch;
|
||||
|
||||
void (*vblank_start)(void *priv);
|
||||
void (*accel_out_fifo)(void *priv, uint16_t port, uint16_t val, int len);
|
||||
void (*update_irqs)(void *priv);
|
||||
|
||||
} ibm8514_t;
|
||||
|
||||
#define IBM_8514A (((dev->local & 0xff) == IBM_8514A_TYPE) && (dev->extensions == IBM))
|
||||
#define ATI_8514A_ULTRA (((dev->local & 0xff) == IBM_8514A_TYPE) && (dev->extensions == ATI))
|
||||
#define ATI_GRAPHICS_ULTRA ((dev->local & 0xff) == ATI_38800_TYPE)
|
||||
#define ATI_MACH32 ((dev->local & 0xff) == ATI_68800_TYPE)
|
||||
|
||||
#endif /*VIDEO_8514A_H*/
|
||||
|
||||
@@ -18,6 +18,12 @@
|
||||
#ifndef VIDEO_ATI_MACH8_H
|
||||
#define VIDEO_ATI_MACH8_H
|
||||
|
||||
typedef enum {
|
||||
ATI_68875 = 0,
|
||||
ATI_68860,
|
||||
RAMDAC_MAX
|
||||
} mach_ramdac_type;
|
||||
|
||||
typedef struct mach_t {
|
||||
ati_eeprom_t eeprom;
|
||||
svga_t svga;
|
||||
@@ -25,6 +31,7 @@ typedef struct mach_t {
|
||||
rom_t bios_rom;
|
||||
rom_t bios_rom2;
|
||||
mem_mapping_t mmio_linear_mapping;
|
||||
mem_mapping_t banked_mapping;
|
||||
|
||||
int mca_bus;
|
||||
int pci_bus;
|
||||
@@ -38,7 +45,7 @@ typedef struct mach_t {
|
||||
uint8_t irq_state;
|
||||
|
||||
int index;
|
||||
int ramdac_type;
|
||||
mach_ramdac_type ramdac_type;
|
||||
int old_mode;
|
||||
|
||||
uint16_t config1;
|
||||
@@ -71,7 +78,14 @@ typedef struct mach_t {
|
||||
uint8_t bank_r;
|
||||
uint16_t shadow_set;
|
||||
uint16_t shadow_cntl;
|
||||
int override_resolution;
|
||||
uint8_t overscan_col_8;
|
||||
uint8_t overscan_b_col_24;
|
||||
uint8_t overscan_g_col_24;
|
||||
uint8_t overscan_r_col_24;
|
||||
uint16_t fifo_test_data[17];
|
||||
uint8_t old_on1;
|
||||
uint8_t old_on2;
|
||||
int crt_resolution;
|
||||
|
||||
struct {
|
||||
uint8_t line_idx;
|
||||
@@ -79,9 +93,9 @@ typedef struct mach_t {
|
||||
uint8_t patt_idx;
|
||||
uint8_t patt_len;
|
||||
uint8_t pix_trans[2];
|
||||
uint8_t eeprom_control;
|
||||
uint8_t alu_bg_fn;
|
||||
uint8_t alu_fg_fn;
|
||||
uint16_t eeprom_control;
|
||||
uint16_t clip_left;
|
||||
uint16_t clip_right;
|
||||
uint16_t clip_top;
|
||||
@@ -97,9 +111,13 @@ typedef struct mach_t {
|
||||
uint16_t clock_sel;
|
||||
uint16_t crt_pitch;
|
||||
uint16_t ge_pitch;
|
||||
uint16_t src_pitch;
|
||||
uint16_t dst_pitch;
|
||||
uint16_t dest_cmp_fn;
|
||||
uint16_t dp_config;
|
||||
uint16_t ext_ge_config;
|
||||
uint16_t crt_offset_lo;
|
||||
uint16_t crt_offset_hi;
|
||||
uint16_t ge_offset_lo;
|
||||
uint16_t ge_offset_hi;
|
||||
uint16_t linedraw_opt;
|
||||
@@ -125,6 +143,7 @@ typedef struct mach_t {
|
||||
int16_t dx_end;
|
||||
int16_t dy;
|
||||
int16_t dy_end;
|
||||
int16_t dx_first_row_start;
|
||||
int16_t dx_start;
|
||||
int16_t dy_start;
|
||||
int16_t cy;
|
||||
@@ -148,17 +167,22 @@ typedef struct mach_t {
|
||||
int src_stepx;
|
||||
uint8_t mono_pattern_normal[16];
|
||||
uint8_t color_pattern[32];
|
||||
uint16_t color_pattern_hicol[8];
|
||||
int mono_pattern[8][8];
|
||||
uint32_t ge_offset;
|
||||
uint32_t src_ge_offset;
|
||||
uint32_t dst_ge_offset;
|
||||
uint32_t crt_offset;
|
||||
uint32_t patt_len_reg;
|
||||
int poly_fill;
|
||||
uint16_t dst_clr_cmp_mask;
|
||||
int clip_overrun;
|
||||
int color_pattern_idx;
|
||||
int64_t src_x_scan;
|
||||
int64_t src_y_scan;
|
||||
} accel;
|
||||
|
||||
atomic_int force_busy;
|
||||
atomic_int fifo_test_idx;
|
||||
} mach_t;
|
||||
|
||||
#endif /*VIDEO_ATI_MACH8_H*/
|
||||
|
||||
@@ -11,20 +11,71 @@
|
||||
*
|
||||
*
|
||||
* Authors: Sarah Walker, <https://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>,
|
||||
* Connor Hyde / starfrost, <mario64crashed@gmail.com>
|
||||
*
|
||||
* Copyright 2008-2018 Sarah Walker.
|
||||
* Copyright 2016-2018 Miran Grca.
|
||||
* Copyright 2025 starfrost (refactoring)
|
||||
*/
|
||||
|
||||
#ifndef VIDEO_CGA_H
|
||||
#define VIDEO_CGA_H
|
||||
|
||||
// Mode flags for the CGA.
|
||||
// Set by writing to 3D8
|
||||
typedef enum cga_mode_flags_e
|
||||
{
|
||||
CGA_MODE_FLAG_HIGHRES = 1 << 0, // 80-column text mode
|
||||
CGA_MODE_FLAG_GRAPHICS = 1 << 1, // Graphics mode
|
||||
CGA_MODE_FLAG_BW = 1 << 2, // Black and white
|
||||
CGA_MODE_FLAG_VIDEO_ENABLE = 1 << 3, // 0 = no video (as if the video was 0)
|
||||
CGA_MODE_FLAG_HIGHRES_GRAPHICS = 1 << 4, // 640*200 mode. Corrupts text mode if CGA_MODE_FLAG_GRAPHICS not set.
|
||||
CGA_MODE_FLAG_BLINK = 1 << 5, // If this is set, bit 5 of textmode characters blinks. Otherwise it is a high-intensity bg mode.
|
||||
} cga_mode_flags;
|
||||
|
||||
// Motorola MC6845 CRTC registers
|
||||
typedef enum cga_crtc_registers_e
|
||||
{
|
||||
CGA_CRTC_HTOTAL = 0x0, // Horizontal total (total number of characters incl. hsync)
|
||||
CGA_CRTC_HDISP = 0x1, // Horizontal display
|
||||
CGA_CRTC_HSYNC_POS = 0x2, // Horizontal position of horizontal ysnc
|
||||
CGA_CRTC_HSYNC_WIDTH = 0x3, // Width of horizontal sync
|
||||
CGA_CRTC_VTOTAL = 0x4, // Vertical total (total number of scanlines incl. vsync)
|
||||
CGA_CRTC_VTOTAL_ADJUST = 0x5, // Vertical total adjust value
|
||||
CGA_CRTC_VDISP = 0x6, // Vertical display (total number of displayed scanline)
|
||||
CGA_CRTC_VSYNC = 0x7, // Vertical sync scanline number
|
||||
CGA_CRTC_INTERLACE = 0x8, // Interlacing mode
|
||||
CGA_CRTC_MAX_SCANLINE_ADDR = 0x9, // Maximum scanline address
|
||||
CGA_CRTC_CURSOR_START = 0xA, // Cursor start scanline
|
||||
CGA_CRTC_CURSOR_END = 0xB, // Cursor end scanline
|
||||
CGA_CRTC_START_ADDR_HIGH = 0xC, // Screen start address high 8 bits
|
||||
CGA_CRTC_START_ADDR_LOW = 0xD, // Screen start address low 8 bits
|
||||
CGA_CRTC_CURSOR_ADDR_HIGH = 0xE, // Cursor address high 8 bits
|
||||
CGA_CRTC_CURSOR_ADDR_LOW = 0xF, // Cursor address low 8 bits
|
||||
CGA_CRTC_LIGHT_PEN_ADDR_HIGH = 0x10, // Light pen address high 8 bits (not currently supported)
|
||||
CGA_CRTC_LIGHT_PEN_ADDR_LOW = 0x11, // Light pen address low 8 bits (not currently supported)
|
||||
} cga_crtc_registers;
|
||||
|
||||
// Registers for the CGA
|
||||
typedef enum cga_registers_e
|
||||
{
|
||||
CGA_REGISTER_CRTC_INDEX = 0x3D4,
|
||||
CGA_REGISTER_CRTC_DATA = 0x3D5,
|
||||
CGA_REGISTER_MODE_CONTROL = 0x3D8,
|
||||
CGA_REGISTER_COLOR_SELECT = 0x3D9,
|
||||
CGA_REGISTER_STATUS = 0x3DA,
|
||||
CGA_REGISTER_CLEAR_LIGHT_PEN_LATCH = 0x3DB,
|
||||
CGA_REGISTER_SET_LIGHT_PEN_LATCH = 0x3DC,
|
||||
} cga_registers;
|
||||
|
||||
#define CGA_NUM_CRTC_REGS 32
|
||||
|
||||
typedef struct cga_t {
|
||||
mem_mapping_t mapping;
|
||||
|
||||
int crtcreg;
|
||||
uint8_t crtc[32];
|
||||
uint8_t crtc[CGA_NUM_CRTC_REGS];
|
||||
|
||||
uint8_t cgastat;
|
||||
|
||||
@@ -36,17 +87,16 @@ typedef struct cga_t {
|
||||
int fontbase;
|
||||
int linepos;
|
||||
int displine;
|
||||
int sc;
|
||||
int scanline;
|
||||
int vc;
|
||||
int cgadispon;
|
||||
int con;
|
||||
int coff;
|
||||
int cursorvisible; // Determines if the cursor is visible FOR THE CURRENT SCANLINE.
|
||||
int cursoron;
|
||||
int cgablink;
|
||||
int vsynctime;
|
||||
int vadj;
|
||||
uint16_t ma;
|
||||
uint16_t maback;
|
||||
uint16_t memaddr;
|
||||
uint16_t memaddr_backup;
|
||||
int oddeven;
|
||||
|
||||
uint64_t dispontime;
|
||||
|
||||
@@ -39,7 +39,7 @@ typedef struct ega_t {
|
||||
uint8_t lb;
|
||||
uint8_t lc;
|
||||
uint8_t ld;
|
||||
uint8_t stat;
|
||||
uint8_t status;
|
||||
uint8_t colourcompare;
|
||||
uint8_t colournocare;
|
||||
uint8_t scrblank;
|
||||
@@ -47,13 +47,12 @@ typedef struct ega_t {
|
||||
uint8_t ctl_mode;
|
||||
uint8_t color_mux;
|
||||
uint8_t dot;
|
||||
uint8_t crtc[32];
|
||||
uint8_t gdcreg[16];
|
||||
uint8_t crtc[256];
|
||||
uint8_t gdcreg[256];
|
||||
uint8_t attrregs[32];
|
||||
uint8_t seqregs[64];
|
||||
uint8_t egapal[16];
|
||||
uint8_t regs[256];
|
||||
|
||||
uint8_t *vram;
|
||||
|
||||
uint16_t light_pen;
|
||||
@@ -69,11 +68,12 @@ typedef struct ega_t {
|
||||
int chain4;
|
||||
int chain2_read;
|
||||
int chain2_write;
|
||||
int con;
|
||||
int cursorvisible;
|
||||
int oddeven_page;
|
||||
int oddeven_chain;
|
||||
int vc;
|
||||
int sc;
|
||||
int real_vc;
|
||||
int scanline;
|
||||
int dispon;
|
||||
int hdisp_on;
|
||||
int cursoron;
|
||||
@@ -113,13 +113,16 @@ typedef struct ega_t {
|
||||
int remap_required;
|
||||
int actual_type;
|
||||
int chipset;
|
||||
int mono_display;
|
||||
|
||||
int mda_attr_to_color_table[256][2][2];
|
||||
|
||||
uint32_t charseta;
|
||||
uint32_t charsetb;
|
||||
uint32_t ma_latch;
|
||||
uint32_t ma;
|
||||
uint32_t maback;
|
||||
uint32_t ca;
|
||||
uint32_t memaddr_latch;
|
||||
uint32_t memaddr;
|
||||
uint32_t memaddr_backup;
|
||||
uint32_t cursoraddr;
|
||||
uint32_t vram_limit;
|
||||
uint32_t overscan_color;
|
||||
uint32_t cca;
|
||||
@@ -140,6 +143,13 @@ typedef struct ega_t {
|
||||
|
||||
uint32_t (*remap_func)(struct ega_t *ega, uint32_t in_addr);
|
||||
void (*render)(struct ega_t *svga);
|
||||
|
||||
/* If set then another device is driving the monitor output and the EGA
|
||||
card should not attempt to display anything. */
|
||||
void (*render_override)(void *priv);
|
||||
void * priv_parent;
|
||||
|
||||
uint8_t alt_addr; /* 0 for 0x3XX range, 1 for 0x2XX range */
|
||||
} ega_t;
|
||||
#endif
|
||||
|
||||
@@ -150,6 +160,8 @@ extern const device_t sega_device;
|
||||
extern const device_t atiega800p_device;
|
||||
extern const device_t iskra_ega_device;
|
||||
extern const device_t et2000_device;
|
||||
extern const device_t jega_device;
|
||||
extern const device_t jvga_device;
|
||||
#endif
|
||||
|
||||
extern int update_overscan;
|
||||
@@ -172,15 +184,16 @@ extern uint8_t ega_in(uint16_t addr, void *priv);
|
||||
extern void ega_poll(void *priv);
|
||||
extern void ega_write(uint32_t addr, uint8_t val, void *priv);
|
||||
extern uint8_t ega_read(uint32_t addr, void *priv);
|
||||
extern void ega_set_type(void *priv, uint32_t local);
|
||||
|
||||
extern int firstline_draw;
|
||||
extern int lastline_draw;
|
||||
extern int displine;
|
||||
extern int sc;
|
||||
extern int scanline;
|
||||
|
||||
extern uint32_t ma;
|
||||
extern uint32_t ca;
|
||||
extern int con;
|
||||
extern uint32_t memaddr;
|
||||
extern uint32_t cursoraddr;
|
||||
extern int cursorvisible;
|
||||
extern int cursoron;
|
||||
extern int cgablink;
|
||||
|
||||
@@ -199,4 +212,19 @@ void ega_render_text(ega_t *ega);
|
||||
void ega_render_graphics(ega_t *ega);
|
||||
#endif
|
||||
|
||||
enum {
|
||||
EGA_IBM = 0,
|
||||
EGA_COMPAQ,
|
||||
EGA_SUPEREGA,
|
||||
EGA_ATI800P,
|
||||
EGA_ISKRA,
|
||||
EGA_TSENG
|
||||
};
|
||||
|
||||
enum {
|
||||
EGA_TYPE_IBM = 0,
|
||||
EGA_TYPE_OTHER = 1,
|
||||
EGA_TYPE_COMPAQ = 2
|
||||
};
|
||||
|
||||
#endif /*VIDEO_EGA_H*/
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
} \
|
||||
\
|
||||
if (nr & VAR_ROW0_MA13) \
|
||||
out_addr = (out_addr & ~0x8000) | ((ega->sc & 1) ? 0x8000 : 0); \
|
||||
out_addr = (out_addr & ~0x8000) | ((ega->scanline & 1) ? 0x8000 : 0); \
|
||||
if (nr & VAR_ROW1_MA14) \
|
||||
out_addr = (out_addr & ~0x10000) | ((ega->sc & 2) ? 0x10000 : 0); \
|
||||
out_addr = (out_addr & ~0x10000) | ((ega->scanline & 2) ? 0x10000 : 0); \
|
||||
\
|
||||
return out_addr; \
|
||||
}
|
||||
|
||||
@@ -13,10 +13,12 @@
|
||||
* Authors: Sarah Walker, <https://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
*
|
||||
* Connor Hyde / starfrost, <mario64crashed@gmail.com
|
||||
*
|
||||
* Copyright 2008-2019 Sarah Walker.
|
||||
* Copyright 2016-2019 Miran Grca.
|
||||
* Copyright 2021 Jasmine Iwanek.
|
||||
* Copyright 2025 starfrost
|
||||
*/
|
||||
|
||||
#ifndef VIDEO_HERCULES_H
|
||||
@@ -31,7 +33,7 @@ typedef struct {
|
||||
|
||||
uint8_t ctrl;
|
||||
uint8_t ctrl2;
|
||||
uint8_t stat;
|
||||
uint8_t status;
|
||||
|
||||
uint64_t dispontime;
|
||||
uint64_t dispofftime;
|
||||
@@ -43,21 +45,20 @@ typedef struct {
|
||||
int linepos;
|
||||
int displine;
|
||||
int vc;
|
||||
int sc;
|
||||
uint16_t ma;
|
||||
uint16_t maback;
|
||||
int con;
|
||||
int coff;
|
||||
int scanline;
|
||||
uint16_t memaddr;
|
||||
uint16_t memaddr_backup;
|
||||
int cursorvisible;
|
||||
int cursoron;
|
||||
int dispon;
|
||||
int blink;
|
||||
int vsynctime;
|
||||
int vadj;
|
||||
|
||||
int lp_ff;
|
||||
int fullchange;
|
||||
int lp_ff;
|
||||
int fullchange;
|
||||
|
||||
int cols[256][2][2];
|
||||
int cols[256][2][2];
|
||||
|
||||
uint8_t *vram;
|
||||
int monitor_index;
|
||||
|
||||
@@ -1,42 +1,123 @@
|
||||
/* Copyright holders: Sarah Walker
|
||||
see COPYING for more details
|
||||
*/
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Emulation of the IBM Monochrome Display and Printer card.
|
||||
*
|
||||
* Authors: Sarah Walker, starfrost
|
||||
*
|
||||
* Copyright 2007-2024 Sarah Walker
|
||||
* Copyright 2025 Connor Hyde / starfrost, <mario64crashed@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef VIDEO_MDA_H
|
||||
#define VIDEO_MDA_H
|
||||
|
||||
// Defines
|
||||
#define MDA_CRTC_NUM_REGISTERS 32
|
||||
|
||||
// Enums & structures
|
||||
|
||||
typedef enum mda_registers_e
|
||||
{
|
||||
MDA_REGISTER_START = 0x3B0,
|
||||
|
||||
MDA_REGISTER_CRTC_INDEX = 0x3B4,
|
||||
MDA_REGISTER_CRTC_DATA = 0x3B5,
|
||||
MDA_REGISTER_MODE_CONTROL = 0x3B8,
|
||||
MDA_REGISTER_CRT_STATUS = 0x3BA,
|
||||
MDA_REGISTER_PARALLEL_DATA = 0x3BC,
|
||||
MDA_REGISTER_PRINTER_STATUS = 0x3BD,
|
||||
MDA_REGISTER_PRINTER_CONTROL = 0x3BE,
|
||||
|
||||
MDA_REGISTER_END = 0x3BF,
|
||||
} mda_registers;
|
||||
|
||||
// Motorola MC6845 CRTC registers (without light pen for some reason)
|
||||
typedef enum mda_crtc_registers_e
|
||||
{
|
||||
MDA_CRTC_HTOTAL = 0x0, // Horizontal total (total number of characters incl. hsync)
|
||||
MDA_CRTC_HDISP = 0x1, // Horizontal display
|
||||
MDA_CRTC_HSYNC_POS = 0x2, // Horizontal position of horizontal ysnc
|
||||
MDA_CRTC_HSYNC_WIDTH = 0x3, // Width of horizontal sync
|
||||
MDA_CRTC_VTOTAL = 0x4, // Vertical total (total number of scanlines incl. vsync)
|
||||
MDA_CRTC_VTOTAL_ADJUST = 0x5, // Vertical total adjust value
|
||||
MDA_CRTC_VDISP = 0x6, // Vertical display (total number of displayed scanline)
|
||||
MDA_CRTC_VSYNC = 0x7, // Vertical sync scanline number
|
||||
MDA_CRTC_INTERLACE = 0x8, // Interlacing mode
|
||||
MDA_CRTC_MAX_SCANLINE_ADDR = 0x9, // Maximum scanline address
|
||||
MDA_CRTC_CURSOR_START = 0xA, // Cursor start scanline
|
||||
MDA_CRTC_CURSOR_END = 0xB, // Cursor end scanline
|
||||
MDA_CRTC_START_ADDR_HIGH = 0xC, // Screen start address high 8 bits
|
||||
MDA_CRTC_START_ADDR_LOW = 0xD, // Screen start address low 8 bits
|
||||
MDA_CRTC_CURSOR_ADDR_HIGH = 0xE, // Cursor address high 8 bits
|
||||
MDA_CRTC_CURSOR_ADDR_LOW = 0xF, // Cursor address low 8 bits
|
||||
} mda_crtc_registers;
|
||||
|
||||
typedef enum mda_mode_flags_e
|
||||
{
|
||||
MDA_MODE_HIGHRES = 1 << 0, // MUST be enabled for sane operation
|
||||
MDA_MODE_BW = 1 << 1, // UNUSED in most cases. Not present on Hercules
|
||||
MDA_MODE_VIDEO_ENABLE = 1 << 3,
|
||||
MDA_MODE_BLINK = 1 << 5,
|
||||
} mda_mode_flags;
|
||||
|
||||
typedef enum mda_colors_e
|
||||
{
|
||||
MDA_COLOR_BLACK = 0,
|
||||
MDA_COLOR_BLUE = 1,
|
||||
MDA_COLOR_GREEN = 2,
|
||||
MDA_COLOR_CYAN = 3,
|
||||
MDA_COLOR_RED = 4,
|
||||
MDA_COLOR_MAGENTA = 5,
|
||||
MDA_COLOR_BROWN = 6,
|
||||
MDA_COLOR_WHITE = 7,
|
||||
MDA_COLOR_GREY = 8,
|
||||
MDA_COLOR_BRIGHT_BLUE = 9,
|
||||
MDA_COLOR_BRIGHT_GREEN = 10,
|
||||
MDA_COLOR_BRIGHT_CYAN = 11,
|
||||
MDA_COLOR_BRIGHT_RED = 12,
|
||||
MDA_COLOR_BRIGHT_MAGENTA = 13,
|
||||
MDA_COLOR_BRIGHT_YELLOW = 14,
|
||||
MDA_COLOR_BRIGHT_WHITE = 15,
|
||||
} mda_colors;
|
||||
|
||||
typedef struct mda_t {
|
||||
mem_mapping_t mapping;
|
||||
|
||||
uint8_t crtc[32];
|
||||
int crtcreg;
|
||||
uint8_t crtc[MDA_CRTC_NUM_REGISTERS];
|
||||
int32_t crtcreg;
|
||||
|
||||
uint8_t ctrl;
|
||||
uint8_t stat;
|
||||
uint8_t mode;
|
||||
uint8_t status;
|
||||
|
||||
uint64_t dispontime;
|
||||
uint64_t dispofftime;
|
||||
pc_timer_t timer;
|
||||
uint64_t dispontime;
|
||||
uint64_t dispofftime;
|
||||
pc_timer_t timer;
|
||||
|
||||
int firstline;
|
||||
int lastline;
|
||||
int32_t firstline;
|
||||
int32_t lastline;
|
||||
|
||||
int fontbase;
|
||||
int linepos;
|
||||
int displine;
|
||||
int vc;
|
||||
int sc;
|
||||
uint16_t ma;
|
||||
uint16_t maback;
|
||||
int con;
|
||||
int coff;
|
||||
int cursoron;
|
||||
int dispon;
|
||||
int blink;
|
||||
int vsynctime;
|
||||
int vadj;
|
||||
int monitor_index;
|
||||
int prev_monitor_index;
|
||||
int32_t fontbase;
|
||||
int32_t linepos;
|
||||
int32_t displine;
|
||||
int32_t vc;
|
||||
int32_t scanline;
|
||||
uint16_t memaddr;
|
||||
uint16_t memaddr_backup;
|
||||
int32_t cursorvisible;
|
||||
int32_t cursoron;
|
||||
int32_t dispon;
|
||||
int32_t blink;
|
||||
int32_t vsynctime;
|
||||
int32_t vadj;
|
||||
int32_t monitor_index;
|
||||
int32_t prev_monitor_index;
|
||||
int32_t monitor_type; // Used for MDA Colour support (REV0 u64)
|
||||
|
||||
uint8_t *vram;
|
||||
} mda_t;
|
||||
|
||||
@@ -115,14 +115,13 @@ typedef struct pgc {
|
||||
int displine;
|
||||
int vc;
|
||||
int cgadispon;
|
||||
int con;
|
||||
int coff;
|
||||
int cursorvisible;
|
||||
int cursoron;
|
||||
int cgablink;
|
||||
int vsynctime;
|
||||
int vadj;
|
||||
uint16_t ma;
|
||||
uint16_t maback;
|
||||
uint16_t memaddr;
|
||||
uint16_t memaddr_backup;
|
||||
int oddeven;
|
||||
|
||||
uint64_t dispontime;
|
||||
|
||||
24
src/include/86box/vid_ps55da2.h
Normal file
24
src/include/86box/vid_ps55da2.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* IBM PS/55 Display Adapter II emulation.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Akamaki.
|
||||
*
|
||||
* Copyright 2024 Akamaki.
|
||||
*/
|
||||
|
||||
#ifndef VIDEO_DA2_DEVICE_H
|
||||
#define VIDEO_DA2_DEVICE_H
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ps55da2_device;
|
||||
#endif
|
||||
#endif /*VIDEO_DA2_DEVICE_H*/
|
||||
@@ -100,12 +100,12 @@ typedef struct svga_t {
|
||||
int dispon;
|
||||
int hdisp_on;
|
||||
int vc;
|
||||
int sc;
|
||||
int scanline;
|
||||
int linepos;
|
||||
int vslines;
|
||||
int linecountff;
|
||||
int oddeven;
|
||||
int con;
|
||||
int cursorvisible;
|
||||
int cursoron;
|
||||
int blink;
|
||||
int scrollcache;
|
||||
@@ -116,6 +116,7 @@ typedef struct svga_t {
|
||||
int lastline_draw;
|
||||
int displine;
|
||||
int fullchange;
|
||||
int left_overscan;
|
||||
int x_add;
|
||||
int y_add;
|
||||
int pan;
|
||||
@@ -135,6 +136,7 @@ typedef struct svga_t {
|
||||
int packed_4bpp;
|
||||
int ps_bit_bug;
|
||||
int ati_4color;
|
||||
int vblankend;
|
||||
|
||||
/*The three variables below allow us to implement memory maps like that seen on a 1MB Trio64 :
|
||||
0MB-1MB - VRAM
|
||||
@@ -151,15 +153,15 @@ typedef struct svga_t {
|
||||
uint32_t charseta;
|
||||
uint32_t charsetb;
|
||||
uint32_t adv_flags;
|
||||
uint32_t ma_latch;
|
||||
uint32_t memaddr_latch;
|
||||
uint32_t ca_adj;
|
||||
uint32_t ma;
|
||||
uint32_t maback;
|
||||
uint32_t memaddr;
|
||||
uint32_t memaddr_backup;
|
||||
uint32_t write_bank;
|
||||
uint32_t read_bank;
|
||||
uint32_t extra_banks[2];
|
||||
uint32_t banked_mask;
|
||||
uint32_t ca;
|
||||
uint32_t cursoraddr;
|
||||
uint32_t overscan_color;
|
||||
uint32_t *map8;
|
||||
uint32_t pallook[512];
|
||||
@@ -171,11 +173,11 @@ typedef struct svga_t {
|
||||
latch_t latch;
|
||||
|
||||
pc_timer_t timer;
|
||||
pc_timer_t timer8514;
|
||||
pc_timer_t timer_8514;
|
||||
pc_timer_t timer_xga;
|
||||
|
||||
double clock;
|
||||
double clock8514;
|
||||
double clock_8514;
|
||||
double clock_xga;
|
||||
|
||||
double multiplier;
|
||||
@@ -189,6 +191,7 @@ typedef struct svga_t {
|
||||
|
||||
void (*render)(struct svga_t *svga);
|
||||
void (*render8514)(struct svga_t *svga);
|
||||
void (*render_xga)(struct svga_t *svga);
|
||||
void (*recalctimings_ex)(struct svga_t *svga);
|
||||
|
||||
void (*video_out)(uint16_t addr, uint8_t val, void *priv);
|
||||
@@ -202,6 +205,14 @@ typedef struct svga_t {
|
||||
|
||||
void (*vblank_start)(struct svga_t *svga);
|
||||
|
||||
void (*write)(uint32_t addr, uint8_t val, void *priv);
|
||||
void (*writew)(uint32_t addr, uint16_t val, void *priv);
|
||||
void (*writel)(uint32_t addr, uint32_t val, void *priv);
|
||||
|
||||
uint8_t (*read)(uint32_t addr, void *priv);
|
||||
uint16_t (*readw)(uint32_t addr, void *priv);
|
||||
uint32_t (*readl)(uint32_t addr, void *priv);
|
||||
|
||||
void (*ven_write)(struct svga_t *svga, uint8_t val, uint32_t addr);
|
||||
float (*getclock)(int clock, void *priv);
|
||||
float (*getclock8514)(int clock, void *priv);
|
||||
@@ -220,6 +231,11 @@ typedef struct svga_t {
|
||||
int override;
|
||||
void *priv;
|
||||
|
||||
int vga_enabled;
|
||||
/* The PS/55 POST BIOS has a special monitor detection for its internal VGA
|
||||
when the monitor is connected to the Display Adapter. */
|
||||
int cable_connected;
|
||||
|
||||
uint8_t crtc[256];
|
||||
uint8_t gdcreg[256];
|
||||
uint8_t attrregs[32];
|
||||
@@ -296,8 +312,16 @@ typedef struct svga_t {
|
||||
void * ext8514;
|
||||
void * clock_gen8514;
|
||||
void * xga;
|
||||
|
||||
/* If set then another device is driving the monitor output and the EGA
|
||||
card should not attempt to display anything. */
|
||||
void (*render_override)(void *priv);
|
||||
void * priv_parent;
|
||||
|
||||
void * local;
|
||||
} svga_t;
|
||||
|
||||
extern void ibm8514_set_poll(svga_t *svga);
|
||||
extern void ibm8514_poll(void *priv);
|
||||
extern void ibm8514_recalctimings(svga_t *svga);
|
||||
extern uint8_t ibm8514_ramdac_in(uint16_t port, void *priv);
|
||||
@@ -320,10 +344,11 @@ extern void ati8514_mca_write(int port, uint8_t val, void *priv);
|
||||
extern void ati8514_pos_write(uint16_t port, uint8_t val, void *priv);
|
||||
extern void ati8514_init(svga_t *svga, void *ext8514, void *dev8514);
|
||||
|
||||
extern void xga_write_test(uint32_t addr, uint8_t val, void *priv);
|
||||
extern uint8_t xga_read_test(uint32_t addr, void *priv);
|
||||
extern void xga_poll(void *priv);
|
||||
extern void xga_recalctimings(svga_t *svga);
|
||||
extern void xga_write_test(uint32_t addr, uint8_t val, void *priv);
|
||||
extern uint8_t xga_read_test(uint32_t addr, void *priv);
|
||||
extern void xga_set_poll(svga_t *svga);
|
||||
extern void xga_poll(void *priv);
|
||||
extern void xga_recalctimings(svga_t *svga);
|
||||
|
||||
extern uint32_t svga_decode_addr(svga_t *svga, uint32_t addr, int write);
|
||||
|
||||
@@ -368,6 +393,7 @@ uint32_t svga_mask_addr(uint32_t addr, svga_t *svga);
|
||||
uint32_t svga_mask_changedaddr(uint32_t addr, svga_t *svga);
|
||||
|
||||
void svga_doblit(int wx, int wy, svga_t *svga);
|
||||
void svga_set_poll(svga_t *svga);
|
||||
void svga_poll(void *priv);
|
||||
|
||||
enum {
|
||||
@@ -379,15 +405,15 @@ uint32_t svga_lookup_lut_ram(svga_t* svga, uint32_t val);
|
||||
|
||||
/* We need a way to add a device with a pointer to a parent device so it can attach itself to it, and
|
||||
possibly also a second ATi 68860 RAM DAC type that auto-sets SVGA render on RAM DAC render change. */
|
||||
extern void ati68860_ramdac_out(uint16_t addr, uint8_t val, void *priv, svga_t *svga);
|
||||
extern uint8_t ati68860_ramdac_in(uint16_t addr, void *priv, svga_t *svga);
|
||||
extern void ati68860_ramdac_out(uint16_t addr, uint8_t val, int is_8514, void *priv, svga_t *svga);
|
||||
extern uint8_t ati68860_ramdac_in(uint16_t addr, int is_8514, void *priv, svga_t *svga);
|
||||
extern void ati68860_set_ramdac_type(void *priv, int type);
|
||||
extern void ati68860_ramdac_set_render(void *priv, svga_t *svga);
|
||||
extern void ati68860_ramdac_set_pallook(void *priv, int i, uint32_t col);
|
||||
extern void ati68860_hwcursor_draw(svga_t *svga, int displine);
|
||||
|
||||
extern void ati68875_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *priv, svga_t *svga);
|
||||
extern uint8_t ati68875_ramdac_in(uint16_t addr, int rs2, int rs3, void *priv, svga_t *svga);
|
||||
extern void ati68875_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, int is_8514, void *priv, svga_t *svga);
|
||||
extern uint8_t ati68875_ramdac_in(uint16_t addr, int rs2, int rs3, int is_8514, void *priv, svga_t *svga);
|
||||
|
||||
extern void att49x_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *priv, svga_t *svga);
|
||||
extern uint8_t att49x_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t *svga);
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
extern int firstline_draw;
|
||||
extern int lastline_draw;
|
||||
extern int displine;
|
||||
extern int sc;
|
||||
extern int scanline;
|
||||
|
||||
extern uint32_t ma;
|
||||
extern uint32_t ca;
|
||||
extern int con;
|
||||
extern uint32_t memaddr;
|
||||
extern uint32_t cursoraddr;
|
||||
extern int cursorvisible;
|
||||
extern int cursoron;
|
||||
extern int cgablink;
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
} \
|
||||
\
|
||||
if (nr & VAR_ROW0_MA13) \
|
||||
out_addr = (out_addr & ~0x8000) | ((svga->sc & 1) ? 0x8000 : 0); \
|
||||
out_addr = (out_addr & ~0x8000) | ((svga->scanline & 1) ? 0x8000 : 0); \
|
||||
if (nr & VAR_ROW1_MA14) \
|
||||
out_addr = (out_addr & ~0x10000) | ((svga->sc & 2) ? 0x10000 : 0); \
|
||||
out_addr = (out_addr & ~0x10000) | ((svga->scanline & 2) ? 0x10000 : 0); \
|
||||
\
|
||||
return out_addr; \
|
||||
}
|
||||
|
||||
@@ -25,10 +25,19 @@
|
||||
typedef struct vga_t {
|
||||
svga_t svga;
|
||||
|
||||
rom_t bios_rom;
|
||||
rom_t bios_rom;
|
||||
} vga_t;
|
||||
|
||||
extern void vga_out(uint16_t addr, uint8_t val, void *priv);
|
||||
extern void vga_out(uint16_t addr, uint8_t val, void *priv);
|
||||
extern uint8_t vga_in(uint16_t addr, void *priv);
|
||||
|
||||
extern void vga_init(const device_t *info, vga_t *vga, int enabled);
|
||||
|
||||
extern void vga_disable(void* p);
|
||||
extern void vga_enable(void* p);
|
||||
|
||||
extern int vga_isenabled(void* p);
|
||||
|
||||
extern video_timings_t timing_vga;
|
||||
|
||||
#endif /*VIDEO_VGA_H*/
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#ifndef VIDEO_VOODOO_BANSHEE_H
|
||||
#define VIDEO_VOODOO_BANSHEE_H
|
||||
|
||||
void banshee_cmd_write(void *priv, uint32_t addr, uint32_t val);
|
||||
void banshee_set_overlay_addr(void *priv, uint32_t addr);
|
||||
|
||||
#endif /*VIDEO_VOODOO_BANSHEE_H*/
|
||||
|
||||
@@ -420,6 +420,7 @@ typedef struct voodoo_t {
|
||||
int cmdfifo_rp;
|
||||
int cmdfifo_ret_addr;
|
||||
int cmdfifo_in_sub;
|
||||
int cmdfifo_in_agp;
|
||||
atomic_int cmdfifo_depth_rd;
|
||||
atomic_int cmdfifo_depth_wr;
|
||||
atomic_int cmdfifo_enabled;
|
||||
@@ -433,6 +434,7 @@ typedef struct voodoo_t {
|
||||
int cmdfifo_rp_2;
|
||||
int cmdfifo_ret_addr_2;
|
||||
int cmdfifo_in_sub_2;
|
||||
int cmdfifo_in_agp_2;
|
||||
atomic_int cmdfifo_depth_rd_2;
|
||||
atomic_int cmdfifo_depth_wr_2;
|
||||
atomic_int cmdfifo_enabled_2;
|
||||
|
||||
@@ -127,7 +127,7 @@ typedef struct xga_t {
|
||||
int dispon;
|
||||
int h_disp_on;
|
||||
int vc;
|
||||
int sc;
|
||||
int scanline;
|
||||
int linepos;
|
||||
int oddeven;
|
||||
int firstline;
|
||||
@@ -160,12 +160,12 @@ typedef struct xga_t {
|
||||
uint32_t hwc_color0;
|
||||
uint32_t hwc_color1;
|
||||
uint32_t disp_start_addr;
|
||||
uint32_t ma_latch;
|
||||
uint32_t memaddr_latch;
|
||||
uint32_t vram_size;
|
||||
uint32_t vram_mask;
|
||||
uint32_t rom_addr;
|
||||
uint32_t ma;
|
||||
uint32_t maback;
|
||||
uint32_t memaddr;
|
||||
uint32_t memaddr_backup;
|
||||
uint32_t read_bank;
|
||||
uint32_t write_bank;
|
||||
uint32_t px_map_base;
|
||||
@@ -240,8 +240,6 @@ typedef struct xga_t {
|
||||
uint16_t px_map_height[4];
|
||||
uint32_t px_map_base[4];
|
||||
} accel;
|
||||
|
||||
int big_endian_linear;
|
||||
} xga_t;
|
||||
|
||||
#endif /*VIDEO_XGA_H*/
|
||||
|
||||
@@ -36,6 +36,10 @@ using atomic_int = std::atomic_int;
|
||||
#define getcolg(color) (((color) >> 8) & 0xFF)
|
||||
#define getcolb(color) ((color) & 0xFF)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum {
|
||||
VID_NONE = 0,
|
||||
VID_INTERNAL
|
||||
@@ -49,10 +53,6 @@ enum {
|
||||
FULLSCR_SCALE_INT43
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum {
|
||||
VIDEO_ISA = 0,
|
||||
VIDEO_MCA,
|
||||
@@ -69,6 +69,14 @@ enum {
|
||||
#define VIDEO_FLAG_TYPE_NONE 5
|
||||
#define VIDEO_FLAG_TYPE_MASK 7
|
||||
|
||||
#define VIDEO_FLAG_TYPE_SECONDARY VIDEO_FLAG_TYPE_SPECIAL
|
||||
|
||||
#define FONT_IBM_MDA_437_PATH "roms/video/mda/mda.rom"
|
||||
#define FONT_IBM_MDA_437_NORDIC_PATH "roms/video/mda/4733197.bin"
|
||||
#define FONT_KAM_PATH "roms/video/mda/kam.bin"
|
||||
#define FONT_KAMCL16_PATH "roms/video/mda/kamcl16.bin"
|
||||
#define FONT_TULIP_DGA_PATH "roms/video/mda/tulip-dga-bios.bin"
|
||||
|
||||
typedef struct video_timings_t {
|
||||
int type;
|
||||
int write_b;
|
||||
@@ -180,6 +188,10 @@ extern bitmap_t *buffer32;
|
||||
#define efscrnsz_y (monitors[monitor_index_global].mon_efscrnsz_y)
|
||||
#define unscaled_size_x (monitors[monitor_index_global].mon_unscaled_size_x)
|
||||
#define unscaled_size_y (monitors[monitor_index_global].mon_unscaled_size_y)
|
||||
|
||||
#define CGAPAL_CGA_START 16 // Where the 16-color cga text/composite starts
|
||||
|
||||
|
||||
extern PALETTE cgapal;
|
||||
extern PALETTE cgapal_mono[6];
|
||||
#if 0
|
||||
@@ -187,16 +199,15 @@ extern uint32_t pal_lookup[256];
|
||||
#endif
|
||||
extern int video_fullscreen;
|
||||
extern int video_fullscreen_scale;
|
||||
extern int video_fullscreen_first;
|
||||
extern uint8_t fontdat[2048][8];
|
||||
extern uint8_t fontdatm[2048][16];
|
||||
extern uint8_t fontdat2[2048][8];
|
||||
extern uint8_t fontdatm2[2048][16];
|
||||
extern uint8_t fontdatw[512][32];
|
||||
extern uint8_t fontdat8x12[256][16];
|
||||
extern uint8_t fontdat12x18[256][36];
|
||||
extern dbcs_font_t *fontdatksc5601;
|
||||
extern dbcs_font_t *fontdatksc5601_user;
|
||||
extern uint8_t fontdat[2048][8]; /* IBM CGA font */
|
||||
extern uint8_t fontdatm[2048][16]; /* IBM MDA font */
|
||||
extern uint8_t fontdat2[2048][8]; /* IBM CGA 2nd instance font */
|
||||
extern uint8_t fontdatm2[2048][16]; /* IBM MDA 2nd instance font */
|
||||
extern uint8_t fontdatw[512][32]; /* Wyse700 font */
|
||||
extern uint8_t fontdat8x12[256][16]; /* MDSI Genius font */
|
||||
extern uint8_t fontdat12x18[256][36]; /* IM1024 font */
|
||||
extern dbcs_font_t *fontdatksc5601; /* Korean KSC-5601 font */
|
||||
extern dbcs_font_t *fontdatksc5601_user; /* Korean KSC-5601 user defined font */
|
||||
extern uint32_t *video_6to8;
|
||||
extern uint32_t *video_8togs;
|
||||
extern uint32_t *video_8to32;
|
||||
@@ -276,8 +287,8 @@ extern uint8_t video_force_resize_get_monitor(int monitor_index);
|
||||
extern void video_force_resize_set_monitor(uint8_t res, int monitor_index);
|
||||
extern void video_update_timing(void);
|
||||
|
||||
extern void loadfont_ex(char *s, int format, int offset);
|
||||
extern void loadfont(char *s, int format);
|
||||
extern void loadfont_ex(char *fn, int format, int offset);
|
||||
extern void loadfont(char *fn, int format);
|
||||
|
||||
extern int get_actual_size_x(void);
|
||||
extern int get_actual_size_y(void);
|
||||
@@ -313,6 +324,9 @@ extern const device_t mach32_mca_device;
|
||||
extern const device_t mach32_pci_device;
|
||||
extern const device_t mach32_onboard_pci_device;
|
||||
|
||||
/* IBM Display Adapter (PS/55) */
|
||||
extern void da2_device_add(void);
|
||||
|
||||
/* ATi Mach64 */
|
||||
extern const device_t mach64gx_isa_device;
|
||||
extern const device_t mach64gx_vlb_device;
|
||||
@@ -347,8 +361,10 @@ extern const device_t gd5401_isa_device;
|
||||
extern const device_t gd5402_isa_device;
|
||||
extern const device_t gd5402_onboard_device;
|
||||
extern const device_t gd5420_isa_device;
|
||||
extern const device_t gd5420_onboard_device;
|
||||
extern const device_t gd5422_isa_device;
|
||||
extern const device_t gd5424_vlb_device;
|
||||
extern const device_t gd5424_onboard_device;
|
||||
extern const device_t gd5426_isa_device;
|
||||
extern const device_t gd5426_diamond_speedstar_pro_a1_isa_device;
|
||||
extern const device_t gd5426_vlb_device;
|
||||
@@ -361,6 +377,7 @@ extern const device_t gd5428_boca_isa_device;
|
||||
extern const device_t gd5428_mca_device;
|
||||
extern const device_t gd5426_mca_device;
|
||||
extern const device_t gd5428_onboard_device;
|
||||
extern const device_t gd5428_onboard_vlb_device;
|
||||
extern const device_t gd5429_isa_device;
|
||||
extern const device_t gd5429_vlb_device;
|
||||
extern const device_t gd5430_diamond_speedstar_pro_se_a8_vlb_device;
|
||||
@@ -384,6 +401,7 @@ extern const device_t gd5480_pci_device;
|
||||
/* Compaq CGA */
|
||||
extern const device_t compaq_cga_device;
|
||||
extern const device_t compaq_cga_2_device;
|
||||
extern const device_t compaq_plasma_device;
|
||||
|
||||
/* Olivetti OGC */
|
||||
extern const device_t ogc_device;
|
||||
@@ -451,8 +469,12 @@ extern const device_t millennium_ii_device;
|
||||
extern const device_t productiva_g100_device;
|
||||
#endif /* USE_G100 */
|
||||
|
||||
/* JEGA */
|
||||
extern const device_t if386jega_device;
|
||||
|
||||
/* Oak OTI-0x7 */
|
||||
extern const device_t oti037c_device;
|
||||
extern const device_t oti037_pbl300sx_device;
|
||||
extern const device_t oti067_device;
|
||||
extern const device_t oti067_acer386_device;
|
||||
extern const device_t oti067_ama932j_device;
|
||||
@@ -480,6 +502,7 @@ extern const device_t s3_metheus_86c928_isa_device;
|
||||
extern const device_t s3_metheus_86c928_vlb_device;
|
||||
extern const device_t s3_spea_mercury_lite_86c928_pci_device;
|
||||
extern const device_t s3_spea_mirage_86c801_isa_device;
|
||||
extern const device_t s3_winner1000_805_isa_device;
|
||||
extern const device_t s3_86c805_onboard_vlb_device;
|
||||
extern const device_t s3_spea_mirage_86c805_vlb_device;
|
||||
extern const device_t s3_mirocrystal_8s_805_vlb_device;
|
||||
@@ -575,6 +598,7 @@ extern const device_t ps1vga_mca_device;
|
||||
extern const device_t voodoo_device;
|
||||
extern const device_t voodoo_banshee_device;
|
||||
extern const device_t creative_voodoo_banshee_device;
|
||||
extern const device_t quantum3d_raven_device;
|
||||
extern const device_t voodoo_3_1000_device;
|
||||
extern const device_t voodoo_3_1000_agp_device;
|
||||
extern const device_t voodoo_3_2000_device;
|
||||
@@ -593,6 +617,11 @@ extern const device_t velocity_200_agp_device;
|
||||
/* Wyse 700 */
|
||||
extern const device_t wy700_device;
|
||||
|
||||
/* Tandy */
|
||||
extern const device_t tandy_1000_video_device;
|
||||
extern const device_t tandy_1000hx_video_device;
|
||||
extern const device_t tandy_1000sl_video_device;
|
||||
|
||||
#endif
|
||||
|
||||
#endif /*EMU_VIDEO_H*/
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2018-2019 Miran Grca.
|
||||
* Copyright 2018-2025 Miran Grca.
|
||||
*/
|
||||
|
||||
#ifndef EMU_ZIP_H
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
#define ZIP_250_SECTORS (489532)
|
||||
|
||||
#define ZIP_IMAGE_HISTORY 4
|
||||
#define ZIP_IMAGE_HISTORY 10
|
||||
|
||||
enum {
|
||||
ZIP_BUS_DISABLED = 0,
|
||||
@@ -39,76 +39,80 @@ enum {
|
||||
};
|
||||
|
||||
typedef struct zip_drive_t {
|
||||
uint8_t id;
|
||||
uint8_t id;
|
||||
|
||||
union {
|
||||
uint8_t res;
|
||||
uint8_t res0; /* Reserved for other ID's. */
|
||||
uint8_t res1;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_device_id;
|
||||
uint8_t res;
|
||||
/* Reserved for other ID's. */
|
||||
uint8_t res0;
|
||||
uint8_t res1;
|
||||
uint8_t ide_channel;
|
||||
uint8_t scsi_device_id;
|
||||
};
|
||||
|
||||
uint8_t bus_type; /* 0 = ATAPI, 1 = SCSI */
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t read_only; /* Struct variable reserved for
|
||||
media status. */
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
uint8_t bus_type; /* 0 = ATAPI, 1 = SCSI */
|
||||
uint8_t bus_mode; /* Bit 0 = PIO suported;
|
||||
Bit 1 = DMA supportd. */
|
||||
uint8_t read_only; /* Struct variable reserved for
|
||||
media status. */
|
||||
uint8_t pad;
|
||||
uint8_t pad0;
|
||||
|
||||
FILE *fp;
|
||||
void *priv;
|
||||
FILE *fp;
|
||||
void *priv;
|
||||
|
||||
char image_path[1024];
|
||||
char prev_image_path[1024];
|
||||
char image_path[1024];
|
||||
char prev_image_path[1024];
|
||||
|
||||
char *image_history[ZIP_IMAGE_HISTORY];
|
||||
char *image_history[ZIP_IMAGE_HISTORY];
|
||||
|
||||
uint32_t is_250;
|
||||
uint32_t medium_size;
|
||||
uint32_t base;
|
||||
uint32_t is_250;
|
||||
uint32_t medium_size;
|
||||
uint32_t base;
|
||||
} zip_drive_t;
|
||||
|
||||
typedef struct zip_t {
|
||||
mode_sense_pages_t ms_pages_saved;
|
||||
|
||||
zip_drive_t *drv;
|
||||
zip_drive_t *drv;
|
||||
#ifdef EMU_IDE_H
|
||||
ide_tf_t * tf;
|
||||
ide_tf_t *tf;
|
||||
#else
|
||||
void * tf;
|
||||
void *tf;
|
||||
#endif
|
||||
|
||||
uint8_t *buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
void *log;
|
||||
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
uint8_t *buffer;
|
||||
uint8_t atapi_cdb[16];
|
||||
uint8_t current_cdb[16];
|
||||
uint8_t sense[256];
|
||||
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
uint8_t id;
|
||||
uint8_t cur_lun;
|
||||
uint8_t pad0;
|
||||
uint8_t pad1;
|
||||
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int old_len;
|
||||
int pad3;
|
||||
uint16_t max_transfer_len;
|
||||
uint16_t pad2;
|
||||
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
int requested_blocks;
|
||||
int packet_status;
|
||||
int total_length;
|
||||
int do_page_save;
|
||||
int unit_attention;
|
||||
int request_pos;
|
||||
int old_len;
|
||||
int transition;
|
||||
|
||||
double callback;
|
||||
uint32_t sector_pos;
|
||||
uint32_t sector_len;
|
||||
uint32_t packet_len;
|
||||
uint32_t block_len;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
double callback;
|
||||
|
||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||
} zip_t;
|
||||
|
||||
extern zip_t *zip[ZIP_NUM];
|
||||
@@ -118,6 +122,7 @@ extern uint8_t scsi_zip_drives[16];
|
||||
|
||||
#define zip_sense_error dev->sense[0]
|
||||
#define zip_sense_key dev->sense[2]
|
||||
#define zip_info *(uint32_t *) &(dev->sense[3])
|
||||
#define zip_asc dev->sense[12]
|
||||
#define zip_ascq dev->sense[13]
|
||||
|
||||
@@ -125,15 +130,16 @@ extern uint8_t scsi_zip_drives[16];
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void zip_disk_close(zip_t *dev);
|
||||
extern void zip_disk_reload(zip_t *dev);
|
||||
extern void zip_disk_close(const zip_t *dev);
|
||||
extern void zip_disk_reload(const zip_t *dev);
|
||||
extern void zip_insert(zip_t *dev);
|
||||
|
||||
extern void zip_global_init(void);
|
||||
extern void zip_hard_reset(void);
|
||||
|
||||
extern void zip_reset(scsi_common_t *sc);
|
||||
extern int zip_load(zip_t *dev, char *fn);
|
||||
extern int zip_is_empty(const uint8_t id);
|
||||
extern void zip_load(const zip_t *dev, const char *fn, const int skip_insert);
|
||||
extern void zip_close(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user