This commit is contained in:
waltje
2017-05-07 02:19:54 -04:00
12 changed files with 169 additions and 108 deletions

View File

@@ -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

View File

@@ -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, <oubattler@gmail.com>
# Fred N. van Kempen, <decwiz@yahoo.com>
@@ -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 \

View File

@@ -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<SOUNDBUFLEN*2;c++)
{
if (outbuffer[c] < -32768)
buf16[c] = -32768;
else if (outbuffer[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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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 (dacbufferpos<SOUNDBUFLEN+20) dacbuffer[dacbufferpos++]=(((int)(unsigned int)dac)-0x80)*0x20;
}
void adddac(int16_t *p)
{
int c;
if (dacbufferpos>SOUNDBUFLEN) dacbufferpos=SOUNDBUFLEN;
for (c=0;c<dacbufferpos;c++)
{
p[c<<1]+=(dacbuffer[c]);
p[(c<<1)+1]+=(dacbuffer[c]);
}
for (;c<SOUNDBUFLEN;c++)
{
p[c<<1]+=(dacbuffer[dacbufferpos-1]);
p[(c<<1)+1]+=(dacbuffer[dacbufferpos-1]);
}
dacbufferpos=0;
}

View File

@@ -1,2 +0,0 @@
void writedac(uint16_t addr, uint8_t val);
void writedacctrl(uint16_t addr, uint8_t val);

View File

@@ -4,7 +4,6 @@
#include "ibm.h"
#include "io.h"
#include "dac.h"
#include "lpt.h"
static uint8_t lpt1_dat, lpt2_dat;
@@ -15,11 +14,9 @@ void lpt1_write(uint16_t port, uint8_t val, void *priv)
switch (port & 3)
{
case 0:
writedac(port, val);
lpt1_dat = val;
break;
case 2:
writedacctrl(port, val);
lpt1_ctrl = val;
break;
}
@@ -30,8 +27,6 @@ uint8_t lpt1_read(uint16_t port, void *priv)
{
case 0:
return lpt1_dat;
case 1:
return readdacfifo();
case 2:
return lpt1_ctrl;
}
@@ -43,11 +38,9 @@ void lpt2_write(uint16_t port, uint8_t val, void *priv)
switch (port & 3)
{
case 0:
writedac(port, val);
lpt2_dat = val;
break;
case 2:
writedacctrl(port, val);
lpt2_ctrl = val;
break;
}
@@ -58,8 +51,6 @@ uint8_t lpt2_read(uint16_t port, void *priv)
{
case 0:
return lpt2_dat;
case 1:
return readdacfifo();
case 2:
return lpt2_ctrl;
}

View File

@@ -216,6 +216,9 @@
#ifdef ENABLE_LOG_BREAKPOINT
# define IDM_LOG_BREAKPOINT 51206
#endif
#ifdef ENABLE_VRAM_DUMP
# define IDM_DUMP_VRAM 51207
#endif
#define IDC_COMBO1 1000
#define IDC_COMBOVID 1001

View File

@@ -1843,6 +1843,12 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
break;
#endif
#ifdef ENABLE_VRAM_DUMP
case IDM_DUMP_VRAM:
svga_dump_vram();
break;
#endif
case IDM_CONFIG_LOAD:
pause = 1;
if (!file_dlg_st(hwnd, 2174, "", 0))