mirror of
https://github.com/libretro/RetroArch
synced 2025-03-30 07:20:36 +00:00
Updated build
This commit is contained in:
parent
13c503160f
commit
f471b4a8da
25
Makefile
25
Makefile
@ -2,37 +2,42 @@ include config.mk
|
||||
|
||||
TARGET = ssnes
|
||||
|
||||
SOURCE = ssnes.c
|
||||
OBJ = ssnes.o
|
||||
LIBS = -lsamplerate -lsnes
|
||||
|
||||
ifeq ($(BUILD_RSOUND), 1)
|
||||
SOURCE += rsound.c
|
||||
OBJ += rsound.o
|
||||
LIBS += -lrsound
|
||||
endif
|
||||
ifeq ($(BUILD_OSS), 1)
|
||||
SOURCE += oss.c
|
||||
OBJ += oss.o
|
||||
endif
|
||||
ifeq ($(BUILD_ALSA), 1)
|
||||
SOURCE += alsa.c
|
||||
OBJ += alsa.o
|
||||
LIBS += -lasound
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_OPENGL), 1)
|
||||
SOURCE += gl.c
|
||||
OBJ += gl.o
|
||||
LIBS += -lglfw
|
||||
endif
|
||||
ifeq ($(BUILD_FILTER), 1)
|
||||
SOURCE += hqflt/hq.c
|
||||
OBJ += hqflt/hq.o
|
||||
endif
|
||||
|
||||
CFLAGS = -Wall -O3 -march=native -std=c99
|
||||
|
||||
OBJ = ssnes.o
|
||||
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
all:
|
||||
$(CC) $(CFLAGS) -o $(TARGET) $(SOURCE) $(LIBS)
|
||||
ssnes: $(OBJ)
|
||||
@$(CC) -o $@ $(OBJ) $(LIBS)
|
||||
@echo "LD $@"
|
||||
|
||||
%.o: %.c config.h config.mk
|
||||
@$(CC) $(CFLAGS) -c -o $@ $<
|
||||
@echo "CC $<"
|
||||
|
||||
install: $(TARGET)
|
||||
install -m755 $(TARGET) $(PREFIX)/bin
|
||||
@ -43,3 +48,5 @@ uninstall: $(TARGET)
|
||||
clean:
|
||||
rm -rf $(OBJ)
|
||||
rm -rf $(TARGET)
|
||||
|
||||
.PHONY: all install uninstall clean
|
||||
|
@ -261,7 +261,7 @@ uint8_t lastLineDiffs[__PAST_LIBRARY_WIDTH];
|
||||
|
||||
#define RotatePattern(x) ((((x) & 0x777) << 1) | (((x) & 0x888) >> 3))
|
||||
|
||||
void ProcessHQ2x(const pixel *in, pixel *out) {
|
||||
void ProcessHQ2x(const pixel * restrict in, pixel * restrict out) {
|
||||
signed int y, x;
|
||||
unsigned int pattern, newpattern;
|
||||
uint32_t pixels[9];
|
||||
@ -377,7 +377,7 @@ void ProcessHQ2x(const pixel *in, pixel *out) {
|
||||
} while (y >= 0);
|
||||
}
|
||||
|
||||
void ProcessHQ4x(const pixel *in, pixel *out) {
|
||||
void ProcessHQ4x(const pixel * restrict in, pixel * restrict out) {
|
||||
signed int y, x;
|
||||
unsigned int pattern, newpattern;
|
||||
uint32_t pixels[9];
|
||||
|
@ -36,19 +36,19 @@ typedef uint16_t pixel;
|
||||
* guard-bits and masking.
|
||||
*/
|
||||
|
||||
static __inline__ uint32_t RGBUnpack(pixel i) {
|
||||
static inline uint32_t RGBUnpack(pixel i) {
|
||||
uint32_t o = i;
|
||||
o = (o * 0x10001);
|
||||
o = o & 0x03E07C1F;
|
||||
return o;
|
||||
}
|
||||
static __inline__ pixel RGBPack(uint32_t x) {
|
||||
static inline pixel RGBPack(uint32_t x) {
|
||||
x &= 0x03E07C1F;
|
||||
x |= (x >> 16);
|
||||
return x;
|
||||
}
|
||||
|
||||
void ProcessHQ2x(const pixel *inbuffer, pixel *outbuffer);
|
||||
void ProcessHQ4x(const pixel *inbuffer, pixel *outbuffer);
|
||||
void ProcessHQ2x(const pixel * restrict inbuffer, pixel * restrict outbuffer);
|
||||
void ProcessHQ4x(const pixel * restrict inbuffer, pixel * restrict outbuffer);
|
||||
|
||||
#endif /* __PAST_LIBRARY_H */
|
||||
|
52
ssnes.c
52
ssnes.c
@ -150,6 +150,27 @@ static void uninit_video_input(void)
|
||||
driver.input->free(driver.input_data);
|
||||
}
|
||||
|
||||
// Temporary hack. Needs to do some color space switching for some unknown reason. Worked in 0.064 without hack at least.
|
||||
#define USE_HACK 0
|
||||
static inline void process_frame (uint16_t * restrict out, const uint16_t * restrict in, unsigned width, unsigned height)
|
||||
{
|
||||
for ( int y = 0; y < height; y++ )
|
||||
{
|
||||
const uint16_t *src = in + y * 1024;
|
||||
uint16_t *dst = out + y * width;
|
||||
|
||||
#if USE_HACK
|
||||
for ( int x = 0; x < width; x++ )
|
||||
{
|
||||
uint16_t color = src[x];
|
||||
*dst++ = ((color >> 10) & 0x1f) | (color & 0x3e0) | ((color & 0x1f) << 10);
|
||||
}
|
||||
#else
|
||||
memcpy(dst, src, width * sizeof(uint16_t));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static void video_frame(const uint16_t *data, unsigned width, unsigned height)
|
||||
{
|
||||
if ( !video_active )
|
||||
@ -159,17 +180,10 @@ static void video_frame(const uint16_t *data, unsigned width, unsigned height)
|
||||
uint16_t outputHQ2x[width * height * 2 * 2];
|
||||
#elif VIDEO_FILTER == FILTER_HQ4X
|
||||
uint16_t outputHQ4x[width * height * 4 * 4];
|
||||
#else
|
||||
uint16_t output[width * height];
|
||||
#endif
|
||||
uint16_t output[width * height];
|
||||
|
||||
for ( int y = 0; y < height; y++ )
|
||||
{
|
||||
const uint16_t *src = data + y * 1024;
|
||||
uint16_t *dst = output + y * width;
|
||||
|
||||
memcpy(dst, src, width * sizeof(uint16_t));
|
||||
}
|
||||
process_frame(output, data, width, height);
|
||||
|
||||
#if VIDEO_FILTER == FILTER_NONE
|
||||
if ( !driver.video->frame(driver.video_data, output, width, height) )
|
||||
@ -278,13 +292,13 @@ int main(int argc, char *argv[])
|
||||
if ( rom_buf == NULL )
|
||||
{
|
||||
fprintf(stderr, "SSNES [ERROR] :: Couldn't allocate memory!\n");
|
||||
exit(1);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ( fread(rom_buf, 1, length, file) < length )
|
||||
{
|
||||
fprintf(stderr, "SSNES [ERROR] :: Didn't read whole file.\n");
|
||||
exit(1);
|
||||
goto error;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
@ -295,6 +309,14 @@ int main(int argc, char *argv[])
|
||||
|
||||
unsigned serial_size = snes_serialize_size();
|
||||
uint8_t *serial_data = malloc(serial_size);
|
||||
|
||||
if ( serial_size > (unsigned)length )
|
||||
{
|
||||
fprintf(stderr, "SSNES [ERROR] :: Length of save file does match size given by libsnes.\n");
|
||||
fprintf(stderr, "\tserial_size = %u, length = %u\n", serial_size, (unsigned)length);
|
||||
goto error;
|
||||
}
|
||||
|
||||
snes_serialize(serial_data, serial_size);
|
||||
|
||||
load_state(savefile_name, serial_data, serial_size);
|
||||
@ -330,10 +352,16 @@ int main(int argc, char *argv[])
|
||||
|
||||
snes_unload_cartridge();
|
||||
snes_term();
|
||||
|
||||
uninit_drivers();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
snes_unload_cartridge();
|
||||
snes_term();
|
||||
uninit_drivers();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void write_state(const char* path, uint8_t* data, size_t size)
|
||||
|
Loading…
x
Reference in New Issue
Block a user