Merge branch 'master' of ssh://github.com/86Box/86Box into cleanup30

This commit is contained in:
RichardG867
2022-07-12 20:07:19 -03:00
130 changed files with 2377 additions and 224122 deletions

View File

@@ -80,9 +80,11 @@ extern char log_path[1024]; /* (O) full path of logfile */
extern char vm_name[1024]; /* (O) display name of the VM */
extern int window_w, window_h, /* (C) window size and */
window_x, window_y, /* position info */
window_remember,
#define window_x monitor_settings[0].mon_window_x
#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 window_remember,
vid_resize, /* (C) allow resizing */
invert_display, /* (C) invert the display */
suppress_overscan; /* (C) suppress overscans */
@@ -141,9 +143,6 @@ extern char cfg_path[1024]; /* full path of config file */
#ifndef USE_NEW_DYNAREC
extern FILE *stdlog; /* file to log output to */
#endif
extern int scrnsz_x, /* current screen size, X */
scrnsz_y; /* current screen size, Y */
extern int efscrnsz_y;
extern int config_changed; /* config has changed */
@@ -156,7 +155,9 @@ extern void pclog_toggle_suppr(void);
extern void pclog(const char *fmt, ...);
extern void fatal(const char *fmt, ...);
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);
extern void reset_screen_size_monitor(int monitor_index);
extern void set_screen_size_natural(void);
extern void update_mouse_msg();
#if 0

View File

