diff --git a/src/86Box.rc b/src/86Box.rc index a36f17ca4..8bc4756d9 100644 --- a/src/86Box.rc +++ b/src/86Box.rc @@ -142,6 +142,41 @@ BEGIN MENUITEM "Take s&creenshot\tCtrl+F11", IDM_VID_SCREENSHOT END MENUITEM "S&tatus", IDM_STATUS +#ifdef ENABLE_LOG_TOGGLES +#if defined ENABLE_BUSLOGIC_LOG || defined ENABLE_CDROM_LOG || defined ENABLE_D86F_LOG || defined ENABLE_FDC_LOG || defined ENABLE_IDE_LOG || defined ENABLE_NE2000_LOG + MENUITEM SEPARATOR +#endif +#ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "Enable BusLogic logs\tCtrl+F4", IDM_LOG_BUSLOGIC +#endif +#ifdef ENABLE_CDROM_LOG + MENUITEM "Enable CD-ROM logs\tCtrl+F5", IDM_LOG_CDROM +#endif +#ifdef ENABLE_D86F_LOG + MENUITEM "Enable floppy (86F) logs\tCtrl+F6", IDM_LOG_D86F +#endif +#ifdef ENABLE_FDC_LOG + MENUITEM "Enable floppy controller logs\tCtrl+F7", IDM_LOG_FDC +#endif +#ifdef ENABLE_IDE_LOG + MENUITEM "Enable IDE logs\tCtrl+F8", IDM_LOG_IDE +#endif +#ifdef ENABLE_NE2000_LOG + MENUITEM "Enable NE2000 logs\tCtrl+F9", IDM_LOG_NE2000 +#endif +#endif +#ifdef ENABLE_LOG_BREAKPOINT + MENUITEM SEPARATOR + MENUITEM "&Log breakpoint\tCtrl+F10", IDM_LOG_BREAKPOINT +#ifdef ENABLE_VRAM_DUMP + MENUITEM "Dump &video RAM\tCtrl+F1", IDM_DUMP_VRAM +#endif +#else +#ifdef ENABLE_VRAM_DUMP + MENUITEM SEPARATOR + MENUITEM "Dump &video RAM\tCtrl+F1", IDM_DUMP_VRAM +#endif +#endif END POPUP "&Help" BEGIN @@ -157,6 +192,32 @@ END MAINACCEL ACCELERATORS MOVEABLE PURE BEGIN +#ifdef ENABLE_VRAM_DUMP + VK_F1, IDM_DUMP_VRAM, CONTROL, VIRTKEY +#endif +#ifdef ENABLE_LOG_TOGGLES +#ifdef ENABLE_BUSLOGIC_LOG + VK_F4, IDM_LOG_BUSLOGIC, CONTROL, VIRTKEY +#endif +#ifdef ENABLE_CDROM_LOG + VK_F5, IDM_LOG_CDROM, CONTROL, VIRTKEY +#endif +#ifdef ENABLE_D86F_LOG + VK_F6, IDM_LOG_D86F, CONTROL, VIRTKEY +#endif +#ifdef ENABLE_FDC_LOG + VK_F7, IDM_LOG_FDC, CONTROL, VIRTKEY +#endif +#ifdef ENABLE_IDE_LOG + VK_F8, IDM_LOG_IDE, CONTROL, VIRTKEY +#endif +#ifdef ENABLE_NE2000_LOG + VK_F9, IDM_LOG_NE2000, CONTROL, VIRTKEY +#endif +#endif +#ifdef ENABLE_LOG_BREAKPOINT + VK_F10, IDM_LOG_BREAKPOINT, CONTROL, VIRTKEY +#endif VK_F11, IDM_VID_SCREENSHOT, VIRTKEY, CONTROL VK_F12, IDM_FILE_RESET_CAD, VIRTKEY, CONTROL END diff --git a/src/Makefile.mingw b/src/Makefile.mingw index d6b69b774..71ce8e4e7 100644 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -8,7 +8,7 @@ # # Modified Makefile for Win32 MinGW 32-bit environment. # -# Version: @(#)Makefile.mingw 1.0.6 2017/05/06 +# Version: @(#)Makefile.mingw 1.0.7 2017/05/07 # # Authors: Kotori, # Fred N. van Kempen, @@ -44,7 +44,11 @@ WINDRES = windres.exe OPTS = -DWIN32 $(EXTRAS) $(STUFF) ifeq ($(DEBUG), y) +ifeq ($(VRAMDUMP), y) +DFLAGS = -march=i686 -ggdb -DDEBUG -DENABLE_VRAM_DUMP +else DFLAGS = -march=i686 -ggdb -DDEBUG +endif COPTIM = -Og else ifeq ($(OPTIM), y) @@ -66,9 +70,19 @@ AOPTIM = endif AFLAGS = -msse -msse2 \ -mfpmath=sse +ifeq ($(RELEASE), y) +CFLAGS = $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) $(AFLAGS) \ + -fomit-frame-pointer -mstackrealign -DRELEASE_BUILD +RFLAGS = --input-format=rc -O coff -DRELEASE_BUILD +else CFLAGS = $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) $(AFLAGS) \ -fomit-frame-pointer -mstackrealign +ifeq ($(VRAMDUMP), y) +RFLAGS = --input-format=rc -O coff -DENABLE_VRAM_DUMP +else RFLAGS = --input-format=rc -O coff +endif +endif ifeq ($(X64), y) PLATCG = codegen_x86-64.o @@ -125,7 +139,7 @@ SNDOBJ = sound.o \ wave8580__ST.o wave8580_P_T.o wave8580_PS_.o \ wave8580_PST.o wave.o \ dbopl.o nukedopl.o openal.o \ - snd_speaker.o dac.o snd_ps1.o snd_pssj.o \ + snd_speaker.o snd_ps1.o snd_pssj.o \ snd_adlib.o snd_adlibgold.o snd_ad1848.o \ snd_sb.o snd_sb_dsp.o snd_cms.o snd_dbopl.o \ snd_emu8k.o snd_gus.o snd_opl.o \ diff --git a/src/SOUND/sound.c b/src/SOUND/sound.c index 1b60e3068..aa4c944bd 100644 --- a/src/SOUND/sound.c +++ b/src/SOUND/sound.c @@ -270,7 +270,6 @@ void sound_poll(void *priv) if (sound_pos_global == SOUNDBUFLEN) { int c; -/* int16_t buf16[SOUNDBUFLEN * 2 ];*/ memset(outbuffer, 0, SOUNDBUFLEN * 2 * sizeof(int32_t)); @@ -278,19 +277,6 @@ void sound_poll(void *priv) sound_handlers[c].get_buffer(outbuffer, SOUNDBUFLEN, sound_handlers[c].priv); -/* for (c=0;c 32767) - buf16[c] = 32767; - else - buf16[c] = outbuffer[c]; - } - - if (!soundf) soundf=fopen("sound.pcm","wb"); - fwrite(buf16,(SOUNDBUFLEN)*2*2,1,soundf);*/ - for (c = 0; c < SOUNDBUFLEN * 2; c++) { outbuffer_ex[c] = ((float) outbuffer[c]) / 32768.0; diff --git a/src/VIDEO/vid_s3.c b/src/VIDEO/vid_s3.c index 9feac48de..a597cbad8 100644 --- a/src/VIDEO/vid_s3.c +++ b/src/VIDEO/vid_s3.c @@ -2391,7 +2391,7 @@ static device_config_t s3_phoenix_trio64_config[] = } }, { - "card_id", "Card ID", CONFIG_SELECTION, "", 1, + "card_id", "Card ID", CONFIG_SELECTION, "", 0, { { "S3 Trio64", 0 diff --git a/src/VIDEO/vid_svga.c b/src/VIDEO/vid_svga.c index bb54d1498..80d5983cc 100644 --- a/src/VIDEO/vid_svga.c +++ b/src/VIDEO/vid_svga.c @@ -8,6 +8,9 @@ #include "../ibm.h" #include "../io.h" #include "../mem.h" +#ifdef ENABLE_VRAM_DUMP +#include "../rom.h" +#endif #include "../timer.h" #include "video.h" #include "vid_svga.h" @@ -916,6 +919,11 @@ void svga_poll(void *p) } } +#ifdef ENABLE_VRAM_DUMP +uint8_t *ext_vram; +int ext_memsize; +#endif + int svga_init(svga_t *svga, void *p, int memsize, void (*recalctimings_ex)(struct svga_t *svga), uint8_t (*video_in) (uint16_t addr, void *p), @@ -950,6 +958,10 @@ int svga_init(svga_t *svga, void *p, int memsize, svga->dispofftime = 1000 * (1 << TIMER_SHIFT); svga->bpp = 8; svga->vram = malloc(memsize); +#ifdef ENABLE_VRAM_DUMP + ext_vram = svga->vram; + ext_memsize = memsize; +#endif svga->vram_limit = memsize; svga->vrammask = memsize - 1; svga->changedvram = malloc(/*(memsize >> 12) << 1*/memsize >> 12); @@ -1008,21 +1020,38 @@ void svga_write(uint32_t addr, uint8_t val, void *p) if (!(svga->gdcreg[6] & 1)) svga->fullchange=2; if (svga->chain4 || svga->fb_only) { + /* + 00000 -> writemask 1, addr 0 -> vram addr 00000 + 00001 -> writemask 2, addr 0 -> vram addr 00001 + 00002 -> writemask 4, addr 0 -> vram addr 00002 + 00003 -> writemask 8, addr 0 -> vram addr 00003 + 00004 -> writemask 1, addr 4 -> vram addr 00004 + 00005 -> writemask 2, addr 4 -> vram addr 00005 + 00006 -> writemask 4, addr 4 -> vram addr 00006 + 00007 -> writemask 8, addr 4 -> vram addr 00007 + */ writemask2=1<<(addr&3); addr&=~3; } else if (svga->chain2_write) { - if ((svga->gdcreg[6] & 0xC) == 0x4) +#if 0 + if (svga->oddeven_page) { - writemask2 &= (svga->oddeven_page ? ~0xe : ~0xb); + /* Odd/Even page is 1, mask out plane 2 or 3, according to bit 0 of the address. */ + writemask2 &= (addr & 1) ? 8 : 4; } else { - writemask2 &= ~0xa; + /* Odd/Even page is 2, mask out plane 0 or 1, according to bit 0 of the address. */ + writemask2 &= (addr & 1) ? 2 : 1; } +#endif + + writemask2 &= ~0xa; if (addr & 1) - writemask2 <<= 1; + writemask2 <<= 1; + addr &= ~1; addr <<= 2; } @@ -1212,7 +1241,12 @@ uint8_t svga_read(uint32_t addr, void *p) } else if (svga->chain2_read) { - readplane = (readplane & 2) | (addr & 1); + readplane = addr & 1; + if (svga->oddeven_page) + { + readplane |= 2; + } + addr &= ~1; addr <<= 2; } @@ -1275,16 +1309,23 @@ void svga_write_linear(uint32_t addr, uint8_t val, void *p) } else if (svga->chain2_write) { - if ((svga->gdcreg[6] & 0xC) == 0x4) +#if 0 + if (svga->oddeven_page) { - writemask2 &= (svga->oddeven_page ? ~0xe : ~0xb); + /* Odd/Even page is 1, mask out plane 2 or 3, according to bit 0 of the address. */ + writemask2 &= (addr & 1) ? 8 : 4; } else { - writemask2 &= ~0xa; + /* Odd/Even page is 2, mask out plane 0 or 1, according to bit 0 of the address. */ + writemask2 &= (addr & 1) ? 2 : 1; } +#endif + + writemask2 &= ~0xa; if (addr & 1) writemask2 <<= 1; + addr &= ~1; addr <<= 2; } @@ -1469,7 +1510,12 @@ uint8_t svga_read_linear(uint32_t addr, void *p) } else if (svga->chain2_read) { - readplane = (readplane & 2) | (addr & 1); + readplane = addr & 1; + if (svga->oddeven_page) + { + readplane |= 2; + } + addr &= ~1; addr <<= 2; } @@ -1816,6 +1862,28 @@ uint32_t svga_readl_linear(uint32_t addr, void *p) } +#ifdef ENABLE_VRAM_DUMP +void svga_dump_vram() +{ + FILE *f; + + if (ext_vram == NULL) + { + return; + } + + f = nvrfopen(L"svga_vram.dmp", L"wb"); + if (f == NULL) + { + return; + } + + fwrite(ext_vram, ext_memsize, 1, f); + + fclose(f); +} +#endif + void svga_add_status_info(char *s, int max_len, void *p) { svga_t *svga = (svga_t *)p; diff --git a/src/VIDEO/video.h b/src/VIDEO/video.h index 83e50bc1d..7054c33b3 100644 --- a/src/VIDEO/video.h +++ b/src/VIDEO/video.h @@ -121,3 +121,7 @@ void video_updatetiming(); void hline(BITMAP *b, int x1, int y, int x2, uint32_t col); void updatewindowsize(int x, int y); + +#ifdef ENABLE_VRAM_DUMP +void svga_dump_vram(); +#endif diff --git a/src/amstrad.c b/src/amstrad.c index c1f0ef763..a6dacab9c 100644 --- a/src/amstrad.c +++ b/src/amstrad.c @@ -15,7 +15,7 @@ uint8_t amstrad_read(uint16_t port, void *priv) switch (port) { case 0x379: - return 7 | readdacfifo(); + return 7; case 0x37a: if (romset == ROM_PC1512) return 0x20; if (romset == ROM_PC200) return 0x80; diff --git a/src/dac.c b/src/dac.c deleted file mode 100644 index 7aecf02f5..000000000 --- a/src/dac.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright holders: Sarah Walker - see COPYING for more details -*/ -#include "ibm.h" -#include "dac.h" - -uint8_t dac,dac2; -uint8_t dacctrl; -int lptfifo; -uint8_t dssbuffer[16]; -int dssstart=0,dssend=0; -int dssmode=0; - -void writedac(uint16_t addr, uint8_t val) -{ - if (dssmode) dac2=val; - else dac=val; -} - -void writedacctrl(uint16_t addr, uint8_t val) -{ - if (dacctrl&8 && !(val&8) && (lptfifo!=16)) - { - dssbuffer[dssend++]=dac2; - dssend&=15; - lptfifo++; - } - dacctrl=val; -} - -uint8_t readdacfifo() -{ - if (lptfifo==16) return 0x40; - return 0; -} - -void pollss() -{ - if (lptfifo) - { - dac=dssbuffer[dssstart++]; - dssstart&=15; - lptfifo--; - } -} - -int16_t dacbuffer[SOUNDBUFLEN+20]; -int dacbufferpos=0; -void getdacsamp() -{ - if (dacbufferposSOUNDBUFLEN) dacbufferpos=SOUNDBUFLEN; - for (c=0;c