Merge branch 'master' into vmm
This commit is contained in:
@@ -201,6 +201,8 @@ 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;
|
||||
|
||||
72
src/include/86box/m_pcjr.h
Normal file
72
src/include/86box/m_pcjr.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
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
|
||||
@@ -473,7 +473,9 @@ extern int machine_at_spc4216p_init(const machine_t *);
|
||||
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_tuliptc7_init(const machine_t *);
|
||||
|
||||
extern int machine_at_pc8_init(const machine_t *);
|
||||
extern int machine_at_3302_init(const machine_t *);
|
||||
@@ -546,6 +548,7 @@ 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 *);
|
||||
@@ -610,6 +613,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 *);
|
||||
|
||||
@@ -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*/
|
||||
|
||||
@@ -24,6 +24,19 @@
|
||||
#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;
|
||||
@@ -58,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;
|
||||
@@ -67,7 +80,7 @@ typedef struct ibm8514_t {
|
||||
uint32_t vram_mask;
|
||||
uint32_t pallook[512];
|
||||
uint32_t bios_addr;
|
||||
uint32_t ma_latch;
|
||||
uint32_t memaddr_latch;
|
||||
|
||||
PALETTE vgapal;
|
||||
uint8_t hwcursor_oddeven;
|
||||
@@ -207,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;
|
||||
@@ -223,7 +236,7 @@ typedef struct ibm8514_t {
|
||||
int hdisp;
|
||||
int hdisp2;
|
||||
int hdisped;
|
||||
int sc;
|
||||
int scanline;
|
||||
int vsyncstart;
|
||||
int vsyncwidth;
|
||||
int vtotal;
|
||||
@@ -246,7 +259,8 @@ 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;
|
||||
@@ -263,9 +277,9 @@ typedef struct ibm8514_t {
|
||||
|
||||
} ibm8514_t;
|
||||
|
||||
#define IBM_8514A (((dev->local & 0xff) == 0x00) && (dev->extensions == 0x00))
|
||||
#define ATI_8514A_ULTRA (((dev->local & 0xff) == 0x00) && (dev->extensions == 0x01))
|
||||
#define ATI_GRAPHICS_ULTRA ((dev->local & 0xff) == 0x01)
|
||||
#define ATI_MACH32 ((dev->local & 0xff) == 0x02)
|
||||
#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*/
|
||||
|
||||
@@ -137,6 +137,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;
|
||||
|
||||
@@ -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;
|
||||
@@ -68,12 +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 real_vc;
|
||||
int sc;
|
||||
int scanline;
|
||||
int dispon;
|
||||
int hdisp_on;
|
||||
int cursoron;
|
||||
@@ -115,14 +115,14 @@ typedef struct ega_t {
|
||||
int chipset;
|
||||
int mono_display;
|
||||
|
||||
int mdacols[256][2][2];
|
||||
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;
|
||||
@@ -189,11 +189,11 @@ 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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -152,15 +152,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];
|
||||
|
||||
@@ -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; \
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -187,6 +187,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
|
||||
@@ -395,6 +399,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;
|
||||
@@ -609,6 +614,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*/
|
||||
|
||||
Reference in New Issue
Block a user