@@ -49,7 +49,7 @@ typedef struct ide_s {
blocksize, blockcount,
hdd_num, channel,
pos, sector_pos,
lba, skip512,
lba,
reset, mdma_mode,
do_initial_read;
uint32_t secount, sector,
@@ -67,6 +67,7 @@ typedef struct ide_s {
/* Stuff mostly used by ATAPI */
scsi_common_t *sc;
int interrupt_drq;
double pending_delay;
int (*get_max)(int ide_has_dma, int type);
int (*get_timings)(int ide_has_dma, int type);

View File

@@ -72,6 +72,62 @@ enum {
};
#endif
enum {
HDD_OP_SEEK = 0,
HDD_OP_READ,
HDD_OP_WRITE
};
#define HDD_MAX_ZONES 16
#define HDD_MAX_CACHE_SEG 16
typedef struct {
uint32_t match_max_mbyte;
uint32_t zones;
uint32_t avg_spt;
uint32_t heads;
uint32_t rpm;
uint32_t target_year;
uint32_t rcache_num_seg;
uint32_t rcache_seg_size;
uint32_t max_multiple;
double full_stroke_ms;
double track_seek_ms;
} hdd_preset_t;
typedef struct {
uint32_t id;
uint32_t lba_addr;
uint32_t ra_addr;
uint32_t host_addr;
uint8_t lru;
uint8_t valid;
} hdd_cache_seg_t;
typedef struct {
// Read cache
hdd_cache_seg_t segments[HDD_MAX_CACHE_SEG];
uint32_t num_segments;
uint32_t segment_size;
uint32_t ra_segment;
uint8_t ra_ongoing;
uint64_t ra_start_time;
// Write cache
uint32_t write_addr;
uint32_t write_pending;
uint32_t write_size;
uint64_t write_start_time;
} hdd_cache_t;
typedef struct {
uint32_t cylinders;
uint32_t sectors_per_track;
double sector_time_usec;
uint32_t start_sector;
uint32_t end_sector;
uint32_t start_track;
} hdd_zone_t;
/* Define the virtual Hard Disk. */
typedef struct {
@@ -100,6 +156,23 @@ typedef struct {
spt,
hpc, /* Physical geometry parameters */
tracks;
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 cur_cylinder;
uint32_t cur_track;
uint32_t cur_addr;
double avg_rotation_lat_usec;
double full_stroke_usec;
double head_switch_usec;
double cyl_switch_usec;
} hard_disk_t;
@@ -131,5 +204,10 @@ extern int image_is_hdi(const char *s);
extern int image_is_hdx(const char *s, int check_signature);
extern int image_is_vhd(const char *s, int check_signature);
extern double hdd_timing_write(hard_disk_t *hdd, uint32_t addr, uint32_t len);
extern double hdd_timing_read(hard_disk_t *hdd, uint32_t addr, uint32_t len);
extern double hdd_seek_get_time(hard_disk_t *hdd, uint32_t dst_addr, uint8_t operation, uint8_t continuous, double max_seek_time);
extern void hdd_preset_apply(hard_disk_t *hdd, hdd_preset_t *preset);
extern void hdd_preset_auto(hard_disk_t *hdd);
#endif /*EMU_HDD_H*/

View File

@@ -627,6 +627,7 @@ extern int machine_at_an430tx_init(const machine_t *);
#endif
extern int machine_at_ym430tx_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 *);
extern int machine_at_ficva502_init(const machine_t *);

View File

@@ -21,6 +21,8 @@
#ifndef EMU_PLAT_H
# define EMU_PLAT_H
#include <stdint.h>
#include <stdio.h>
#include "86box/device.h"
#include "86box/machine.h"
#ifndef GLOBAL
@@ -77,7 +79,6 @@ extern "C" {
/* Global variables residing in the platform module. */
extern int dopause, /* system is paused */
mouse_capture; /* mouse is captured in app */
extern atomic_flag_t doresize; /* screen resize requested */
extern volatile int is_quit; /* system exit requested */
#ifdef MTR_ENABLED
@@ -90,9 +91,6 @@ extern char emu_version[200]; /* version ID string */
extern int rctrl_is_lalt;
extern int update_icons;
extern int unscaled_size_x, /* current unscaled size X */
unscaled_size_y; /* current unscaled size Y */
extern int kbd_req_capture, hide_status_bar, hide_tool_bar;
/* System-related functions. */
@@ -120,7 +118,9 @@ extern char *plat_vidapi_name(int api);
extern int plat_setvid(int api);
extern void plat_vidsize(int x, int y);
extern void plat_setfullscreen(int on);
extern void plat_resize(int x, int y);
extern void plat_resize_monitor(int x, int y, int monitor_index);
extern void plat_resize_request(int x, int y, int monitor_index);
extern void plat_resize(int x, int y);
extern void plat_vidapi_enable(int enabled);
extern void plat_vidapi_reload(void);
extern void plat_vid_reload_options(void);

View File

@@ -26,6 +26,7 @@
extern const device_t scsi_lcs6821n_device;
extern const device_t scsi_rt1000b_device;
extern const device_t scsi_rt1000mc_device;
extern const device_t scsi_t128_device;
extern const device_t scsi_t130b_device;
extern const device_t scsi_ls2000_device;

View File

@@ -62,6 +62,8 @@ extern void ui_check_menu_item(int id, int checked);
extern wchar_t *ui_window_title(wchar_t *s);
extern void ui_status_update(void);
extern void ui_init_monitor(int monitor_index);
extern void ui_deinit_monitor(int monitor_index);
extern int ui_sb_find_part(int tag);
extern void ui_sb_set_ready(int ready);
extern void ui_sb_update_panes(void);

View File

@@ -62,7 +62,7 @@ typedef struct ibm8514_t
int x1, x2, y1, y2;
int sys_cnt, sys_cnt2;
int temp_cnt;
int16_t cx, cy;
int16_t cx, cy, oldcy;
int16_t sx, sy;
int16_t dx, dy;
int16_t err;
@@ -80,7 +80,7 @@ typedef struct ibm8514_t
int odd_in, odd_out;
uint16_t scratch;
int fill_state, fill_drop;
int fill_state, xdir, ydir;
} accel;
uint16_t test;

View File

@@ -46,6 +46,8 @@ typedef struct cga_t
int drawcursor;
int fullchange;
uint8_t *vram;
uint8_t charbuffer[256];

View File

@@ -46,14 +46,14 @@ typedef struct ega_t {
readmode, writemode, readplane, vrammask,
chain4, chain2_read, chain2_write, con,
oddeven_page, oddeven_chain, vc, sc,
dispon, hdisp_on, cursoron, blink,
dispon, hdisp_on, cursoron, blink, fullchange,
linepos, vslines, linecountff, oddeven,
lowres, interlace, linedbl, lindebl, rowcount,
vtotal, dispend, vsyncstart, split,
hdisp, hdisp_old, htotal, hdisp_time, rowoffset,
vblankstart, scrollcache, firstline, lastline,
firstline_draw, lastline_draw, x_add, y_add,
displine, video_res_x, video_res_y, video_bpp, index;
displine, res_x, res_y, bpp, index;
uint32_t charseta, charsetb, ma_latch, ma,
maback, ca, vram_limit, overscan_color;

View File

@@ -51,12 +51,18 @@ typedef struct {
int vadj;
int lp_ff;
int fullchange;
int cols[256][2][2];
uint8_t *vram;
int monitor_index;
int prev_monitor_index;
} hercules_t;
#define VIDEO_MONITOR_PROLOGUE() { dev->prev_monitor_index = monitor_index_global; monitor_index_global = dev->monitor_index; }
#define VIDEO_MONITOR_EPILOGUE() { monitor_index_global = dev->prev_monitor_index; }
static void *hercules_init(const device_t *info);
#endif /*VIDEO_HERCULES_H*/

View File

@@ -25,11 +25,16 @@ typedef struct mda_t
int con, coff, cursoron;
int dispon, blink;
int vsynctime;
int vadj;
int vadj;
int monitor_index;
int prev_monitor_index;
uint8_t *vram;
} mda_t;
#define VIDEO_MONITOR_PROLOGUE() { mda->prev_monitor_index = monitor_index_global; monitor_index_global = mda->monitor_index; }
#define VIDEO_MONITOR_EPILOGUE() { monitor_index_global = mda->prev_monitor_index; }
void mda_init(mda_t *mda);
void mda_setcol(int chr, int blink, int fg, uint8_t cga_ink);
void mda_out(uint16_t addr, uint8_t val, void *p);

View File

@@ -35,7 +35,7 @@
typedef struct {
int ena,
x, y, xoff, yoff, xsize, ysize,
x, y, xoff, yoff, cur_xsize, cur_ysize,
v_acc, h_acc;
uint32_t addr, pitch;
} hwcursor_t;

View File

@@ -22,7 +22,7 @@
typedef struct {
int ena;
int x, y, xoff, yoff, xsize, ysize;
int x, y, xoff, yoff, cur_xsize, cur_ysize;
uint32_t addr;
} xga_hwcursor_t;

View File

@@ -22,6 +22,13 @@
#ifndef EMU_VIDEO_H
# define EMU_VIDEO_H
#ifdef __cplusplus
#include <atomic>
using atomic_bool = std::atomic_bool;
using atomic_int = std::atomic_int;
#else
#include <stdatomic.h>
#endif
#define makecol(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
#define makecol32(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
@@ -79,20 +86,93 @@ typedef struct {
uint8_t chr[32];
} dbcs_font_t;
struct blit_data_struct;
typedef struct monitor_t
{
char name[512];
int mon_xsize;
int mon_ysize;
int mon_scrnsz_x;
int mon_scrnsz_y;
int mon_efscrnsz_y;
int mon_unscaled_size_x;
int mon_unscaled_size_y;
int mon_res_x;
int mon_res_y;
int mon_bpp;
bitmap_t* target_buffer;
int mon_video_timing_read_b,
mon_video_timing_read_w,
mon_video_timing_read_l;
int mon_video_timing_write_b,
mon_video_timing_write_w,
mon_video_timing_write_l;
int mon_overscan_x;
int mon_overscan_y;
int mon_force_resize;
int mon_fullchange;
int mon_changeframecount;
atomic_int mon_screenshots;
uint32_t* mon_pal_lookup;
int* mon_cga_palette;
int mon_pal_lookup_static; /* Whether it should not be freed by the API. */
int mon_cga_palette_static; /* Whether it should not be freed by the API. */
const video_timings_t* mon_vid_timings;
int mon_vid_type;
struct blit_data_struct* mon_blit_data_ptr;
} monitor_t;
typedef struct monitor_settings_t {
int mon_window_x; /* (C) window size and position info. */
int mon_window_y;
int mon_window_w;
int mon_window_h;
} monitor_settings_t;
#define MONITORS_NUM 2
extern monitor_t monitors[MONITORS_NUM];
extern monitor_settings_t monitor_settings[MONITORS_NUM];
extern atomic_bool doresize_monitors[MONITORS_NUM];
extern int monitor_index_global;
extern int gfxcard_2;
extern int show_second_monitors;
typedef rgb_t PALETTE[256];
extern int changeframecount;
//extern int changeframecount;
extern volatile int screenshots;
extern bitmap_t *buffer32;
//extern bitmap_t *buffer32;
#define buffer32 (monitors[monitor_index_global].target_buffer)
#define pal_lookup (monitors[monitor_index_global].mon_pal_lookup)
#define overscan_x (monitors[monitor_index_global].mon_overscan_x)
#define overscan_y (monitors[monitor_index_global].mon_overscan_y)
#define video_timing_read_b (monitors[monitor_index_global].mon_video_timing_read_b)
#define video_timing_read_l (monitors[monitor_index_global].mon_video_timing_read_l)
#define video_timing_read_w (monitors[monitor_index_global].mon_video_timing_read_w)
#define video_timing_write_b (monitors[monitor_index_global].mon_video_timing_write_b)
#define video_timing_write_l (monitors[monitor_index_global].mon_video_timing_write_l)
#define video_timing_write_w (monitors[monitor_index_global].mon_video_timing_write_w)
#define video_res_x (monitors[monitor_index_global].mon_res_x)
#define video_res_y (monitors[monitor_index_global].mon_res_y)
#define video_bpp (monitors[monitor_index_global].mon_bpp)
#define xsize (monitors[monitor_index_global].mon_xsize)
#define ysize (monitors[monitor_index_global].mon_ysize)
#define cga_palette (*monitors[monitor_index_global].mon_cga_palette)
#define changeframecount (monitors[monitor_index_global].mon_changeframecount)
#define scrnsz_x (monitors[monitor_index_global].mon_scrnsz_x)
#define scrnsz_y (monitors[monitor_index_global].mon_scrnsz_y)
#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)
extern PALETTE cgapal,
cgapal_mono[6];
extern uint32_t pal_lookup[256];
//extern uint32_t pal_lookup[256];
extern int video_fullscreen,
video_fullscreen_scale,
video_fullscreen_first;
extern int fullchange;
video_fullscreen_first;
extern uint8_t fontdat[2048][8];
extern uint8_t fontdatm[2048][16];
extern uint8_t fontdatw[512][32];
@@ -104,24 +184,11 @@ extern uint32_t *video_6to8,
*video_8togs,
*video_8to32,
*video_15to32,
*video_16to32;
extern int xsize,ysize;
*video_16to32;
extern int enable_overscan;
extern int overscan_x,
overscan_y;
extern int force_43;
extern int video_timing_read_b,
video_timing_read_w,
video_timing_read_l;
extern int video_timing_write_b,
video_timing_write_w,
video_timing_write_l;
extern int video_res_x,
video_res_y,
video_bpp;
extern int vid_resize;
extern int cga_palette,
herc_blend;
extern int herc_blend;
extern int vid_cga_contrast;
extern int video_grayscale;
extern int video_graytype;
@@ -134,6 +201,7 @@ extern int readflash;
/* Function handler pointers. */
extern void (*video_recalctimings)(void);
extern void video_screenshot_monitor(uint32_t *buf, int start_x, int start_y, int row_len, int monitor_index);
extern void video_screenshot(uint32_t *buf, int start_x, int start_y, int row_len);
#ifdef _WIN32
@@ -153,34 +221,39 @@ extern const device_t *video_card_getdevice(int card);
extern int video_card_has_config(int card);
extern char *video_get_internal_name(int card);
extern int video_get_video_from_internal_name(char *s);
extern int video_card_get_flags(int card);
extern int video_is_mda(void);
extern int video_is_cga(void);
extern int video_is_ega_vga(void);
extern void video_inform(int type, const video_timings_t *ptr);
extern int video_get_type(void);
extern void video_inform_monitor(int type, const video_timings_t *ptr, int monitor_index);
extern int video_get_type_monitor(int monitor_index);
extern void video_setblit(void(*blit)(int,int,int,int));
extern void video_setblit(void(*blit)(int,int,int,int,int));
extern void video_blend(int x, int y);
extern void video_blit_memtoscreen_8(int x, int y, int w, int h);
extern void video_blit_memtoscreen(int x, int y, int w, int h);
extern void video_blit_complete(void);
extern void video_wait_for_blit(void);
extern void video_wait_for_buffer(void);
extern void video_blend_monitor(int x, int y, int monitor_index);
extern void video_blit_memtoscreen_8_monitor(int x, int y, int w, int h, int monitor_index);
extern void video_blit_memtoscreen_monitor(int x, int y, int w, int h, int monitor_index);
extern void video_blit_complete_monitor(int monitor_index);
extern void video_wait_for_blit_monitor(int monitor_index);
extern void video_wait_for_buffer_monitor(int monitor_index);
extern bitmap_t *create_bitmap(int w, int h);
extern void destroy_bitmap(bitmap_t *b);
extern void cgapal_rebuild(void);
extern void cgapal_rebuild_monitor(int monitor_index);
extern void hline(bitmap_t *b, int x1, int y, int x2, uint32_t col);
extern void updatewindowsize(int x, int y);
extern void video_monitor_init(int);
extern void video_monitor_close(int);
extern void video_init(void);
extern void video_close(void);
extern void video_reset_close(void);
extern void video_pre_reset(int card);
extern void video_reset(int card);
extern uint8_t video_force_resize_get(void);
extern void video_force_resize_set(uint8_t res);
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);
@@ -194,6 +267,18 @@ extern uint32_t video_color_transform(uint32_t color);
extern void agpgart_set_aperture(void *handle, uint32_t base, uint32_t size, int enable);
extern void agpgart_set_gart(void *handle, uint32_t base);
#define video_inform(type, video_timings_ptr) video_inform_monitor(type, video_timings_ptr, monitor_index_global)
#define video_get_type() video_get_type_monitor(0)
#define video_blend(x, y) video_blend_monitor(x, y, monitor_index_global)
#define video_blit_memtoscreen(x, y, w, h) video_blit_memtoscreen_monitor(x, y, w, h, monitor_index_global)
#define video_blit_memtoscreen_8(x, y, w, h) video_blit_memtoscreen_8_monitor(x, y, w, h, monitor_index_global)
#define video_blit_complete() video_blit_complete_monitor(monitor_index_global)
#define video_wait_for_blit() video_wait_for_blit_monitor(monitor_index_global)
#define video_wait_for_buffer() video_wait_for_buffer_monitor(monitor_index_global)
#define cgapal_rebuild() cgapal_rebuild_monitor(monitor_index_global)
#define video_force_resize_get() video_force_resize_get_monitor(monitor_index_global)
#define video_force_resize_set(val) video_force_resize_set_monitor(val, monitor_index_global)
#ifdef __cplusplus
}
#endif