Date: Sat, 27 Jan 2001 18:07:20 -0800 (PST) From: cyberwin@mail.ru To: freebsd-gnats-submit@FreeBSD.org Subject: misc/24687: QUAKE FORGE & SVGALIB Message-ID: <200101280207.f0S27KR22431@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 24687
>Category: misc
>Synopsis: QUAKE FORGE & SVGALIB
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat Jan 27 18:10:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Kovirshin Alexey
>Release: 4.1-R
>Organization:
>Environment:
FreeBSD orb.ru 4.1-RELEASE FreeBSD 4.1-RELEASE #2: Thu Jan 18 22:36:37 MSK 2001 root@orb.ru:/usr/src/sys/compile/PENTIUM i386
>Description:
Some patches for qf-0.1.1 and qf-0.2.99beta6
>How-To-Repeat:
>Fix:
Note: QuakeForge works with svgalibs, but mouse must be gpm and dev/sysmouse in /usr/local/etc/vga/libvga.conf
here patch for qf-0.1.1
-----patch-aa--
--- common/snd_oss.c.orig Wed Jan 19 13:01:04 2000
+++ common/snd_oss.c Thu Mar 30 17:41:06 2000
@@ -22,6 +22,7 @@
#include "quakedef.h"
#include <stdio.h>
+#ifndef SDL
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@@ -50,9 +51,30 @@
static int snd_inited;
static int tryrates[] = { 11025, 22051, 44100, 8000 };
+#else /* SDL */
+#include "SDL_audio.h"
+#include "SDL_byteorder.h"
+
+static dma_t the_shm;
+static int snd_inited;
+
+extern int desired_speed;
+extern int desired_bits;
+
+static void paint_audio(void *unused, Uint8 *stream, int len)
+{
+ if ( shm ) {
+ shm->buffer = stream;
+ shm->samplepos += len/(shm->samplebits/8);
+ // Check for samplepos overflow?
+ S_PaintChannels (shm->samplepos);
+ }
+}
+#endif /*SDL */
qboolean SNDDMA_Init(void)
{
+#ifndef SDL
int rc;
int fmt;
@@ -147,7 +169,7 @@
// memory map the dma buffer
shm->buffer = (unsigned char *) mmap(NULL, info.fragstotal
- * info.fragsize, PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0);
+ * info.fragsize, PROT_READ | PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0);
if (shm->buffer == MAP_FAILED)
{
@@ -240,11 +262,87 @@
snd_inited = 1;
return 1;
+#else /* SDL */
+
+ SDL_AudioSpec desired, obtained;
+
+ snd_inited = 0;
+
+ /* Set up the desired format */
+ desired.freq = desired_speed;
+ switch (desired_bits) {
+ case 8:
+ desired.format = AUDIO_U8;
+ break;
+ case 16:
+ if ( SDL_BYTEORDER == SDL_BIG_ENDIAN )
+ desired.format = AUDIO_S16MSB;
+ else
+ desired.format = AUDIO_S16LSB;
+ break;
+ default:
+ Con_Printf("Unknown number of audio bits: %d\n",
+ desired_bits);
+ return 0;
+ }
+ desired.channels = 2;
+ desired.samples = 512;
+ desired.callback = paint_audio;
+
+ /* Open the audio device */
+ if ( SDL_OpenAudio(&desired, &obtained) < 0 ) {
+ Con_Printf("Couldn't open SDL audio: %s\n", SDL_GetError());
+ return 0;
+ }
+
+ /* Make sure we can support the audio format */
+ switch (obtained.format) {
+ case AUDIO_U8:
+ /* Supported */
+ break;
+ case AUDIO_S16LSB:
+ case AUDIO_S16MSB:
+ if ( ((obtained.format == AUDIO_S16LSB) &&
+ (SDL_BYTEORDER == SDL_LIL_ENDIAN)) ||
+ ((obtained.format == AUDIO_S16MSB) &&
+ (SDL_BYTEORDER == SDL_BIG_ENDIAN)) ) {
+ /* Supported */
+ break;
+ }
+ /* Unsupported, fall through */;
+ default:
+ /* Not supported -- force SDL to do our bidding */
+ SDL_CloseAudio();
+ if ( SDL_OpenAudio(&desired, NULL) < 0 ) {
+ Con_Printf("Couldn't open SDL audio: %s\n",
+ SDL_GetError());
+ return 0;
+ }
+ memcpy(&obtained, &desired, sizeof(desired));
+ break;
+ }
+ SDL_PauseAudio(0);
+
+ /* Fill the audio DMA information block */
+ shm = &the_shm;
+ shm->splitbuffer = 0;
+ shm->samplebits = (obtained.format & 0xFF);
+ shm->speed = obtained.freq;
+ shm->channels = obtained.channels;
+ shm->samples = obtained.samples*shm->channels;
+ shm->samplepos = 0;
+ shm->submission_chunk = 1;
+ shm->buffer = NULL;
+
+ snd_inited = 1;
+ return 1;
+#endif /* SDL */
}
int SNDDMA_GetDMAPos(void)
{
+#ifndef SDL
struct count_info count;
if (!snd_inited) return 0;
@@ -260,6 +358,7 @@
// shm->samplepos = (count.bytes / (shm->samplebits / 8)) & (shm->samples-1);
// fprintf(stderr, "%d \r", count.ptr);
shm->samplepos = count.ptr / (shm->samplebits / 8);
+#endif /* SDL */
return shm->samplepos;
@@ -267,11 +366,17 @@
void SNDDMA_Shutdown(void)
{
+
if (snd_inited)
{
+#ifndef SDL
close(audio_fd);
+#else /* SDL */
+ SDL_CloseAudio();
+#endif
snd_inited = 0;
}
+
}
/*
----patch-ab---
--- configure.in.orig Sun Feb 27 14:26:03 2000
+++ configure.in Wed Dec 20 00:44:43 2000
@@ -185,7 +185,7 @@
HAS_SVGA=$withval, HAS_SVGA=auto)
if test "x$HAS_SVGA" != xno; then
if test "x$HAS_SVGA" != xauto; then
- SVGA_CFLAGS="$SVGA_CFLAGS= -I$withval/include"
+ SVGA_CFLAGS="$SVGA_CFLAGS -I$withval/include"
SVGA_LIBS="$SVGA_LIBS -L$withval/lib"
dnl The default system location is /usr/include or /usr/local/include
dnl and we (obviously) do not need to set CFLAGS for that
@@ -335,7 +335,7 @@
dnl Make sure -lpthread works (for SDL)
if test "x$HAS_SDL" = xyes; then
AC_CHECK_LIB(pthread, pthread_exit ,SDL_LIBS="$SDL_LIBS -lpthread"
- HAS_SDL=yes, HAS_SDL=no, [$SDL_LIBS])
+ HAS_SDL=yes, HAS_SDL=yes, [$SDL_LIBS])
fi
if test "x$HAS_SDL" != xyes; then
SDL_CFLAGS="" SDL_LIBS=""
---patch-ac----
--- uquake/Makefile.in.orig Wed Jan 19 04:24:41 2000
+++ uquake/Makefile.in Wed Dec 20 00:40:46 2000
@@ -282,10 +282,13 @@
$(COMMON_DIR)/@X11_VID_SRC@
$(CC) $(CFLAGS) $(X11_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/snd_oss.@OBJEXT@: $(COMMON_DIR)/snd_oss.c
+ $(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+
$(X11QUAKE): soft_DIR $(BUILD_DIR)/../$(X11QUAKE)
$(BUILD_DIR)/../$(X11QUAKE): $(ALL_X11_OBJS)
- $(CC) $(CFLAGS) $(ALL_X11_OBJS) $(X11_LDFLAGS) $(LDFLAGS) $(LIBS) \
+ $(CC) $(CFLAGS) $(ALL_X11_OBJS) $(X11_LDFLAGS) $(SDL_LDFLAGS) $(LDFLAGS) $(LIBS) \
-o $(BUILD_DIR)/../$(X11QUAKE)
endif
@@ -305,6 +308,9 @@
$(BUILD_DIR)/soft/vid_svgalib.@OBJEXT@: $(COMMON_DIR)/vid_svgalib.c
$(CC) $(CFLAGS) $(SVGA_CFLAGS) -O -o $@ -c $<
+$(BUILD_DIR)/soft/in_svgalib.@OBJEXT@: $(COMMON_DIR)/in_svgalib.c
+ $(CC) $(CFLAGS) $(SVGA_CFLAGS) -O -o $@ -c $<
+
$(BUILD_DIR)/soft/d_copy.@OBJEXT@: $(COMMON_DIR)/d_copy.s
$(CC) $(CFLAGS) -x assembler-with-cpp -o $@ -c $<
@@ -358,6 +364,9 @@
$(BUILD_DIR)/soft/cd_sdl.@OBJEXT@: $(COMMON_DIR)/cd_sdl.c
$(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/snd_oss.@OBJEXT@: $(COMMON_DIR)/snd_oss.c
+ $(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+
$(SDLQUAKE): soft_DIR $(BUILD_DIR)/../$(SDLQUAKE)
$(BUILD_DIR)/../$(SDLQUAKE): $(ALL_SDL_OBJS)
@@ -438,10 +447,13 @@
$(BUILD_DIR)/gl/dga_check.@OBJEXT@: $(COMMON_DIR)/dga_check.c
$(CC) $(CFLAGS) $(X11_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/snd_oss.@OBJEXT@: $(COMMON_DIR)/snd_oss.c
+ $(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+
$(GLQUAKE): gl_DIR $(BUILD_DIR)/../$(GLQUAKE)
$(BUILD_DIR)/../$(GLQUAKE): $(ALL_GL_OBJS)
- $(CC) $(CFLAGS) $(ALL_GL_OBJS) $(GL_LDFLAGS) $(LDFLAGS) $(LIBS) \
+ $(CC) $(CFLAGS) $(ALL_GL_OBJS) $(GL_LDFLAGS) $(SDL_LDFLAGS) $(LDFLAGS) $(LIBS) \
-o $(BUILD_DIR)/../$(GLQUAKE)
endif
---patch-ad---
--- qw_client/Makefile.in.orig Wed Jan 19 04:24:41 2000
+++ qw_client/Makefile.in Wed Dec 20 00:38:14 2000
@@ -277,10 +277,13 @@
$(COMMON_DIR)/@X11_VID_SRC@
$(CC) $(CFLAGS) $(X11_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/snd_oss.@OBJEXT@: $(COMMON_DIR)/snd_oss.c
+ $(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+
$(X11QUAKE): soft_DIR $(BUILD_DIR)/../$(X11QUAKE)
$(BUILD_DIR)/../$(X11QUAKE): $(ALL_X11_OBJS)
- $(CC) $(CFLAGS) $(ALL_X11_OBJS) $(X11_LDFLAGS) $(LDFLAGS) $(LIBS) \
+ $(CC) $(CFLAGS) $(ALL_X11_OBJS) $(X11_LDFLAGS) $(SDL_LDFLAGS) $(LDFLAGS) $(LIBS) \
-o $(BUILD_DIR)/../$(X11QUAKE)
endif
@@ -300,6 +303,9 @@
$(BUILD_DIR)/soft/vid_svgalib.@OBJEXT@: $(COMMON_DIR)/vid_svgalib.c
$(CC) -O $(CFLAGS) $(SVGA_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/in_svgalib.@OBJEXT@: $(COMMON_DIR)/in_svgalib.c
+ $(CC) -O $(CFLAGS) $(SVGA_CFLAGS) -o $@ -c $<
+
$(BUILD_DIR)/soft/d_copy.@OBJEXT@: $(COMMON_DIR)/d_copy.s
$(CC) $(CFLAGS) -x assembler-with-cpp -o $@ -c $<
@@ -353,6 +359,9 @@
$(BUILD_DIR)/soft/cd_sdl.@OBJEXT@: $(COMMON_DIR)/cd_sdl.c
$(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/snd_oss.@OBJEXT@: $(COMMON_DIR)/snd_oss.c
+ $(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+
$(SDLQUAKE): soft_DIR $(BUILD_DIR)/../$(SDLQUAKE)
$(BUILD_DIR)/../$(SDLQUAKE): $(ALL_SDL_OBJS)
@@ -402,10 +411,13 @@
$(BUILD_DIR)/gl/dga_check.@OBJEXT@: $(COMMON_DIR)/dga_check.c
$(CC) $(CFLAGS) $(X11_CFLAGS) -o $@ -c $<
+$(BUILD_DIR)/soft/snd_oss.@OBJEXT@: $(COMMON_DIR)/snd_oss.c
+ $(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ -c $<
+
$(GLQUAKE): gl_DIR $(BUILD_DIR)/../$(GLQUAKE)
$(BUILD_DIR)/../$(GLQUAKE): $(ALL_GL_OBJS)
- $(CC) $(CFLAGS) $(ALL_GL_OBJS) $(GL_LDFLAGS) $(LDFLAGS) $(LIBS) \
+ $(CC) $(CFLAGS) $(ALL_GL_OBJS) $(GL_LDFLAGS) $(SDL_LDFLAGS) $(LDFLAGS) $(LIBS) \
-o $(BUILD_DIR)/../$(GLQUAKE)
endif
---patch-ae------ common/vid_svgalib.c.orig Wed Jan 19 14:01:04 2000
+++ common/vid_svgalib.c Wed Dec 20 00:33:56 2000
@@ -90,10 +90,10 @@
if (VGA_planar) {
for (plane=0 ; plane<4 ; plane++) {
/* Select the correct plane for reading and writing */
- outb(0x02, 0x3C4);
- outb(1 << plane, 0x3C5);
- outb(4, 0x3CE);
- outb(plane, 0x3CF);
+ _outb(0x02, 0x3C4);
+ _outb(1 << plane, 0x3C5);
+ _outb(4, 0x3CE);
+ _outb(plane, 0x3CF);
for (i=0 ; i<(height << repshift) ; i += reps) {
for (k=0 ; k<reps ; k++) {
@@ -150,10 +150,10 @@
if (VGA_planar) {
for (plane=0 ; plane<4 ; plane++) {
/* Select the correct plane for writing */
- outb(2, 0x3C4);
- outb(1 << plane, 0x3C5);
- outb(4, 0x3CE);
- outb(plane, 0x3CF);
+ _outb(2, 0x3C4);
+ _outb(1 << plane, 0x3C5);
+ _outb(4, 0x3CE);
+ _outb(plane, 0x3CF);
for (i=0 ; i<(height << repshift) ; i += reps) {
for (k=0 ; k<reps ; k++) {
---patch-af---
--- configure.orig Tue Dec 19 03:07:49 2000
+++ configure Wed Dec 20 00:44:49 2000
@@ -3225,7 +3225,7 @@
if test "x$HAS_SVGA" != xno; then
if test "x$HAS_SVGA" != xauto; then
- SVGA_CFLAGS="$SVGA_CFLAGS= -I$withval/include"
+ SVGA_CFLAGS="$SVGA_CFLAGS -I$withval/include"
SVGA_LIBS="$SVGA_LIBS -L$withval/lib"
fi
save_CPPFLAGS="$CPPFLAGS"
---end-of-patches-for-qf-0.1.1---
here is patch for qf-0.2.99beta6
---begin---
--- ../../qf/source/cl_main.c Mon Jan 8 23:35:56 2001
+++ cl_main.c Thu Jan 18 01:01:14 2001
@@ -38,10 +38,6 @@
#include <ctype.h>
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-
#ifdef HAVE_WINSOCK_H
# include <winsock.h>
#endif
@@ -89,6 +85,10 @@
#include "view.h"
#include "va.h"
#include "winquake.h"
+
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
#ifdef __sun
/* Sun's model_t in sys/model.h conflicts w/ Quake's model_t */
--- ../../qf/source/vid_svgalib.c Tue Jan 9 03:03:08 2001
+++ vid_svgalib.c Sat Jan 27 12:41:09 2001
@@ -58,6 +58,7 @@
void VGA_UpdatePlanarScreen (void *srcbuffer);
+void _outb (unsigned, unsigned);
unsigned short d_8to16table[256];
@@ -107,10 +108,10 @@
if (VGA_planar) {
for (plane = 0; plane < 4; plane++) {
/* Select the correct plane for reading and writing */
- outb (0x02, 0x3C4);
- outb (1 << plane, 0x3C5);
- outb (4, 0x3CE);
- outb (plane, 0x3CF);
+ _outb (0x02, 0x3C4);
+ _outb (1 << plane, 0x3C5);
+ _outb (4, 0x3CE);
+ _outb (plane, 0x3CF);
for (i = 0; i < (height << repshift); i += reps) {
for (k = 0; k < reps; k++) {
@@ -165,10 +166,10 @@
if (VGA_planar) {
for (plane = 0; plane < 4; plane++) {
/* Select the correct plane for writing */
- outb (2, 0x3C4);
- outb (1 << plane, 0x3C5);
- outb (4, 0x3CE);
- outb (plane, 0x3CF);
+ _outb (2, 0x3C4);
+ _outb (1 << plane, 0x3C5);
+ _outb (4, 0x3CE);
+ _outb (plane, 0x3CF);
for (i = 0; i < (height << repshift); i += reps) {
for (k = 0; k < reps; k++) {
---end-of-patch-qf.0.2.99beta6---
Have Fun Quake Playing!
all questions to E-mail :)
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200101280207.f0S27KR22431>
