playing with libretro
This commit is contained in:
parent
af7bce11d0
commit
5af19969ce
11
Makefile
11
Makefile
|
@ -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
55
libretro/bridge.c
Normal 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);
|
|
@ -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() {}
|
||||
|
|
Loading…
Reference in New Issue
Block a user