Merge branch 'master' of https://github.com/OBattler/86Box
This commit is contained in:
61
src/86Box.rc
61
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
|
||||
|
@@ -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 \
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
70
src/dac.c
70
src/dac.c
@@ -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;
|
||||
}
|
||||
|
@@ -1,2 +0,0 @@
|
||||
void writedac(uint16_t addr, uint8_t val);
|
||||
void writedacctrl(uint16_t addr, uint8_t val);
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user