playing with libretro

This commit is contained in:
Jairinho 2022-02-23 19:39:14 -03:00
parent af7bce11d0
commit 5af19969ce
No known key found for this signature in database
GPG Key ID: 954589B18A21D5B6
3 changed files with 88 additions and 16 deletions

View File

@ -1,16 +1,17 @@
TARGET=chip8_libretro
LIBRETRO_CORE=$(TARGET).so
LIBRETRO_HEADER=$(TARGET).h
BUILD_VERSION=$(shell git rev-parse --short HEAD)
# run: $(LIBRETRO_CORE)
# retroarch -v -L $(LIBRETRO_CORE) roms/test_opcode.ch8
$(LIBRETRO_CORE):
go build -buildmode=c-shared -o $@ ./libretro
test:
go test -v -race ./chip8
$(LIBRETRO_CORE): clean
go build -buildmode=c-shared -ldflags "-X 'main.BuildVersion=$(BUILD_VERSION)'" -o $@ ./libretro
clean:
rm -f $(LIBRETRO_CORE) $(LIBRETRO_HEADER)
test:
go test -v -race ./chip8

55
libretro/bridge.c Normal file
View File

@ -0,0 +1,55 @@
#include <string.h>
#include "libretro.h"
// RETRO_API void retro_set_environment(retro_environment_t);
// RETRO_API void retro_set_video_refresh(retro_video_refresh_t);
// RETRO_API void retro_set_audio_sample(retro_audio_sample_t);
// RETRO_API void retro_set_audio_sample_batch(retro_audio_sample_batch_t);
// RETRO_API void retro_set_input_poll(retro_input_poll_t);
// RETRO_API void retro_set_input_state(retro_input_state_t);
RETRO_API void retro_init(void)
{
void Initialize(void);
Initialize();
}
RETRO_API void retro_deinit(void)
{
void Deinitialize(void);
Deinitialize();
}
RETRO_API unsigned retro_api_version(void)
{
return 1;
}
RETRO_API void retro_get_system_info(struct retro_system_info *info)
{
memset(info, 0, sizeof(*info));
void GetEmulatorInfo(struct retro_system_info * info);
GetEmulatorInfo(info);
}
RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info)
{
memset(info, 0, sizeof(*info));
void GetEmulatorAVInfo(struct retro_system_av_info * info);
GetEmulatorAVInfo(info);
}
// RETRO_API void retro_set_controller_port_device(unsigned port, unsigned device);
// RETRO_API void retro_reset(void);
// RETRO_API void retro_run(void);
// RETRO_API size_t retro_serialize_size(void);
// RETRO_API bool retro_serialize(void *data, size_t size);
// RETRO_API bool retro_unserialize(const void *data, size_t size);
// RETRO_API void retro_cheat_reset(void);
// RETRO_API void retro_cheat_set(unsigned index, bool enabled, const char *code);
// RETRO_API bool retro_load_game(const struct retro_game_info *game);
// RETRO_API bool retro_load_game_special(unsigned game_type, const struct retro_game_info *info, size_t num_info);
// RETRO_API void retro_unload_game(void);
// RETRO_API unsigned retro_get_region(void);
// RETRO_API void *retro_get_memory_data(unsigned id);
// RETRO_API size_t retro_get_memory_size(unsigned id);

View File

@ -9,24 +9,40 @@ typedef struct retro_system_av_info retro_system_av_info;
*/
import "C"
import (
"fmt"
"github.com/tangzero/chip8-emulator/chip8"
)
const RetroAPIVersion = 1
var BuildVersion string
var emulator *chip8.Emulator
//export retro_init
func retro_init() {
fmt.Println("loading chip8 core...")
//export Initialize
func Initialize() {
emulator = chip8.NewEmulator()
}
//export retro_deinit
func retro_deinit() {
fmt.Println("unloading chip8 core...")
//export Deinitialize
func Deinitialize() {
emulator = nil
}
//export retro_api_version
func retro_api_version() uint32 {
return RetroAPIVersion
//export GetEmulatorInfo
func GetEmulatorInfo(info *C.retro_system_info) {
info.library_name = C.CString("CHIP-8 Emulator by TangZero")
info.library_version = C.CString(BuildVersion)
info.valid_extensions = C.CString("ch8")
info.need_fullpath = false
info.block_extract = false
}
//export GetEmulatorAVInfo
func GetEmulatorAVInfo(info *C.retro_system_av_info) {
info.geometry.base_width = 64
info.geometry.base_height = 32
info.geometry.max_width = 64
info.geometry.max_height = 32
info.geometry.aspect_ratio = 0.0
info.timing.fps = 60
info.timing.sample_rate = 44100
}
func main() {}