add a CRT(3DS) target.
This commit is contained in:
@@ -139,6 +139,19 @@ else ifeq ($(platform), psp1)
|
|||||||
STATIC_LINKING = 1
|
STATIC_LINKING = 1
|
||||||
EXTERNAL_ZLIB = 1
|
EXTERNAL_ZLIB = 1
|
||||||
|
|
||||||
|
# CTR(3DS)
|
||||||
|
else ifeq ($(platform), ctr)
|
||||||
|
TARGET := $(TARGET_NAME)_libretro_ctr.a
|
||||||
|
CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
|
||||||
|
CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
|
||||||
|
AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
|
||||||
|
PLATFORM_DEFINES := -DARM11 -D_3DS -DLSB_FIRST -DHAVE_ASPRINTF
|
||||||
|
CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard
|
||||||
|
CFLAGS += -Wall -mword-relocations
|
||||||
|
CFLAGS += -fomit-frame-pointer -fstrict-aliasing -ffast-math
|
||||||
|
STATIC_LINKING = 1
|
||||||
|
EXTERNAL_ZLIB = 1
|
||||||
|
|
||||||
# Lightweight PS3 Homebrew SDK
|
# Lightweight PS3 Homebrew SDK
|
||||||
else ifeq ($(platform), psl1ght)
|
else ifeq ($(platform), psl1ght)
|
||||||
TARGET := $(TARGET_NAME)_libretro_psl1ght.a
|
TARGET := $(TARGET_NAME)_libretro_psl1ght.a
|
||||||
|
|||||||
@@ -29,7 +29,10 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "memstream.h"
|
#include "memstream.h"
|
||||||
|
|
||||||
|
#if defined(_3DS)
|
||||||
|
void* linearMemAlign(size_t size, size_t alignment);
|
||||||
|
void linearFree(void* mem);
|
||||||
|
#endif
|
||||||
|
|
||||||
static retro_video_refresh_t video_cb = NULL;
|
static retro_video_refresh_t video_cb = NULL;
|
||||||
static retro_input_poll_t poll_cb = NULL;
|
static retro_input_poll_t poll_cb = NULL;
|
||||||
@@ -47,8 +50,10 @@ int FCEUnetplay;
|
|||||||
static __attribute__((aligned(16))) uint16_t retro_palette[256];
|
static __attribute__((aligned(16))) uint16_t retro_palette[256];
|
||||||
#else
|
#else
|
||||||
static uint16_t retro_palette[256];
|
static uint16_t retro_palette[256];
|
||||||
|
static uint16_t* fceu_video_out;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Some timing-related variables. */
|
/* Some timing-related variables. */
|
||||||
static int maxconbskip = 9; /* Maximum consecutive blit skips. */
|
static int maxconbskip = 9; /* Maximum consecutive blit skips. */
|
||||||
static int ffbskip = 9; /* Blit skips per blit when FF-ing */
|
static int ffbskip = 9; /* Blit skips per blit when FF-ing */
|
||||||
@@ -520,6 +525,11 @@ void retro_init(void)
|
|||||||
#endif
|
#endif
|
||||||
PowerNES();
|
PowerNES();
|
||||||
check_system_specs();
|
check_system_specs();
|
||||||
|
#if defined(_3DS)
|
||||||
|
fceu_video_out = (uint16_t*)linearMemAlign(256 * 240 * sizeof(uint16_t), 128);
|
||||||
|
#elif !defined(PSP)
|
||||||
|
fceu_video_out = (uint16_t*)malloc(256 * 240 * sizeof(uint16_t));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void emulator_set_input(void)
|
static void emulator_set_input(void)
|
||||||
@@ -594,6 +604,11 @@ void retro_deinit (void)
|
|||||||
FCEUI_CloseGame();
|
FCEUI_CloseGame();
|
||||||
FCEUI_Sound(0);
|
FCEUI_Sound(0);
|
||||||
FCEUI_Kill();
|
FCEUI_Kill();
|
||||||
|
#if defined(_3DS)
|
||||||
|
linearFree(fceu_video_out);
|
||||||
|
#elif !defined(PSP)
|
||||||
|
free(fceu_video_out);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void retro_reset(void)
|
void retro_reset(void)
|
||||||
@@ -694,9 +709,6 @@ void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count)
|
|||||||
void retro_run(void)
|
void retro_run(void)
|
||||||
{
|
{
|
||||||
unsigned width, height, pitch, x, y;
|
unsigned width, height, pitch, x, y;
|
||||||
#ifndef PSP
|
|
||||||
static uint16_t video_out[256 * 240];
|
|
||||||
#endif
|
|
||||||
uint8_t *gfx;
|
uint8_t *gfx;
|
||||||
int32 ssize;
|
int32 ssize;
|
||||||
bool updated;
|
bool updated;
|
||||||
@@ -752,14 +764,14 @@ void retro_run(void)
|
|||||||
int deemp = (PPU[1] >> 5) << 2;
|
int deemp = (PPU[1] >> 5) << 2;
|
||||||
for (y = 0; y < height; y++)
|
for (y = 0; y < height; y++)
|
||||||
for ( x = 0; x < width; x++, gfx++)
|
for ( x = 0; x < width; x++, gfx++)
|
||||||
video_out[y * width + x] = retro_palette[*gfx & 0x3F] | deemp;
|
fceu_video_out[y * width + x] = retro_palette[*gfx & 0x3F] | deemp;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (y = 0; y < height; y++)
|
for (y = 0; y < height; y++)
|
||||||
for ( x = 0; x < width; x++, gfx++)
|
for ( x = 0; x < width; x++, gfx++)
|
||||||
video_out[y * width + x] = retro_palette[*gfx];
|
fceu_video_out[y * width + x] = retro_palette[*gfx];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -778,14 +790,14 @@ void retro_run(void)
|
|||||||
int deemp = (PPU[1] >> 5) << 2;
|
int deemp = (PPU[1] >> 5) << 2;
|
||||||
for (y = 0; y < height; y++, gfx += 16)
|
for (y = 0; y < height; y++, gfx += 16)
|
||||||
for ( x = 0; x < width; x++, gfx++)
|
for ( x = 0; x < width; x++, gfx++)
|
||||||
video_out[y * width + x] = retro_palette[*gfx & 0x3F] | deemp;
|
fceu_video_out[y * width + x] = retro_palette[*gfx & 0x3F] | deemp;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (y = 0; y < height; y++, gfx += 16)
|
for (y = 0; y < height; y++, gfx += 16)
|
||||||
for ( x = 0; x < width; x++, gfx++)
|
for ( x = 0; x < width; x++, gfx++)
|
||||||
video_out[y * width + x] = retro_palette[*gfx];
|
fceu_video_out[y * width + x] = retro_palette[*gfx];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -793,7 +805,7 @@ void retro_run(void)
|
|||||||
#ifdef PSP
|
#ifdef PSP
|
||||||
video_cb(texture_vram_p, width, height, pitch);
|
video_cb(texture_vram_p, width, height, pitch);
|
||||||
#else
|
#else
|
||||||
video_cb(video_out, width, height, pitch);
|
video_cb(fceu_video_out, width, height, pitch);
|
||||||
#endif
|
#endif
|
||||||
FCEUD_UpdateInput();
|
FCEUD_UpdateInput();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user