Ver la versión completa : Cambio de sdl a c + segundo micro
DarkTails
22/05/2007, 15:12
Hola,bueno la verdad que no sabia si postear o no,pero bueno aqui va,pues me gustaria preguntar sobre como añadir el segundo micro al openbor y ya de camino preguntar como funciona el video y el sonido en C puro(no sdl) para canbiar el port de sdl a c,ya que creemos que aumentaria un porcentaje realmente alto la velocidad de openbor,si se le añade esto + el segundo micro creo que iria mas o menos al maximo fps de openbor,200 fps. bueno gracias a todos de antemano y espero que podamos conseguirlo.:)
Tendrías que usar la minimal lib de rlyeh, siento no poder ayudarte más pero es que nunca las he usado.
Propeller
22/05/2007, 17:39
Minilib, con los ojos cerrados.
De todas formas, usando SDL también estás haciendo las cosas con "C puro", eh? :p
Propeller
DarkTails
20/06/2007, 21:01
mmm,he estado viendo las libs de rlyeh,pero como que ni idea de como va,ademas he notado que el mmuhack de openbor tampoco funciona,no mejora la velocidad ni 1 fps,segun el printf que puse se parchea pero no mejora nada la velocidad,y probe lo de uppermemory que tp rula,esto de portear se me da fatal al verdad.a ver si me ayudais un poco con ejemplos o algo.aqui dejo como tenemos montado el archivo de gp2xport.c:
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/soundcard.h>
#include <fcntl.h>
#include <stdint.h>
#include <unistd.h>
#include "utils.h"
#include "sdlport.h"
#include "gp2xport.h"
#define SYS_CLK_FREQ 7372800
static int gp2x_mem;
static int gp2x_mixer;
volatile static uint32_t* gp2x_memregl;
volatile static uint16_t* gp2x_memregs;
/* Call this MMU Hack kernel module after doing mmap, and before doing memset */
int load_mmuhack()
{
int mmufd = open("/dev/mmuhack", O_RDWR);
if(mmufd < 0)
{
system("/sbin/insmod mmuhack.o");
mmufd = open("/dev/mmuhack", O_RDWR);
}
if(mmufd >= 0)
{
close(mmufd);
return 1;
}
printf("Failed to load MMU Hack!\n");
return 0;
}
/* Unload MMU Hack kernel module after closing all memory devices */
int unload_mmuhack()
{
system("/sbin/rmmod mmuhack");
return 0;
}
void gp2x_end()
{
close(gp2x_mixer);
close(gp2x_mem);
unload_mmuhack();
}
void gp2x_init()
{
gp2x_mem = open("/dev/mem", O_RDWR);
gp2x_mixer = open("/dev/mixer", O_RDWR);
gp2x_memregl = (uint32_t*)mmap(0, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, gp2x_mem, 0xc0000000);
gp2x_memregs = (uint16_t*)gp2x_memregl;
if(!load_mmuhack || !gp2x_mem || !gp2x_mixer || !gp2x_memregl || !gp2x_memregs)
{
printf("GP2X Failed to Init!!!!\n");
borExit(0);
}
}
void gp2x_set_clock(int mhz)
{
mhz *= 1000000;
unsigned pdiv = 3;
unsigned mdiv = (mhz * pdiv) / SYS_CLK_FREQ;
mdiv = ((mdiv - 8) << 8) & 0xff00;
pdiv = ((pdiv - 2) << 2) & 0xfc;
unsigned scale = 3;
unsigned v = mdiv | pdiv | scale;
gp2x_memregs[0x0910 >> 1] = v;
}
void gp2x_sound_set_volume(int l, int r)
{
int vol = (((l * 0x50) / 100) << 8) | ((r * 0x50) / 100);
ioctl(gp2x_mixer, SOUND_MIXER_WRITE_PCM, &vol);
}
void gp2x_video_wait_vsync()
{
while (gp2x_memregs[0x1182 >> 1] & (1 << 4));
}
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.