diff --git a/src/Makefile.mingw b/src/Makefile.mingw index e7411529d..a27320401 100644 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -2,9 +2,7 @@ VPATH = . dosbox resid-fp slirp CPP = g++.exe CC = gcc.exe WINDRES = windres.exe -KFLAGS = -O2 -flto -ffast-math -msse -msse2 -mfpmath=387 -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 +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 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 \ 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_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 \ - 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_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 \ @@ -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 \ 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 -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 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 -PCem.exe: $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) - $(CC) $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem.exe" $(LIBS) +PCem.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ) + $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem.exe" $(LIBS) strip "PCem.exe" all : PCem.exe diff --git a/src/Makefile.mingw64 b/src/Makefile.mingw64 index b8a0fc9f9..9992cec0c 100644 --- a/src/Makefile.mingw64 +++ b/src/Makefile.mingw64 @@ -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_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 \ - 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_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 \ @@ -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 \ 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 -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 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) - $(CC) $(OBJ) $(FMOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem64.exe" $(LIBS) +PCem64.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ) + $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) $(SLIRPOBJ) -o "PCem64.exe" $(LIBS) strip "PCem64.exe" all : PCem64.exe diff --git a/src/Makefile_AMD.mingw b/src/Makefile_AMD.mingw index 3b4661201..0a1978b8d 100644 --- a/src/Makefile_AMD.mingw +++ b/src/Makefile_AMD.mingw @@ -2,8 +2,7 @@ VPATH = . dosbox resid-fp slirp CPP = g++.exe CC = gcc.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 -BFLAGS = -DRELEASE_BUILD +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 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 \ 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 \ diff --git a/src/vid_cga_comp.c b/src/dosbox/vid_cga_comp.c similarity index 92% rename from src/vid_cga_comp.c rename to src/dosbox/vid_cga_comp.c index 7cacbedff..cdf79da73 100644 --- a/src/vid_cga_comp.c +++ b/src/dosbox/vid_cga_comp.c @@ -5,13 +5,10 @@ #include #include -#include "ibm.h" -#include "device.h" -#include "io.h" -#include "mem.h" -#include "timer.h" -#include "video.h" -#include "vid_cga.h" +#include "../ibm.h" +#include "../device.h" +#include "../mem.h" +#include "../vid_cga.h" #include "vid_cga_comp.h" 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_bq = (int) (-bi*iq_adjust_q + bq*iq_adjust_i); 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) { v >>= 13; 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) OUT(b[x&3]); - if ((cga->cgamode & 4) != 0 || !cga_color_burst) { + if ((cga->cgamode & 4) != 0) { // Decode int* i = temp + 5; Bit32u* srgb = (Bit32u *)TempLine; @@ -256,18 +237,6 @@ Bit8u * Composite_Process(cga_t *cga, Bit8u border, Bit32u blocks/*, bool double #undef COMPOSITE_CONVERT #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; } @@ -343,7 +312,7 @@ void DecreaseSharpness(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. */ brightness = 0; @@ -353,4 +322,4 @@ void cga_comp_init(cga_t *cga) hue_offset = 0; update_cga16_color(cga); -} \ No newline at end of file +} diff --git a/src/vid_cga_comp.h b/src/dosbox/vid_cga_comp.h similarity index 100% rename from src/vid_cga_comp.h rename to src/dosbox/vid_cga_comp.h diff --git a/src/fdc.c b/src/fdc.c index e01dacd45..272416c05 100644 --- a/src/fdc.c +++ b/src/fdc.c @@ -99,13 +99,11 @@ void fdc_reset() fdc_set_skip_pulses(1, 0); fdd_stepping_motor_on[0] = fdd_stepping_motor_on[1] = 0; fdd_track_diff[0] = fdd_track_diff[1] = 0; -#if 0 if (!AT) { fdc.rate = 2; // fdc_update_rate(); } -#endif fdc_state = FDC_STATE_NORMAL; // pclog("Reset FDC\n"); } diff --git a/src/pc.c b/src/pc.c index 90724410e..21a413c6e 100644 --- a/src/pc.c +++ b/src/pc.c @@ -673,8 +673,6 @@ void loadconfig(char *fn) force_43 = config_get_int(NULL, "force_43", 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_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, "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_sync", enable_sync); diff --git a/src/pc.rc b/src/pc.rc index a820d6f35..036b76053 100644 --- a/src/pc.rc +++ b/src/pc.rc @@ -57,13 +57,13 @@ BEGIN 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 CAPTION "Configure PCem" FONT 9, "Segoe UI" BEGIN - DEFPUSHBUTTON "OK",IDOK,64,300,50,14, WS_TABSTOP - PUSHBUTTON "Cancel",IDCANCEL,128,300,50,14, WS_TABSTOP + DEFPUSHBUTTON "OK",IDOK,64,284,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_COMBOVID,62,36,157,120,CBS_DROPDOWN | WS_VSCROLL | 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 "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 "RGB CGA brown circuit",IDC_CHECKBROWN,"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 "Disk activity flash",IDC_CHECKFLASH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,236,102,10 + CONTROL "EGA/(S)VGA overscan",IDC_CHECKOVERSCAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,188,102,10 + CONTROL "Disk activity flash",IDC_CHECKFLASH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,204,102,10 + CONTROL "Ser.mouse inst.of PS/2",IDC_CHECKSERIAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,220,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 - PUSHBUTTON "Configure", IDC_CONFIGUREVOODOO, 224, 252, 40, 14, WS_TABSTOP - - LTEXT "Joystick :",IDC_STATIC,15,268,40,10 - COMBOBOX IDC_COMBOJOY,62,268,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Joystick 1...",IDC_JOY1,16,284,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 "Joystick :",IDC_STATIC,15,252,40,10 + COMBOBOX IDC_COMBOJOY,62,252,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Joystick 1...",IDC_JOY1,16,268,50,14, WS_TABSTOP + PUSHBUTTON "Joystick 2...",IDC_JOY2,80,268,50,14, WS_TABSTOP + DEFPUSHBUTTON "Joystick 3...",IDC_JOY3,144,268,50,14, WS_TABSTOP + PUSHBUTTON "Joystick 4...",IDC_JOY4,208,268,50,14, WS_TABSTOP LTEXT "Machine :",IDC_STATIC,15,16,40,10 LTEXT "Video :",IDC_STATIC,15,36,34,10 diff --git a/src/resources.h b/src/resources.h index b5c9bccc6..9a24149b8 100644 --- a/src/resources.h +++ b/src/resources.h @@ -51,11 +51,9 @@ #define IDC_STATIC 1020 #define IDC_CHECKFORCE43 1021 #define IDC_CHECKOVERSCAN 1022 -#define IDC_CHECKCBURST 1023 -#define IDC_CHECKBROWN 1024 -#define IDC_CHECKFLASH 1025 -#define IDC_CHECKSYNC 1026 -#define IDC_CHECKSERIAL 1027 +#define IDC_CHECKFLASH 1023 +#define IDC_CHECKSYNC 1024 +#define IDC_CHECKSERIAL 1025 #define IDC_EDIT1 1030 #define IDC_EDIT2 1031 #define IDC_EDIT3 1032 diff --git a/src/vid_cga.c b/src/vid_cga.c index 7e398e1bd..8a5f161b5 100644 --- a/src/vid_cga.c +++ b/src/vid_cga.c @@ -8,14 +8,13 @@ #include "timer.h" #include "video.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]; - -int cga_brown; -int cga_color_burst; +#define COMPOSITE_OLD 0 +#define COMPOSITE_NEW 1 static uint8_t crtcmask[32] = { @@ -48,7 +47,8 @@ void cga_out(uint16_t addr, uint8_t val, void *p) } return; case 0x3D8: - if (((cga->cgamode ^ val) & 5) != 0) { + if (((cga->cgamode ^ val) & 5) != 0) + { cga->cgamode = val; 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; // 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->charbuffer[ ((int)(((cga->dispontime - cga->vidtime) * 2) / CGACONST)) & 0xfc] = 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)); } -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) { cga_t *cga = (cga_t *)p; @@ -149,11 +134,7 @@ void cga_poll(void *p) int cols[4]; int col; 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) { cga->vidtime += cga->dispofftime; @@ -307,21 +288,12 @@ void cga_poll(void *p) if (cga->cgamode & 1) x = (cga->crtc[1] << 3) + 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++) + buffer32->line[cga->displine][c] = buffer->line[cga->displine][c] & 0xf; - for (c = 0; c < x; c++) - { - tarray[c] = buffer->line[cga->displine][c] & 0xf; - } - - Composite_Process(cga, 0, x >> 2, tarray); - - for (c = 0; c < x; c++) - { - ((uint32_t *) tline)[c] = ((uint32_t *) tarray)[c]; - } + Composite_Process(cga, 0, x >> 2, buffer32->line[cga->displine]); } cga->sc = oldsc; @@ -386,8 +358,7 @@ void cga_poll(void *p) { cga->cgadispon = 0; cga->displine = 0; - // cga->vsynctime = (cga->crtc[3] >> 4) + 1; - cga->vsynctime = 16; + cga->vsynctime = 16; if (cga->crtc[7]) { if (cga->cgamode & 1) x = (cga->crtc[1] << 3) + 16; @@ -403,7 +374,7 @@ void cga_poll(void *p) } 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); else video_blit_memtoscreen_8(0, cga->firstline - 4, xsize, (cga->lastline - cga->firstline) + 8); @@ -445,7 +416,8 @@ endblit(); cga->sc &= 31; 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)))) cga->con = 1; if (cga->cgadispon && (cga->cgamode & 1)) @@ -458,28 +430,27 @@ endblit(); void cga_init(cga_t *cga) { + cga->composite = 0; } void *cga_standalone_init() { - int c; - int cga_tint = -2; + int display_type; cga_t *cga = malloc(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_comp_init(cga); + cga_comp_init(cga); timer_add(cga_poll, &cga->vidtime, TIMER_ALWAYS_ENABLED, 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); - - for (c = 0; c < 8192; c++) - { - ((uint64_t *) tarray)[c] = 0; - } - overscan_x = overscan_y = 16; + overscan_x = overscan_y = 16; return cga; } @@ -499,26 +470,62 @@ void cga_speed_changed(void *p) cga_recalctimings(cga); } -device_t cga_device = +static device_config_t cga_config[] = { - "CGA (Old)", - 0, - cga_standalone_init, - cga_close, - NULL, - cga_speed_changed, - NULL, - NULL + { + .name = "display_type", + .description = "Display type", + .type = CONFIG_SELECTION, + .selection = + { + { + .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, cga_standalone_init, cga_close, NULL, cga_speed_changed, NULL, - NULL + NULL, + cga_config }; diff --git a/src/vid_cga.h b/src/vid_cga.h index 534608731..eb2fb8532 100644 --- a/src/vid_cga.h +++ b/src/vid_cga.h @@ -27,6 +27,9 @@ typedef struct cga_t uint8_t *vram; uint8_t charbuffer[256]; + + int revision; + int composite; } cga_t; 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_poll(void *p); -extern device_t cga_new_device; extern device_t cga_device; diff --git a/src/video.h b/src/video.h index 6c411cf8e..af6613e67 100644 --- a/src/video.h +++ b/src/video.h @@ -75,10 +75,6 @@ extern int enable_overscan; extern int overscan_x, overscan_y; /* Forcibly stretch emulated video output to 4:3 or not. */ 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. */ extern int enable_flash; diff --git a/src/win-config.c b/src/win-config.c index 4291802b2..4dfb9277d 100644 --- a/src/win-config.c +++ b/src/win-config.c @@ -172,12 +172,6 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR h=GetDlgItem(hdlg, IDC_CHECK4); 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); 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); 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); enable_flash=SendMessage(h, BM_GETCHECK, 0, 0); diff --git a/src/win-ddraw-fs.cc b/src/win-ddraw-fs.cc index b598d0a28..368d8c388 100644 --- a/src/win-ddraw-fs.cc +++ b/src/win-ddraw-fs.cc @@ -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++) { 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); } } } diff --git a/src/win-ddraw.cc b/src/win-ddraw.cc index d449f42fa..2893b15ef 100644 --- a/src/win-ddraw.cc +++ b/src/win-ddraw.cc @@ -252,8 +252,6 @@ static void ddraw_blit_memtoscreen_8(int x, int y, int w, int h) for (xx = 0; xx < w; 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); } } }