add a CRT(3DS) target.

This commit is contained in:
aliaspider
2015-04-17 22:15:28 +01:00
parent cf45277354
commit 4ec659eb06
2 changed files with 34 additions and 9 deletions

View File

@@ -139,6 +139,19 @@ else ifeq ($(platform), psp1)
STATIC_LINKING = 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
else ifeq ($(platform), psl1ght)
TARGET := $(TARGET_NAME)_libretro_psl1ght.a

View File

@@ -29,7 +29,10 @@
#include <string.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_input_poll_t poll_cb = NULL;
@@ -47,8 +50,10 @@ int FCEUnetplay;
static __attribute__((aligned(16))) uint16_t retro_palette[256];
#else
static uint16_t retro_palette[256];
static uint16_t* fceu_video_out;
#endif
/* Some timing-related variables. */
static int maxconbskip = 9; /* Maximum consecutive blit skips. */
static int ffbskip = 9; /* Blit skips per blit when FF-ing */
@@ -520,6 +525,11 @@ void retro_init(void)
#endif
PowerNES();
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)
@@ -594,6 +604,11 @@ void retro_deinit (void)
FCEUI_CloseGame();
FCEUI_Sound(0);
FCEUI_Kill();
#if defined(_3DS)
linearFree(fceu_video_out);
#elif !defined(PSP)
free(fceu_video_out);
#endif
}
void retro_reset(void)
@@ -694,9 +709,6 @@ void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count)
void retro_run(void)
{
unsigned width, height, pitch, x, y;
#ifndef PSP
static uint16_t video_out[256 * 240];
#endif
uint8_t *gfx;
int32 ssize;
bool updated;
@@ -752,14 +764,14 @@ void retro_run(void)
int deemp = (PPU[1] >> 5) << 2;
for (y = 0; y < height; y++)
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
{
for (y = 0; y < height; y++)
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
}
@@ -778,14 +790,14 @@ void retro_run(void)
int deemp = (PPU[1] >> 5) << 2;
for (y = 0; y < height; y++, gfx += 16)
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
{
for (y = 0; y < height; y++, gfx += 16)
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
}
@@ -793,7 +805,7 @@ void retro_run(void)
#ifdef PSP
video_cb(texture_vram_p, width, height, pitch);
#else
video_cb(video_out, width, height, pitch);
video_cb(fceu_video_out, width, height, pitch);
#endif
FCEUD_UpdateInput();