Brought CGA code in line with mainline as the patch was accepted.

Uncommented auto-setting FDC data rate to 250 kbps on non-AT machines; fixes floppies on IBM PC and XT and clones;
Removed flto flag from the makefiles, should speed up compile times and make the XT and earlier machines work again;
Removed CGA brown and color burst settings in line with mainline PCem.
This commit is contained in:
OBattler
2016-07-09 02:18:45 +02:00
parent 88e20c7327
commit 277b3eac8c
15 changed files with 110 additions and 166 deletions

View File

@@ -2,9 +2,7 @@ VPATH = . dosbox resid-fp slirp
CPP = g++.exe CPP = g++.exe
CC = gcc.exe CC = gcc.exe
WINDRES = windres.exe WINDRES = windres.exe
KFLAGS = -O2 -flto -ffast-math -msse -msse2 -mfpmath=387 -mstackrealign CFLAGS = -O3 -march=native -mtune=native -fbranch-probabilities -fvpt -funroll-loops -fpeel-loops -ftracer -fomit-frame-pointer -ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse -mstackrealign
CFLAGS = -O3 -march=native -mtune=native -flto -fbranch-probabilities -fvpt -funroll-loops -fpeel-loops -ftracer -fomit-frame-pointer -ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse -mstackrealign
BFLAGS = -DRELEASE_BUILD
OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-iso.o \ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-iso.o \
cdrom-null.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o dac.o \ cdrom-null.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o dac.o \
device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i430hx.o i430lx.o i430fx.o \ device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i430hx.o i430lx.o i430fx.o \
@@ -15,7 +13,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429
sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \ sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \
sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \ sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \
soundopenal.o tandy_eeprom.o tandy_rom.o timer.o um8669f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o \ soundopenal.o tandy_eeprom.o tandy_rom.o timer.o um8669f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o \
vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o vid_cga_comp.o vid_cl5429.o vid_ega.o vid_et4000.o \ vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o vid_cl5429.o vid_ega.o vid_et4000.o \
vid_et4000w32.o vid_hercules.o vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o \ vid_et4000w32.o vid_hercules.o vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o \
vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \ vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \
vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \ vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \
@@ -23,15 +21,15 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429
vid_vga.o vid_voodoo.o video.o w83877f.o wd76c10.o win.o win-config.o win-d3d.o win-d3d-fs.o win-ddraw.o \ vid_vga.o vid_voodoo.o video.o w83877f.o wd76c10.o win.o win-config.o win-d3d.o win-d3d-fs.o win-ddraw.o \
win-ddraw-fs.o win-ddraw-screenshot.o win-deviceconfig.o win-hdconf.o win-joystick.o win-joystickconfig.o win-keyboard.o win-midi.o win-mouse.o \ win-ddraw-fs.o win-ddraw-screenshot.o win-deviceconfig.o win-hdconf.o win-joystick.o win-joystickconfig.o win-keyboard.o win-midi.o win-mouse.o \
win-status.o win-time.o win-video.o x86seg.o x87.o xtide.o pc.res win-status.o win-time.o win-video.o x86seg.o x87.o xtide.o pc.res
FMOBJ = dbopl.o DBOBJ = dbopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
SLIRPOBJ = bootp.o ip_icmp.o misc.o socket.o tcp_timer.o cksum.o ip_input.o queue.o tcp_input.o tftp.o debug.o ip_output.o sbuf.o tcp_output.o udp.o if.o mbuf.o slirp.o tcp_subr.o SLIRPOBJ = bootp.o ip_icmp.o misc.o socket.o tcp_timer.o cksum.o ip_input.o queue.o tcp_input.o tftp.o debug.o ip_output.o sbuf.o tcp_output.o udp.o if.o mbuf.o slirp.o tcp_subr.o
LIBS = -mwindows -lwinmm -lopenal.dll -lopenal -lddraw -ldinput8 -ldxguid -ld3d9 -ld3dx9 -lwsock32 -liphlpapi -lstdc++ -static-libstdc++ -static-libgcc -static LIBS = -mwindows -lwinmm -lopenal.dll -lopenal -lddraw -ldinput8 -ldxguid -ld3d9 -ld3dx9 -lwsock32 -liphlpapi -lstdc++ -static-libstdc++ -static-libgcc -static
PCem.exe: $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) PCem.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ)
$(CC) $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem.exe" $(LIBS) $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem.exe" $(LIBS)
strip "PCem.exe" strip "PCem.exe"
all : PCem.exe all : PCem.exe

