Re: [Tuxnes-devel] tuxnes and efp (fwd)
Brought to you by:
tmmm
From: Mike M. <che...@ya...> - 2004-02-24 22:41:46
|
Yes, translate is part of the x86 core. You must be running 0.75 or older. I'l test with the latesed code. Try this patch from CVS. http://cvs.sourceforge.net/viewcvs.py/tuxnes/tuxnes/Attic/dynrec.c?r1=1.9&r2=1.10&sortby=date&diff_format=u =================================================================== RCS file: /cvsroot/tuxnes/tuxnes/Attic/dynrec.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- tuxnes/tuxnes/Attic/dynrec.c 2001/04/11 21:45:47 1.9 +++ tuxnes/tuxnes/Attic/dynrec.c 2001/05/02 23:55:20 1.10 @@ -4,7 +4,7 @@ * Please see the README and COPYING files for more information regarding * this project. * - * $Id: dynrec.c,v 1.9 2001/04/11 21:45:47 tmmm Exp $ + * $Id: dynrec.c,v 1.10 2001/05/02 23:55:20 pez3 Exp $ * * Description: This is the dynamic recompiler. This takes 6502 code as * input, looks up the opcodes in the translation dictionary, evaluates @@ -96,21 +96,27 @@ l = *(sptr++); o = *(sptr++); /*printf("[%c%d %d]",m,o,l);fflush(stdout); */ - if (m == '!') - stop = 1; - if (m == 'B') - bptr[l] = *(MAPTABLE[(saddr + o) >> 12] + (saddr + o)); - if (m == 'C') - bptr[l] = ~*(MAPTABLE[(saddr + o) >> 12] + (saddr + o)); - if (m == 'D') - *((unsigned int *) (bptr + l)) = (unsigned int) bptr + l + o; - if (m == 'E') - *((int *) (bptr + l)) = *((signed char *) (MAPTABLE[(saddr + + switch(m) { + case '!': + stop = 1; + break; + case 'B': + bptr[l] = *(MAPTABLE[(saddr + o) >> 12] + (saddr + o)); + break; + case 'C': + bptr[l] = ~*(MAPTABLE[(saddr + o) >> 12] + (saddr + o)); + break; + case 'D': + *((unsigned int *) (bptr + l)) = (unsigned int) bptr + l + o; + break; + case 'E': + *((int *) (bptr + l)) = *((signed char *) (MAPTABLE[(saddr + o) >> 12] + (saddr + o))); - if (m == 'Z') - *((unsigned int *) (bptr + l)) = (unsigned int) ZPMEM + - *(MAPTABLE[(saddr + break; + case 'Z': + *((unsigned int *) (bptr + l)) = (unsigned int) ZPMEM + + *(MAPTABLE[(saddr + o) >> @@ -118,9 +124,10 @@ + saddr + o); - if (m == 'A') - *((unsigned int *) (bptr + l)) = (unsigned int) RAM + - *(MAPTABLE[(saddr + break; + case 'A': + *((unsigned int *) (bptr + l)) = (unsigned int) RAM + + *(MAPTABLE[(saddr + o) >> @@ -129,12 +136,14 @@ saddr + o) + ((*(MAPTABLE[(saddr + o + 1) >> 12] + saddr + o + 1)) << 8); - if (m == 'L') - *((unsigned int *) (bptr + l)) = (unsigned int) RAM; - if (m == 'W') - *((unsigned short *) (bptr + l)) = *(MAPTABLE[(saddr + o) >> + break; + case 'L': + *((unsigned int *) (bptr + l)) = (unsigned int) RAM; + break; + case 'W': + *((unsigned short *) (bptr + l)) = *(MAPTABLE[(saddr + o) >> 12] + saddr + o) + - ((*(MAPTABLE[(saddr + ((*(MAPTABLE[(saddr + o + @@ -147,9 +156,10 @@ o + 1)) - << 8); - if (m == 'X') - *((unsigned int *) (bptr + l)) = (unsigned int) (MAPTABLE + + << 8); + break; + case 'X': + *((unsigned int *) (bptr + l)) = (unsigned int) (MAPTABLE + ((*(MAPTABLE[(saddr + o @@ -164,21 +174,26 @@ + 1)) >> 4)); - if (m == 'M') - *((unsigned int *) (bptr + l)) = (unsigned int) (MAPTABLE); - if (m == 'T') - *((unsigned int *) (bptr + l)) = (unsigned int) STACK; - if (m == 'P') - *((unsigned short *) (bptr + l)) = saddr + o; - if (m == 'R') - *((int *) (bptr + l)) = *((signed char *) (MAPTABLE[(saddr + + break; + case 'M': + *((unsigned int *) (bptr + l)) = (unsigned int) (MAPTABLE); + break; + case 'T': + *((unsigned int *) (bptr + l)) = (unsigned int) STACK; + break; + case 'P': + *((unsigned short *) (bptr + l)) = saddr + o; + break; + case 'R': + *((int *) (bptr + l)) = *((signed char *) (MAPTABLE[(saddr + o) >> 12] + saddr + o)) - + saddr + o + 1; - if (m == 'J') - *((unsigned int *) (bptr + l)) = *(MAPTABLE[(saddr + o) >> + + saddr + o + 1; + break; + case 'J': + *((unsigned int *) (bptr + l)) = *(MAPTABLE[(saddr + o) >> 12] + saddr + o) + - ((*(MAPTABLE[(saddr + ((*(MAPTABLE[(saddr + o + @@ -190,32 +205,45 @@ + o + 1)) - << 8); - if (m == 'S') - *((void **) (bptr + l)) = &STACKPTR; - if (m == 'V') - *((void **) (bptr + l)) = &VFLAG; - if (m == 'F') - *((void **) (bptr + l)) = &FLAGS; - if (m == 'I') - *((int *) (bptr + l)) = (int) (&INPUT) - (int) (bptr + l) - 4; - if (m == 'O') - *((int *) (bptr + l)) = (int) (&OUTPUT) - (int) (bptr + l) - 4; - if (m == 'U') - *((int *) (bptr + l)) = (int) (&U) - (int) (bptr + l) - 4; - if (m == 'N') - *((int *) (bptr + l)) = (int) (&NMI) - (int) (bptr + l) - 4; - if (m == 'Y') - *((int *) (bptr + l)) = (int) (Mapper[MAPPERNUMBER]) - (int) - (bptr - + - l) - 4; - if (m == '>') - bptr[l] += (((*((signed char *) (MAPTABLE[(saddr + o) >> 12] + << 8); + break; + case 'S': + *((void **) (bptr + l)) = &STACKPTR; + break; + case 'V': + *((void **) (bptr + l)) = &VFLAG; + break; + case 'F': + *((void **) (bptr + l)) = &FLAGS; + break; + case 'I': + *((int *) (bptr + l)) = (int) (&INPUT) - (int) (bptr + l) - 4; + break; + case 'O': + *((int *) (bptr + l)) = (int) (&OUTPUT) - (int) (bptr + l) + - 4; + break; + case 'U': + *((int *) (bptr + l)) = (int) (&U) - (int) (bptr + l) - 4; + break; + case 'N': + *((int *) (bptr + l)) = (int) (&NMI) - (int) (bptr + l) - 4; + break; + case 'Y': + *((int *) (bptr + l)) = (int) (Mapper[MAPPERNUMBER]) - (int) + (bptr + + + l) - 4; + break; + case '>': + bptr[l] += (((*((signed char *) (MAPTABLE[(saddr + o) >> 12] + saddr + o)) + saddr + o + 1) & 0xFF00) != ((saddr + o + 1) & 0xFF00)); - if (m == '^') - bptr[l] = ignorebadinstr ? NOP : BRK; + break; + case '^': + bptr[l] = ignorebadinstr ? NOP : BRK; + break; + } } addr = saddr + slen; } --- Mike Melanson <mel...@pc...> wrote: > Info on a free ROM (that fails to work with TuxNES). > > -- > -Mike Melanson > > ---------- Forwarded message ---------- > Date: Tue, 24 Feb 2004 16:34:51 -0500 > From: Joey Hess <jo...@ki...> > To: Mike Melanson <mel...@pc...> > Subject: tuxnes and efp > > efp is a free ROM available from http://hcs.freeshell.org/efp.html > Tuxnes segfaults on startup with this rom. Here is a backtrace of the > child process it forks, which is the one that segfaults: > > Program received signal SIGSEGV, Segmentation fault. > 0x0804b9ec in translate (addr=32768) at dynrec.c:65 > 65 INT_MAP[(MAPTABLE[addr >> 12] + addr) - RAM] = (unsigned > int) cptr; > (gdb) bt > #0 0x0804b9ec in translate (addr=32768) at dynrec.c:65 > #1 0x0804f746 in main (argc=3, argv=0xbffff894) at emu.c:2216 > (gdb) p addr > $1 = 32768 > (gdb) p cptr > $2 = (unsigned char *) 0x12000000 "" > > -- > see shy jo > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > _______________________________________________ > Tuxnes-devel mailing list > Tux...@li... > https://lists.sourceforge.net/lists/listinfo/tuxnes-devel __________________________________ Do you Yahoo!? Yahoo! Mail SpamGuard - Read only the mail you want. http://antispam.yahoo.com/tools |