Revision: 18949
http://vice-emu.svn.sourceforge.net/vice-emu/?rev=18949&view=rev
Author: strik
Date: 2008-07-03 00:23:35 -0700 (Thu, 03 Jul 2008)
Log Message:
-----------
2008-07-01 Marco van den Heuvel <bla...@ya...>
* doc/GP2X-Howto.txt, doc/Makefile.am: Added a GP2X compile
howto text file.
* src/arch/win32/ui.c, src/c128/c128mem.c, src/c64/c64mem.c,
src/cbm2/cbm2mem.c, src/mem.h, src/monitor/monitor.c,
src/pet/petmem.c, src/plus4/plus4mem.c, src/vic20/vic20mem.c:
Fixed the returned values of the mem_get_screen_parameter() of
some of the emulators, and added a bank parameter to the
mem_get_screen_parameter() function, this was needed to get it
to work for xcbm2.
* src/sound.h: Added a static inline 2-channel digital audio
mixing routine.
* src/c64/digimax.c, src/pet/petsound.c, src/plus4/ted-sound.c,
src/vic20/vic20sound.c: Fixed to use proper digital audio
mixing.
Modified Paths:
--------------
trunk/vice/ChangeLog
trunk/vice/doc/Makefile.am
trunk/vice/src/ChangeLog
trunk/vice/src/arch/win32/ui.c
trunk/vice/src/c128/c128mem.c
trunk/vice/src/c64/c64mem.c
trunk/vice/src/c64/digimax.c
trunk/vice/src/cbm2/cbm2mem.c
trunk/vice/src/mem.h
trunk/vice/src/monitor/monitor.c
trunk/vice/src/pet/petmem.c
trunk/vice/src/pet/petsound.c
trunk/vice/src/plus4/plus4mem.c
trunk/vice/src/plus4/ted-sound.c
trunk/vice/src/sound.h
trunk/vice/src/vic20/vic20mem.c
trunk/vice/src/vic20/vic20sound.c
Modified: trunk/vice/ChangeLog
===================================================================
--- trunk/vice/ChangeLog 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/ChangeLog 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1,3 +1,8 @@
+2008-07-01 Marco van den Heuvel <bla...@ya...>
+
+ * doc/GP2X-Howto.txt, doc/Makefile.am: Added a GP2X compile
+ howto text file.
+
2008-07-02 Andreas Matthies <and...@gm...>
* doc/html/plain/BUGS, NEWS: Updated.
Modified: trunk/vice/doc/Makefile.am
===================================================================
--- trunk/vice/doc/Makefile.am 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/doc/Makefile.am 2008-07-03 07:23:35 UTC (rev 18949)
@@ -17,7 +17,8 @@
cartconv.txt \
iec-bus.txt \
mon.txt \
- openGLsync-howto.txt
+ openGLsync-howto.txt \
+ GP2X-Howto.txt
info_TEXINFOS = vice.texi
Modified: trunk/vice/src/ChangeLog
===================================================================
--- trunk/vice/src/ChangeLog 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/ChangeLog 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1,3 +1,18 @@
+2008-07-01 Marco van den Heuvel <bla...@ya...>
+
+ * arch/win32/ui.c, c128/c128mem.c, c64/c64mem.c, cbm2/cbm2mem.c,
+ mem.h, monitor/monitor.c, pet/petmem.c, plus4/plus4mem.c,
+ vic20/vic20mem.c: Fixed the returned values of the
+ mem_get_screen_parameter() of some of the emulators, and added a
+ bank parameter to the mem_get_screen_parameter() function, this
+ was needed to get it to work for xcbm2.
+
+ * sound.h: Added a static inline 2-channel digital audio mixing
+ routine.
+
+ * c64/digimax.c, pet/petsound.c, plus4/ted-sound.c,
+ vic20/vic20sound.c: Fixed to use proper digital audio mixing.
+
2008-07-02 Spiro Trikaliotis <spi...@gm...>
* arch/win32/Makefile.am: Renamed _all.dsp to _vice.dsp
Modified: trunk/vice/src/arch/win32/ui.c
===================================================================
--- trunk/vice/src/arch/win32/ui.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/arch/win32/ui.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -991,9 +991,10 @@
BYTE allrows, allcols;
unsigned int row, col;
unsigned int size;
+ int bank;
char * p;
- mem_get_screen_parameter(&base, &allrows, &allcols);
+ mem_get_screen_parameter(&base, &allrows, &allcols, &bank);
size = allrows * (allcols + 2) + 1;
@@ -1010,7 +1011,7 @@
for (col = 0; col < allcols; col++) {
BYTE data;
- data = mem_bank_peek(0, base++, NULL);
+ data = mem_bank_peek(bank, base++, NULL);
data = charset_p_toascii(charset_screencode_to_petcii(data), 1);
if (data != ' ') {
Modified: trunk/vice/src/c128/c128mem.c
===================================================================
--- trunk/vice/src/c128/c128mem.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/c128/c128mem.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1123,12 +1123,13 @@
return mem_ioreg_list;
}
-void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns)
+void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank)
{
*base = ((vicii_peek(0xd018) & 0xf0) << 6)
| ((~cia2_peek(0xdd00) & 0x03) << 14);
*rows = 25;
*columns = 40;
+ *bank = 0;
}
/* ------------------------------------------------------------------------- */
Modified: trunk/vice/src/c64/c64mem.c
===================================================================
--- trunk/vice/src/c64/c64mem.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/c64/c64mem.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1060,12 +1060,13 @@
return mem_ioreg_list;
}
-void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns)
+void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank)
{
*base = ((vicii_peek(0xd018) & 0xf0) << 6)
| ((~cia2_peek(0xdd00) & 0x03) << 14);
*rows = 25;
*columns = 40;
+ *bank = 0;
}
/* ------------------------------------------------------------------------- */
Modified: trunk/vice/src/c64/digimax.c
===================================================================
--- trunk/vice/src/c64/digimax.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/c64/digimax.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -166,12 +166,18 @@
int interleave, int *delta_t)
{
int i;
+ SWORD ch1and2;
+ SWORD ch3and4;
+ SWORD channels;
if (sid_sound_machine_cycle_based()==0 && digimax_enabled)
{
for (i=0; i<nr; i++)
{
- pbuf[i*interleave]+=(snd.voice0+snd.voice1+snd.voice2+snd.voice3)<<6;
+ ch1and2=sound_audio_mix(snd.voice0<<8,snd.voice1<<8);
+ ch3and4=sound_audio_mix(snd.voice2<<8,snd.voice3<<8);
+ channels=sound_audio_mix(ch1and2,ch3and4);
+ pbuf[i*interleave]=sound_audio_mix(pbuf[i*interleave],channels);
}
}
return 0;
Modified: trunk/vice/src/cbm2/cbm2mem.c
===================================================================
--- trunk/vice/src/cbm2/cbm2mem.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/cbm2/cbm2mem.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1146,12 +1146,12 @@
return mem_ioreg_list;
}
-void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns)
+void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank)
{
- /* FIXME */
- *base = 0;
+ *base = 0xd000;
*rows = 25;
- *columns = 80;
+ *columns = (cbm2_isC500) ? 40 : 80;
+ *bank = 16;
}
void mem_color_ram_to_snapshot(BYTE *color_ram)
Modified: trunk/vice/src/mem.h
===================================================================
--- trunk/vice/src/mem.h 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/mem.h 2008-07-03 07:23:35 UTC (rev 18949)
@@ -75,7 +75,7 @@
extern BYTE mem_bank_read(int bank, WORD addr, void *context);
extern BYTE mem_bank_peek(int bank, WORD addr, void *context);
extern void mem_bank_write(int bank, WORD addr, BYTE byte, void *context);
-extern void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns);
+extern void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank);
typedef struct mem_ioreg_list_s {
const char *name;
Modified: trunk/vice/src/monitor/monitor.c
===================================================================
--- trunk/vice/src/monitor/monitor.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/monitor/monitor.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1038,8 +1038,9 @@
WORD base;
BYTE rows, cols;
unsigned int r, c;
+ int bank;
- mem_get_screen_parameter(&base, &rows, &cols);
+ mem_get_screen_parameter(&base, &rows, &cols, &bank);
for (r = 0; r < rows; r++) {
for (c = 0; c < cols; c++) {
BYTE data;
Modified: trunk/vice/src/pet/petmem.c
===================================================================
--- trunk/vice/src/pet/petmem.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/pet/petmem.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -946,7 +946,7 @@
return mem_ioreg_list;
}
-void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns)
+void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank)
{
int cols;
@@ -955,6 +955,7 @@
*base = 0x8000;
*rows = 25;
*columns = (BYTE)cols;
+ *bank = 0;
}
/*-----------------------------------------------------------------------*/
Modified: trunk/vice/src/pet/petsound.c
===================================================================
--- trunk/vice/src/pet/petsound.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/pet/petsound.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -101,7 +101,7 @@
else if (snd.manual)
v = 20000;
- pbuf[i * interleave] += v;
+ pbuf[i * interleave] = sound_audio_mix(pbuf[i * interleave],(SWORD)v);
snd.b += snd.bs;
while (snd.b >= 8.0)
snd.b -= 8.0;
Modified: trunk/vice/src/plus4/plus4mem.c
===================================================================
--- trunk/vice/src/plus4/plus4mem.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/plus4/plus4mem.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -1056,10 +1056,11 @@
return mem_ioreg_list;
}
-void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns)
+void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank)
{
*base = (ted_peek(0xff14) & 0xf8) << 8 | 0x400;
*rows = 25;
*columns = 40;
+ *bank = 0;
}
Modified: trunk/vice/src/plus4/ted-sound.c
===================================================================
--- trunk/vice/src/plus4/ted-sound.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/plus4/ted-sound.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -96,9 +96,9 @@
if (snd.digital) {
for (i = 0; i < nr; i++) {
- pbuf[i * interleave] += (SDWORD)(snd.volume *
+ pbuf[i * interleave] = sound_audio_mix(pbuf[i * interleave], (snd.volume *
(snd.voice0_output_enabled
- + snd.voice1_output_enabled));
+ + snd.voice1_output_enabled)));
}
} else {
for (i = 0; i < nr; i++) {
@@ -176,7 +176,7 @@
&& (!(snd.noise_shift_register & 1)))
volume += snd.volume;
- pbuf[i * interleave] += volume;
+ pbuf[i * interleave] = sound_audio_mix(pbuf[i * interleave], volume);
}
}
return 0;
Modified: trunk/vice/src/sound.h
===================================================================
--- trunk/vice/src/sound.h 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/sound.h 2008-07-03 07:23:35 UTC (rev 18949)
@@ -85,6 +85,23 @@
int need_attenuation;
} sound_device_t;
+static inline SWORD sound_audio_mix(SWORD ch1, SWORD ch2)
+{
+ if (ch1 == 0)
+ return ch2;
+
+ if (ch2 == 0)
+ return ch1;
+
+ if ((ch1 > 0 && ch2 < 0) || (ch1 < 0 && ch2 >0))
+ return ch1+ch2;
+
+ if (ch1 > 0)
+ return (SWORD)((SDWORD)(ch1 + ch2) - (SDWORD)(ch1 * ch2 / 32768));
+
+ return (SWORD)-((SDWORD)(-(ch1) + -(ch2)) - (SDWORD)(-(ch1) * -(ch2) / 32768));
+}
+
/* Sound adjustment types. */
#define SOUND_ADJUST_FLEXIBLE 0
#define SOUND_ADJUST_ADJUSTING 1
Modified: trunk/vice/src/vic20/vic20mem.c
===================================================================
--- trunk/vice/src/vic20/vic20mem.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/vic20/vic20mem.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -819,11 +819,12 @@
return mem_ioreg_list;
}
-void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns)
+void mem_get_screen_parameter(WORD *base, BYTE *rows, BYTE *columns, int *bank)
{
*base = ((vic_peek(0x9005) & 0x80) ? 0 : 0x8000) + ((vic_peek(0x9005) & 0x70) << 6) + ((vic_peek(0x9002) & 0x80) << 2);
*rows = (vic_peek(0x9003) & 0x7e) >> 1;
*columns = vic_peek(0x9002) & 0x7f;
+ *bank = 0;
}
/************************************************************************/
Modified: trunk/vice/src/vic20/vic20sound.c
===================================================================
--- trunk/vice/src/vic20/vic20sound.c 2008-07-02 18:33:34 UTC (rev 18948)
+++ trunk/vice/src/vic20/vic20sound.c 2008-07-03 07:23:35 UTC (rev 18949)
@@ -99,7 +99,7 @@
int real_sample_counter;
vicbuf = (((vic_sound_run(snd.cycles_per_sample) * snd.vol) / (snd.cycles_per_sample))<<9) - (snd.vol*0x800);
- pbuf[i * interleave] += vicbuf;
+ pbuf[i * interleave] = sound_audio_mix(pbuf[i * interleave], vicbuf);
if (vicbuf != 0 && sample_counter != -1)
sample_counter = -1;
@@ -109,7 +109,7 @@
real_sample_counter = sample_counter*44100/snd.speed;
if (real_sample_counter < VIC20CLICK_LEN)
{
- pbuf[i * interleave] += (SWORD)vic20click[real_sample_counter]*sample_volume;
+ pbuf[i * interleave] = sound_audio_mix(pbuf[i * interleave], (SWORD)vic20click[real_sample_counter]*sample_volume);
sample_counter++;
}
else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|