View File

@@ -13,7 +13,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429
sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \ sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \
sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \ sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \
soundopenal.o tandy_eeprom.o tandy_rom.o timer.o um8669f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o \ soundopenal.o tandy_eeprom.o tandy_rom.o timer.o um8669f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o \
vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o vid_cga_comp.o vid_cl5429.o vid_ega.o vid_et4000.o \ vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o vid_cl5429.o vid_ega.o vid_et4000.o \
vid_et4000w32.o vid_hercules.o vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o \ vid_et4000w32.o vid_hercules.o vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o \
vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \ vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \
vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \ vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \
@@ -21,15 +21,15 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429
vid_vga.o vid_voodoo.o video.o w83877f.o wd76c10.o win.o win-config.o win-d3d.o win-d3d-fs.o win-ddraw.o \ vid_vga.o vid_voodoo.o video.o w83877f.o wd76c10.o win.o win-config.o win-d3d.o win-d3d-fs.o win-ddraw.o \
win-ddraw-fs.o win-ddraw-screenshot.o win-deviceconfig.o win-hdconf.o win-joystick.o win-joystickconfig.o win-keyboard.o win-midi.o win-mouse.o \ win-ddraw-fs.o win-ddraw-screenshot.o win-deviceconfig.o win-hdconf.o win-joystick.o win-joystickconfig.o win-keyboard.o win-midi.o win-mouse.o \
win-status.o win-time.o win-video.o x86seg.o x87.o xtide.o pc.res win-status.o win-time.o win-video.o x86seg.o x87.o xtide.o pc.res
FMOBJ = dbopl.o DBOBJ = dbopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
SLIRPOBJ = bootp.o ip_icmp.o misc.o socket.o tcp_timer.o cksum.o ip_input.o queue.o tcp_input.o tftp.o debug.o ip_output.o sbuf.o tcp_output.o udp.o if.o mbuf.o slirp.o tcp_subr.o SLIRPOBJ = bootp.o ip_icmp.o misc.o socket.o tcp_timer.o cksum.o ip_input.o queue.o tcp_input.o tftp.o debug.o ip_output.o sbuf.o tcp_output.o udp.o if.o mbuf.o slirp.o tcp_subr.o
LIBS = -mwindows -lwinmm -lopenal -lddraw -ldinput8 -ldxguid -ld3d9 -ld3dx9 -lwsock32 -liphlpapi -lstdc++ -static-libstdc++ -static-libgcc -static -lopenal.dll -flto -lgcov -lPacket -lwpcap LIBS = -mwindows -lwinmm -lopenal -lddraw -ldinput8 -ldxguid -ld3d9 -ld3dx9 -lwsock32 -liphlpapi -lstdc++ -static-libstdc++ -static-libgcc -static -lopenal.dll -lgcov -lPacket -lwpcap
PCem64.exe: $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) PCem64.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ)
$(CC) $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem64.exe" $(LIBS) $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem64.exe" $(LIBS)
strip "PCem64.exe" strip "PCem64.exe"
all : PCem64.exe all : PCem64.exe

View File

@@ -2,8 +2,7 @@ VPATH = . dosbox resid-fp slirp
CPP = g++.exe CPP = g++.exe
CC = gcc.exe CC = gcc.exe
WINDRES = windres.exe WINDRES = windres.exe
CFLAGS = -O3 -march=amdfam10 -mtune=amdfam10 -flto -fbranch-probabilities -fvpt -funroll-loops -fpeel-loops -ftracer -fomit-frame-pointer -ffast-math -msse -msse2 -msse3 -mfpmath=sse -mstackrealign CFLAGS = -O3 -march=amdfam10 -mtune=amdfam10 -fbranch-probabilities -fvpt -funroll-loops -fpeel-loops -ftracer -fomit-frame-pointer -ffast-math -msse -msse2 -msse3 -mfpmath=sse -mstackrealign
BFLAGS = -DRELEASE_BUILD
OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-iso.o \ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-iso.o \
cdrom-null.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o dac.o \ cdrom-null.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o dac.o \
device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i430hx.o i430lx.o i430fx.o \ device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i430hx.o i430lx.o i430fx.o \

