Subject: Re: Genesis emulators?
To: None <current-users@netbsd.org>
From: Michael Core <520079546242-0001@t-online.de>
List: current-users
Date: 05/09/2002 20:41:29
Peter Seebach wrote:

> In message <20020509154313.2c7ff807.520079546242-0001@t-online.de>,
> Michael Cor e writes:
> >This one works well, it lacks a fullscreen mode, only:
> >http://www.squish.net/generator
> 
> My attempt to get it to build failed for lack of <sys/soundcard.h>.

You'll have to patch a few lines. BTW, there's really something strange. I
had to exchange stat() against lseek() because stat() sets statbuf.st_size
to 0 here. I cannot understand that at all. The patch is at the end of
this post. Move to generator-0.34/main and run "patch < patchfile".

> >There's also one called "dgen", but it doesn't work if my soundcard _is
> >not_ busy:
> 
> >http://www.pknet.com/~joe/dgen-sdl.html
> 
> Weird!  I had noticed that dgen seemed to wedge.  I didn't try playing
> other sounds.

Alad*in without sound? Are you crazy?? ;-) Most Genesis games have really
cool sound. I wouldn't want to miss it.

--- generator.c.orig	Sat Oct 20 19:04:00 2001
+++ generator.c	Thu May  9 20:28:08 2002
@@ -3,9 +3,8 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
 #include <sys/types.h>
+#include <unistd.h>
 #include <fcntl.h>
 #include <ctype.h>
 #include <signal.h>
@@ -147,7 +146,7 @@
 char *gen_loadimage(const char *filename)
 {
   int file, imagetype, bytes, bytesleft;
-  struct stat statbuf;
+  off_t	filesize;
   const char *extension;
   uint8 *buffer;
   unsigned int blocks, x, i;
@@ -162,11 +161,31 @@
   }
 
   /* Load file */
-  if (stat(filename, &statbuf) != 0)
-    return ("Unable to stat file.");
-  cpu68k_romlen = statbuf.st_size;
+#ifdef ALLEGRO
+  if ((file = open(filename, O_RDONLY | O_BINARY, 0)) == -1) {
+#else
+  if ((file = open(filename, O_RDONLY)) == -1) {
+#endif
+    perror("open");
+    cpu68k_rom = NULL;
+    cpu68k_romlen = 0;
+    return ("Unable to open file.");
+  }
+
+  if (	(filesize = lseek(file, 0, SEEK_END)) == -1 || // get size
+  		lseek(file, 0, SEEK_SET) == -1) // then seek to start
+  {
+   perror ("lseek failed");
+   close (file);
+   return ("Error accessing file");
+  }
+  
+  cpu68k_romlen = filesize;
   if (cpu68k_romlen < 0x200)
-    return ("File is too small");
+  {
+    close(file);
+	return ("File is too small");
+  }	
 
   /* allocate enough memory plus 16 bytes for disassembler to cope
      with the last instruction */
@@ -176,16 +195,7 @@
   }
   gen_freerom = 1;
   memset(cpu68k_rom, 0, cpu68k_romlen + 16);
-#ifdef ALLEGRO
-  if ((file = open(filename, O_RDONLY | O_BINARY, 0)) == -1) {
-#else
-  if ((file = open(filename, O_RDONLY, 0)) == -1) {
-#endif
-    perror("open");
-    cpu68k_rom = NULL;
-    cpu68k_romlen = 0;
-    return ("Unable to open file.");
-  }
+
   buffer = cpu68k_rom;
   bytesleft = cpu68k_romlen;
   do {
--- gensoundp-unix.c.orig	Sat Oct  6 23:11:17 2001
+++ gensoundp-unix.c	Thu May  9 20:28:15 2002
@@ -22,7 +22,11 @@
 #  include "fm.h"
 #endif
 
-#include <sys/soundcard.h>
+#ifdef __NetBSD__
+#	include <soundcard.h>
+#else
+#	include <sys/soundcard.h>
+#endif /* __NetBSD__ */
 
 #define SOUND_DEVICE "/dev/dsp"