View File

@@ -5,13 +5,10 @@
#include <stdint.h> #include <stdint.h>
#include <math.h> #include <math.h>
#include "ibm.h" #include "../ibm.h"
#include "device.h" #include "../device.h"
#include "io.h" #include "../mem.h"
#include "mem.h" #include "../vid_cga.h"
#include "timer.h"
#include "video.h"
#include "vid_cga.h"
#include "vid_cga_comp.h" #include "vid_cga_comp.h"
int CGA_Composite_Table[1024]; int CGA_Composite_Table[1024];
@@ -145,24 +142,8 @@ void update_cga16_color(cga_t *cga) {
video_bi = (int) (bi*iq_adjust_i + bq*iq_adjust_q); video_bi = (int) (bi*iq_adjust_i + bq*iq_adjust_q);
video_bq = (int) (-bi*iq_adjust_q + bq*iq_adjust_i); video_bq = (int) (-bi*iq_adjust_q + bq*iq_adjust_i);
video_sharpness = (int) (sharpness*256/100); video_sharpness = (int) (sharpness*256/100);
#if 0
df = fopen("CGA_Composite_Table.dmp", "wb");
fwrite(CGA_Composite_Table, 1024, sizeof(int), df);
fclose(df);
#endif
} }
#if 0
void configure_comp(double h, uint8_t n, uint8_t bw, uint8_t b1)
{
hue_offset = h;
new_cga = n;
is_bw = bw;
is_bpp1 = b1;
}
#endif
static Bit8u byte_clamp(int v) { static Bit8u byte_clamp(int v) {
v >>= 13; v >>= 13;
return v < 0 ? 0 : (v > 255 ? 255 : v); return v < 0 ? 0 : (v > 255 ? 255 : v);
@@ -216,7 +197,7 @@ Bit8u * Composite_Process(cga_t *cga, Bit8u border, Bit32u blocks/*, bool double
for (x = 0; x < 5; ++x) for (x = 0; x < 5; ++x)
OUT(b[x&3]); OUT(b[x&3]);
if ((cga->cgamode & 4) != 0 || !cga_color_burst) { if ((cga->cgamode & 4) != 0) {
// Decode // Decode
int* i = temp + 5; int* i = temp + 5;
Bit32u* srgb = (Bit32u *)TempLine; Bit32u* srgb = (Bit32u *)TempLine;
@@ -256,18 +237,6 @@ Bit8u * Composite_Process(cga_t *cga, Bit8u border, Bit32u blocks/*, bool double
#undef COMPOSITE_CONVERT #undef COMPOSITE_CONVERT
#undef OUT #undef OUT
#if 0
df = fopen("temp.dmp", "ab");
fwrite(temp, SCALER_MAXWIDTH + 10, sizeof(int), df);
fclose(df);
df = fopen("atemp.dmp", "ab");
fwrite(atemp, SCALER_MAXWIDTH + 2, sizeof(int), df);
fclose(df);
df = fopen("btemp.dmp", "ab");
fwrite(btemp, SCALER_MAXWIDTH + 2, sizeof(int), df);
fclose(df);
#endif
return TempLine; return TempLine;
} }
@@ -343,7 +312,7 @@ void DecreaseSharpness(cga_t *cga)
void cga_comp_init(cga_t *cga) void cga_comp_init(cga_t *cga)
{ {
new_cga = (gfxcard == GFX_NEW_CGA); new_cga = cga->revision;
/* Making sure this gets reset after reset. */ /* Making sure this gets reset after reset. */
brightness = 0; brightness = 0;

View File

@@ -99,13 +99,11 @@ void fdc_reset()
fdc_set_skip_pulses(1, 0); fdc_set_skip_pulses(1, 0);
fdd_stepping_motor_on[0] = fdd_stepping_motor_on[1] = 0; fdd_stepping_motor_on[0] = fdd_stepping_motor_on[1] = 0;
fdd_track_diff[0] = fdd_track_diff[1] = 0; fdd_track_diff[0] = fdd_track_diff[1] = 0;
#if 0
if (!AT) if (!AT)
{ {
fdc.rate = 2; fdc.rate = 2;
// fdc_update_rate(); // fdc_update_rate();
} }
#endif
fdc_state = FDC_STATE_NORMAL; fdc_state = FDC_STATE_NORMAL;
// pclog("Reset FDC\n"); // pclog("Reset FDC\n");
} }

View File

@@ -673,8 +673,6 @@ void loadconfig(char *fn)
force_43 = config_get_int(NULL, "force_43", 0); force_43 = config_get_int(NULL, "force_43", 0);
enable_overscan = config_get_int(NULL, "enable_overscan", 0); enable_overscan = config_get_int(NULL, "enable_overscan", 0);
cga_color_burst = config_get_int(NULL, "cga_color_burst", 1);
cga_brown = config_get_int(NULL, "cga_brown", 1);
enable_flash = config_get_int(NULL, "enable_flash", 1); enable_flash = config_get_int(NULL, "enable_flash", 1);
enable_sync = config_get_int(NULL, "enable_sync", 0); enable_sync = config_get_int(NULL, "enable_sync", 0);
@@ -768,8 +766,6 @@ void saveconfig()
config_set_int(NULL, "force_43", force_43); config_set_int(NULL, "force_43", force_43);
config_set_int(NULL, "enable_overscan", enable_overscan); config_set_int(NULL, "enable_overscan", enable_overscan);
config_set_int(NULL, "cga_color_burst", cga_color_burst);
config_set_int(NULL, "cga_brown", cga_brown);
config_set_int(NULL, "enable_flash", enable_flash); config_set_int(NULL, "enable_flash", enable_flash);
config_set_int(NULL, "enable_sync", enable_sync); config_set_int(NULL, "enable_sync", enable_sync);

View File

@@ -57,13 +57,13 @@ BEGIN
END END
END END
ConfigureDlg DIALOGEX 0, 0, 248+40, 248+76 ConfigureDlg DIALOGEX 0, 0, 248+40, 248+60
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Configure PCem" CAPTION "Configure PCem"
FONT 9, "Segoe UI" FONT 9, "Segoe UI"
BEGIN BEGIN
DEFPUSHBUTTON "OK",IDOK,64,300,50,14, WS_TABSTOP DEFPUSHBUTTON "OK",IDOK,64,284,50,14, WS_TABSTOP
PUSHBUTTON "Cancel",IDCANCEL,128,300,50,14, WS_TABSTOP PUSHBUTTON "Cancel",IDCANCEL,128,284,50,14, WS_TABSTOP
COMBOBOX IDC_COMBO1,62,16,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO1,62,16,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBOVID,62,36,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBOVID,62,36,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure", IDC_CONFIGUREVID, 224, 36, 40, 14, WS_TABSTOP PUSHBUTTON "Configure", IDC_CONFIGUREVID, 224, 36, 40, 14, WS_TABSTOP
@@ -84,22 +84,19 @@ BEGIN
CONTROL "Enable time sync",IDC_CHECKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,236,102,10 CONTROL "Enable time sync",IDC_CHECKSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,236,102,10
CONTROL "Force 4:3 display ratio",IDC_CHECKFORCE43,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,172,102,10 CONTROL "Force 4:3 display ratio",IDC_CHECKFORCE43,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,172,102,10
CONTROL "Composite CGA color burst",IDC_CHECKCBURST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,188,102,10 CONTROL "EGA/(S)VGA overscan",IDC_CHECKOVERSCAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,188,102,10
CONTROL "RGB CGA brown circuit",IDC_CHECKBROWN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,204,102,10 CONTROL "Disk activity flash",IDC_CHECKFLASH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,204,102,10
CONTROL "EGA/(S)VGA overscan",IDC_CHECKOVERSCAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,220,102,10 CONTROL "Ser.mouse inst.of PS/2",IDC_CHECKSERIAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,220,102,10
CONTROL "Disk activity flash",IDC_CHECKFLASH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,236,102,10
CONTROL "Ser. mouse instead of PS/2",IDC_CHECKSERIAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,252,102,10 CONTROL "Voodoo Graphics",IDC_CHECKVOODOO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,236,102,10
PUSHBUTTON "Configure", IDC_CONFIGUREVOODOO, 224, 236, 40, 14, WS_TABSTOP
CONTROL "Voodoo Graphics",IDC_CHECKVOODOO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,252,102,10 LTEXT "Joystick :",IDC_STATIC,15,252,40,10
PUSHBUTTON "Configure", IDC_CONFIGUREVOODOO, 224, 252, 40, 14, WS_TABSTOP COMBOBOX IDC_COMBOJOY,62,252,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON "Joystick 1...",IDC_JOY1,16,268,50,14, WS_TABSTOP
LTEXT "Joystick :",IDC_STATIC,15,268,40,10 PUSHBUTTON "Joystick 2...",IDC_JOY2,80,268,50,14, WS_TABSTOP
COMBOBOX IDC_COMBOJOY,62,268,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Joystick 3...",IDC_JOY3,144,268,50,14, WS_TABSTOP
DEFPUSHBUTTON "Joystick 1...",IDC_JOY1,16,284,50,14, WS_TABSTOP PUSHBUTTON "Joystick 4...",IDC_JOY4,208,268,50,14, WS_TABSTOP
PUSHBUTTON "Joystick 2...",IDC_JOY2,80,284,50,14, WS_TABSTOP
DEFPUSHBUTTON "Joystick 3...",IDC_JOY3,144,284,50,14, WS_TABSTOP
PUSHBUTTON "Joystick 4...",IDC_JOY4,208,284,50,14, WS_TABSTOP
LTEXT "Machine :",IDC_STATIC,15,16,40,10 LTEXT "Machine :",IDC_STATIC,15,16,40,10
LTEXT "Video :",IDC_STATIC,15,36,34,10 LTEXT "Video :",IDC_STATIC,15,36,34,10

View File

@@ -51,11 +51,9 @@
#define IDC_STATIC 1020 #define IDC_STATIC 1020
#define IDC_CHECKFORCE43 1021 #define IDC_CHECKFORCE43 1021
#define IDC_CHECKOVERSCAN 1022 #define IDC_CHECKOVERSCAN 1022
#define IDC_CHECKCBURST 1023 #define IDC_CHECKFLASH 1023
#define IDC_CHECKBROWN 1024 #define IDC_CHECKSYNC 1024
#define IDC_CHECKFLASH 1025 #define IDC_CHECKSERIAL 1025
#define IDC_CHECKSYNC 1026
#define IDC_CHECKSERIAL 1027
#define IDC_EDIT1 1030 #define IDC_EDIT1 1030
#define IDC_EDIT2 1031 #define IDC_EDIT2 1031
#define IDC_EDIT3 1032 #define IDC_EDIT3 1032

View File

@@ -8,14 +8,13 @@
#include "timer.h" #include "timer.h"
#include "video.h" #include "video.h"
#include "vid_cga.h" #include "vid_cga.h"
#include "vid_cga_comp.h" #include "dosbox/vid_cga_comp.h"
static int i_filt[8],q_filt[8]; #define CGA_RGB 0
#define CGA_COMPOSITE 1
static uint8_t tarray[65536]; #define COMPOSITE_OLD 0
#define COMPOSITE_NEW 1
int cga_brown;
int cga_color_burst;
static uint8_t crtcmask[32] = static uint8_t crtcmask[32] =
{ {
@@ -48,7 +47,8 @@ void cga_out(uint16_t addr, uint8_t val, void *p)
} }
return; return;
case 0x3D8: case 0x3D8:
if (((cga->cgamode ^ val) & 5) != 0) { if (((cga->cgamode ^ val) & 5) != 0)
{
cga->cgamode = val; cga->cgamode = val;
update_cga16_color(cga); update_cga16_color(cga);
} }
@@ -80,9 +80,6 @@ void cga_write(uint32_t addr, uint8_t val, void *p)
{ {
cga_t *cga = (cga_t *)p; cga_t *cga = (cga_t *)p;
// pclog("CGA_WRITE %04X %02X\n", addr, val); // pclog("CGA_WRITE %04X %02X\n", addr, val);
/* Horrible hack, I know, but it's the only way to fix the 440FX BIOS filling the VRAM with garbage until Tom fixes the memory emulation. */
if ((cs == 0xE0000) && (cpu_state.pc == 0xBF2F) && (romset == ROM_440FX)) { egawrites++; return; }
if ((cs == 0xE0000) && (cpu_state.pc == 0xBF77) && (romset == ROM_440FX)) { egawrites++; return; }
cga->vram[addr & 0x3fff] = val; cga->vram[addr & 0x3fff] = val;
cga->charbuffer[ ((int)(((cga->dispontime - cga->vidtime) * 2) / CGACONST)) & 0xfc] = val; cga->charbuffer[ ((int)(((cga->dispontime - cga->vidtime) * 2) / CGACONST)) & 0xfc] = val;
cga->charbuffer[(((int)(((cga->dispontime - cga->vidtime) * 2) / CGACONST)) & 0xfc) | 1] = val; cga->charbuffer[(((int)(((cga->dispontime - cga->vidtime) * 2) / CGACONST)) & 0xfc) | 1] = val;
@@ -125,18 +122,6 @@ void cga_recalctimings(cga_t *cga)
cga->dispofftime = (int)(_dispofftime * (1 << TIMER_SHIFT)); cga->dispofftime = (int)(_dispofftime * (1 << TIMER_SHIFT));
} }
static int ntsc_col[8][8]=
{
{0,0,0,0,0,0,0,0}, /*Black*/
{0,0,1,1,1,1,0,0}, /*Blue*/
{1,0,0,0,0,1,1,1}, /*Green*/
{0,0,0,0,1,1,1,1}, /*Cyan*/
{1,1,1,1,0,0,0,0}, /*Red*/
{0,1,1,1,1,0,0,0}, /*Magenta*/
{1,1,0,0,0,0,1,1}, /*Yellow*/
{1,1,1,1,1,1,1,1} /*White*/
};
void cga_poll(void *p) void cga_poll(void *p)
{ {
cga_t *cga = (cga_t *)p; cga_t *cga = (cga_t *)p;
@@ -149,11 +134,7 @@ void cga_poll(void *p)
int cols[4]; int cols[4];
int col; int col;
int oldsc; int oldsc;
int y_buf[8] = {0, 0, 0, 0, 0, 0, 0, 0}, y_val, y_tot;
int i_buf[8] = {0, 0, 0, 0, 0, 0, 0, 0}, i_val, i_tot;
int q_buf[8] = {0, 0, 0, 0, 0, 0, 0, 0}, q_val, q_tot;
int r, g, b;
uint8_t *tline;
if (!cga->linepos) if (!cga->linepos)
{ {
cga->vidtime += cga->dispofftime; cga->vidtime += cga->dispofftime;
@@ -307,21 +288,12 @@ void cga_poll(void *p)
if (cga->cgamode & 1) x = (cga->crtc[1] << 3) + 16; if (cga->cgamode & 1) x = (cga->crtc[1] << 3) + 16;
else x = (cga->crtc[1] << 4) + 16; else x = (cga->crtc[1] << 4) + 16;
if (cga_comp) if (cga->composite)
{ {
tline = (uint8_t *) buffer32->line[cga->displine];
for (c = 0; c < x; c++) for (c = 0; c < x; c++)
{ buffer32->line[cga->displine][c] = buffer->line[cga->displine][c] & 0xf;
tarray[c] = buffer->line[cga->displine][c] & 0xf;
}
Composite_Process(cga, 0, x >> 2, tarray); Composite_Process(cga, 0, x >> 2, buffer32->line[cga->displine]);
for (c = 0; c < x; c++)
{
((uint32_t *) tline)[c] = ((uint32_t *) tarray)[c];
}
} }
cga->sc = oldsc; cga->sc = oldsc;
@@ -386,7 +358,6 @@ void cga_poll(void *p)
{ {
cga->cgadispon = 0; cga->cgadispon = 0;
cga->displine = 0; cga->displine = 0;
// cga->vsynctime = (cga->crtc[3] >> 4) + 1;
cga->vsynctime = 16; cga->vsynctime = 16;
if (cga->crtc[7]) if (cga->crtc[7])
{ {
@@ -403,7 +374,7 @@ void cga_poll(void *p)
} }
startblit(); startblit();
if (cga_comp) if (cga->composite)
video_blit_memtoscreen(0, cga->firstline - 4, 0, (cga->lastline - cga->firstline) + 8, xsize, (cga->lastline - cga->firstline) + 8); video_blit_memtoscreen(0, cga->firstline - 4, 0, (cga->lastline - cga->firstline) + 8, xsize, (cga->lastline - cga->firstline) + 8);
else else
video_blit_memtoscreen_8(0, cga->firstline - 4, xsize, (cga->lastline - cga->firstline) + 8); video_blit_memtoscreen_8(0, cga->firstline - 4, xsize, (cga->lastline - cga->firstline) + 8);
@@ -445,7 +416,8 @@ endblit();
cga->sc &= 31; cga->sc &= 31;
cga->ma = cga->maback; cga->ma = cga->maback;
} }
if (cga->cgadispon) cga->cgastat &= ~1; if (cga->cgadispon)
cga->cgastat &= ~1;
if ((cga->sc == (cga->crtc[10] & 31) || ((cga->crtc[8] & 3) == 3 && cga->sc == ((cga->crtc[10] & 31) >> 1)))) if ((cga->sc == (cga->crtc[10] & 31) || ((cga->crtc[8] & 3) == 3 && cga->sc == ((cga->crtc[10] & 31) >> 1))))
cga->con = 1; cga->con = 1;
if (cga->cgadispon && (cga->cgamode & 1)) if (cga->cgadispon && (cga->cgamode & 1))
@@ -458,15 +430,19 @@ endblit();
void cga_init(cga_t *cga) void cga_init(cga_t *cga)
{ {
cga->composite = 0;
} }
void *cga_standalone_init() void *cga_standalone_init()
{ {
int c; int display_type;
int cga_tint = -2;
cga_t *cga = malloc(sizeof(cga_t)); cga_t *cga = malloc(sizeof(cga_t));
memset(cga, 0, sizeof(cga_t)); memset(cga, 0, sizeof(cga_t));
display_type = device_get_config_int("display_type");
cga->composite = (display_type != CGA_RGB);
cga->revision = device_get_config_int("composite_type");
cga->vram = malloc(0x4000); cga->vram = malloc(0x4000);
cga_comp_init(cga); cga_comp_init(cga);
@@ -474,11 +450,6 @@ void *cga_standalone_init()
mem_mapping_add(&cga->mapping, 0xb8000, 0x08000, cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, cga); mem_mapping_add(&cga->mapping, 0xb8000, 0x08000, cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, cga);
io_sethandler(0x03d0, 0x0010, cga_in, NULL, NULL, cga_out, NULL, NULL, cga); io_sethandler(0x03d0, 0x0010, cga_in, NULL, NULL, cga_out, NULL, NULL, cga);
for (c = 0; c < 8192; c++)
{
((uint64_t *) tarray)[c] = 0;
}
overscan_x = overscan_y = 16; overscan_x = overscan_y = 16;
return cga; return cga;
@@ -499,26 +470,62 @@ void cga_speed_changed(void *p)
cga_recalctimings(cga); cga_recalctimings(cga);
} }
device_t cga_device = static device_config_t cga_config[] =
{ {
"CGA (Old)", {
0, .name = "display_type",
cga_standalone_init, .description = "Display type",
cga_close, .type = CONFIG_SELECTION,
NULL, .selection =
cga_speed_changed, {
NULL, {
NULL .description = "RGB",
.value = CGA_RGB
},
{
.description = "Composite",
.value = CGA_COMPOSITE
},
{
.description = ""
}
},
.default_int = CGA_RGB
},
{
.name = "composite_type",
.description = "Composite type",
.type = CONFIG_SELECTION,
.selection =
{
{
.description = "Old",
.value = COMPOSITE_OLD
},
{
.description = "New",
.value = COMPOSITE_NEW
},
{
.description = ""
}
},
.default_int = COMPOSITE_OLD
},
{
.type = -1
}
}; };
device_t cga_new_device = device_t cga_device =
{ {
"CGA (New)", "CGA",
0, 0,
cga_standalone_init, cga_standalone_init,
cga_close, cga_close,
NULL, NULL,
cga_speed_changed, cga_speed_changed,
NULL, NULL,
NULL NULL,
cga_config
}; };

View File

@@ -27,6 +27,9 @@ typedef struct cga_t
uint8_t *vram; uint8_t *vram;
uint8_t charbuffer[256]; uint8_t charbuffer[256];
int revision;
int composite;
} cga_t; } cga_t;
void cga_init(cga_t *cga); void cga_init(cga_t *cga);
@@ -37,5 +40,4 @@ uint8_t cga_read(uint32_t addr, void *p);
void cga_recalctimings(cga_t *cga); void cga_recalctimings(cga_t *cga);
void cga_poll(void *p); void cga_poll(void *p);
extern device_t cga_new_device;
extern device_t cga_device; extern device_t cga_device;

View File

@@ -75,10 +75,6 @@ extern int enable_overscan;
extern int overscan_x, overscan_y; extern int overscan_x, overscan_y;
/* Forcibly stretch emulated video output to 4:3 or not. */ /* Forcibly stretch emulated video output to 4:3 or not. */
extern int force_43; extern int force_43;
/* Enable CGA brown circuitry. */
extern int cga_brown;
/* Enable CGA color burst. */
extern int cga_color_burst;
/* Enable disk activity flash. */ /* Enable disk activity flash. */
extern int enable_flash; extern int enable_flash;

View File

@@ -172,12 +172,6 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR
h=GetDlgItem(hdlg, IDC_CHECK4); h=GetDlgItem(hdlg, IDC_CHECK4);
SendMessage(h, BM_SETCHECK, cga_comp, 0); SendMessage(h, BM_SETCHECK, cga_comp, 0);
h=GetDlgItem(hdlg, IDC_CHECKCBURST);
SendMessage(h, BM_SETCHECK, cga_color_burst, 0);
h=GetDlgItem(hdlg, IDC_CHECKBROWN);
SendMessage(h, BM_SETCHECK, cga_brown, 0);
h=GetDlgItem(hdlg, IDC_CHECKFORCE43); h=GetDlgItem(hdlg, IDC_CHECKFORCE43);
SendMessage(h, BM_SETCHECK, force_43, 0); SendMessage(h, BM_SETCHECK, force_43, 0);
@@ -340,12 +334,6 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR
h = GetDlgItem(hdlg, IDC_CHECKOVERSCAN); h = GetDlgItem(hdlg, IDC_CHECKOVERSCAN);
enable_overscan = SendMessage(h, BM_GETCHECK, 0, 0); enable_overscan = SendMessage(h, BM_GETCHECK, 0, 0);
h = GetDlgItem(hdlg, IDC_CHECKCBURST);
cga_color_burst=SendMessage(h, BM_GETCHECK, 0, 0);
h = GetDlgItem(hdlg, IDC_CHECKBROWN);
cga_brown=SendMessage(h, BM_GETCHECK, 0, 0);
h = GetDlgItem(hdlg, IDC_CHECKFLASH); h = GetDlgItem(hdlg, IDC_CHECKFLASH);
enable_flash=SendMessage(h, BM_GETCHECK, 0, 0); enable_flash=SendMessage(h, BM_GETCHECK, 0, 0);

View File

@@ -286,8 +286,6 @@ static void ddraw_fs_blit_memtoscreen_8(int x, int y, int w, int h)
for (xx = 0; xx < w; xx++) for (xx = 0; xx < w; xx++)
{ {
p[xx] = pal_lookup[buffer->line[y + yy][x + xx]]; p[xx] = pal_lookup[buffer->line[y + yy][x + xx]];
/* If brown circuity is disabled, double the green component. */
if ((buffer->line[y + yy][x + xx] == 0x16) && !cga_brown) p[xx] += (p[xx] & 0xff00);
} }
} }
} }

View File

@@ -252,8 +252,6 @@ static void ddraw_blit_memtoscreen_8(int x, int y, int w, int h)
for (xx = 0; xx < w; xx++) for (xx = 0; xx < w; xx++)
{ {
p[xx] = pal_lookup[buffer->line[y + yy][x + xx]]; p[xx] = pal_lookup[buffer->line[y + yy][x + xx]];
/* If brown circuity is disabled, double the green component. */
if ((buffer->line[y + yy][x + xx] == 0x16) && !cga_brown) p[xx] += (p[xx] & 0xff00);
} }
} }
} }