diff --git a/CMakeLists.txt b/CMakeLists.txt index 99b8025..543edf3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,9 @@ # $HeadURL$ # $Revision$ -cmake_minimum_required (VERSION 3.6) +cmake_minimum_required (VERSION 2.8) + +project (TINES) set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) @@ -18,7 +20,6 @@ add_subdirectory("external/glfw") find_package(OpenGL REQUIRED) include_directories(${OPENGL_INCLUDE_DIR}) - -project (TINES) +link_libraries(${OPENGL_gl_LIBRARY}) add_subdirectory (src) diff --git a/external/glfw b/external/glfw index 0f488ac..525ad7b 160000 --- a/external/glfw +++ b/external/glfw @@ -1 +1 @@ -Subproject commit 0f488ac2865d766155344fb356acb40007421ec8 +Subproject commit 525ad7bfb8884b7cf497bc8e6ebf743df0dada8c diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d929cd7..5f711e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -80,4 +80,5 @@ endif (TARGET_TI68k) find_library(PTHREADLIB pthread) add_executable(tines main.c paddle.c NESCarts.c) -target_link_libraries(tines apu corecpu mappermanager memorymanager pluginsmanager ppu oslib ${PTHREADLIB}) \ No newline at end of file +target_compile_options(tines PRIVATE -pthread) +target_link_libraries(tines apu corecpu mappermanager memorymanager pluginsmanager ppu oslib) #${PTHREADLIB} \ No newline at end of file diff --git a/src/NESCarts.c b/src/NESCarts.c index 90ca8c2..f6cf607 100755 --- a/src/NESCarts.c +++ b/src/NESCarts.c @@ -29,6 +29,7 @@ #include #include #include +#include void DumpCartProperties(FILE *out, NesCart * cart) { @@ -57,7 +58,7 @@ int LoadCart(const char *filename, NesCart * cart) cart->File = (byte *)LoadFilePtr((char *)filename); - if ((cart->File == NULL) || ((int)cart->File == -1)) + if ((cart->File == NULL) || (cart->File == MAP_FAILED)) return -1; sprintf(buffer, "%c%c%c%c", 0x4E, 0x45, 0x53, 0x1A); diff --git a/src/main.c b/src/main.c index 3cb0e30..5975e83 100755 --- a/src/main.c +++ b/src/main.c @@ -150,7 +150,7 @@ void SaveSaveRam(char *name) FILE *fp; int i; char fname[512]; - int ret; + strcpy(fname, name); strcat(fname, ".svt"); if ((fp = fopen(fname, "wb"))) @@ -158,7 +158,7 @@ void SaveSaveRam(char *name) console_printf(Console_Default, "Saving savestate '%s'\n", fname); for( i = 0x60; i < 0x80; i++) { - ret = fwrite(get_page_ptr(i), 1, 0x100, fp); + fwrite(get_page_ptr(i), 1, 0x100, fp); } fclose(fp); @@ -170,7 +170,7 @@ void LoadSaveRam(char *name) FILE *fp; int i; char fname[512]; - int ret; + strcpy(fname, name); strcat(fname, ".svt"); if ((fp = fopen(fname, "rb"))) @@ -178,7 +178,7 @@ void LoadSaveRam(char *name) console_printf(Console_Default, "Loading savestate '%s'\n", fname); for( i = 0x60; i < 0x80; i++) { - ret = fread(get_page_ptr(i), 1, 0x0100, fp); + fread(get_page_ptr(i), 1, 0x0100, fp); } fclose(fp); @@ -189,7 +189,6 @@ void LoadSaveRam(char *name) void LoadPalette(char *filename, Palette *pal) { FILE *fp; - int ret; unsigned char r, v, b, i; console_printf(Console_Default, "%s: try to load pallette file '%s'", __func__, filename); if ((fp = fopen(filename, "rb")) != NULL) @@ -198,9 +197,9 @@ void LoadPalette(char *filename, Palette *pal) for (i = 0; i < 64; i++) { - ret = fread(&r, 1, 1, fp); - ret = fread(&v, 1, 1, fp); - ret = fread(&b, 1, 1, fp); + fread(&r, 1, 1, fp); + fread(&v, 1, 1, fp); + fread(&b, 1, 1, fp); /* r = (r * 64) / 255; v = (v * 64) / 255; diff --git a/src/mappersmanager/mappers/unrom512.c b/src/mappersmanager/mappers/unrom512.c new file mode 100755 index 0000000..a1510cf --- /dev/null +++ b/src/mappersmanager/mappers/unrom512.c @@ -0,0 +1,68 @@ +/* + * UNROM Mapper - The TI-NESulator Project + * unrom.h + * + * Created by Manoel TRAPIER. + * Copyright (c) 2003-2016 986-Studio. All rights reserved. + * + * $LastChangedDate$ + * $Author$ + * $HeadURL$ + * $Revision$ + * + */ + +#include +#include "unrom512.h" + +static byte mirroring_set; +static byte loaded_vbank; +static byte loaded_pbank; +static void unrom512_applyValues() +{ + /*if (mirroring_set) + { + ppu_setMirroring(PPU); + } + else + { + ppu_setMirroring(PPU_MIRROR_VERTICAL); + }*/ + + //set_vrom_bank_8k(0x0000, loaded_vbank); + set_prom_bank_16k(0x8000, loaded_pbank); +} + +static void unrom512_MapperWriteHook(byte Addr, byte Value) +{ + mirroring_set = (Value >> 7) & 0x01; + loaded_vbank = (Value >> 5) & 0x03; + loaded_pbank = (Value ) & 0x1F; + + unrom512_applyValues(); +} + +int unrom512_InitMapper(NesCart * cart) +{ + int i; + + loaded_vbank = 0; + loaded_pbank = 0; + set_prom_bank_16k(0xC000, GETLAST16KBANK(cart)); + + unrom512_applyValues(); + + /* Register the write hook */ + for (i = 0x80; i < 0x100; i++) + { + set_page_wr_hook(i, unrom512_MapperWriteHook); + set_page_writeable(i, true); + } + + return 0; +} + +void unrom512_MapperDump(FILE *fp) +{ + fprintf(fp,"unrom512: vbank:%d pbank:%d\n", loaded_vbank, loaded_pbank); +} diff --git a/src/mappersmanager/mappers/unrom512.h b/src/mappersmanager/mappers/unrom512.h new file mode 100755 index 0000000..2b3517e --- /dev/null +++ b/src/mappersmanager/mappers/unrom512.h @@ -0,0 +1,19 @@ +/* + * UNROM Mapper - The TI-NESulator Project + * unrom.h + * + * Created by Manoel TRAPIER. + * Copyright (c) 2003-2016 986-Studio. All rights reserved. + * + * $LastChangedDate$ + * $Author$ + * $HeadURL$ + * $Revision$ + * + */ + +#define __TINES_MAPPERS__ +#include + +int unrom512_InitMapper(NesCart * cart); +void unrom512_MapperDump(FILE *fp); \ No newline at end of file diff --git a/src/mappersmanager/mappers_list.h b/src/mappersmanager/mappers_list.h index fef9218..15db227 100644 --- a/src/mappersmanager/mappers_list.h +++ b/src/mappersmanager/mappers_list.h @@ -18,6 +18,8 @@ #include "mappers/unrom.h" #include "mappers/cnrom.h" +#include "mappers/unrom512.h" + #include "mappers/iremh3001.h" #include "mappers/mmc1.h" @@ -32,7 +34,9 @@ Mapper Mappers[] = { { 1 , "MMC1", mmc1_InitMapper, norom_MapperIRQ, mmc1_MapperDump }, { 4 , "MMC3", mmc3_InitMapper, mmc3_MapperIRQ, mmc3_MapperDump }, -{ 10, "MMC4", mmc4_InitMapper, norom_MapperIRQ, mmc4_MapperDump }, +{ 10, "MMC4", mmc4_InitMapper, norom_MapperIRQ, mmc4_MapperDump }, + +{ 30, "UNROM512", unrom512_InitMapper, norom_MapperIRQ, unrom512_MapperDump }, { 65, "Irem H3001", iremh3001_InitMapper, iremh3001_MapperIRQ, iremh3001_MapperDump }, diff --git a/src/os/unix/graphics.c b/src/os/unix/graphics.c index 9dd714c..11b9f48 100644 --- a/src/os/unix/graphics.c +++ b/src/os/unix/graphics.c @@ -19,7 +19,11 @@ #include #include +#ifdef __MACOSX__ #include +#else +#include +#endif #include @@ -169,6 +173,10 @@ void sizeHandler(GLFWwindow* window,int xs,int ys) glViewport(0, 0, xs, ys); } +static void error_callback(int error, const char* description) +{ + puts(description); +} void initDisplay(GLWindow *g) { @@ -178,12 +186,14 @@ void initDisplay(GLWindow *g) /// Initialize GLFW glfwInit(); + glfwSetErrorCallback(error_callback); + // Open screen OpenGL window if( !(g->windows=glfwCreateWindow( g->WIDTH, g->HEIGHT, "Main", NULL, NULL)) ) { glfwTerminate(); fprintf(stderr, "Window creation error...\n"); - return; + abort(); } glfwMakeContextCurrent(g->windows); @@ -213,6 +223,7 @@ void drawPixel(GLWindow *gw, int x, int y, uint32_t colour) r = (colour >> 16) & 0xFF; a = (colour >> 24) & 0xFF; + gw->videoMemory[offset + 0] = a; gw->videoMemory[offset + 1] = r; gw->videoMemory[offset + 2] = g; diff --git a/src/os/unix/io.c b/src/os/unix/io.c index 171a611..a4e0f01 100644 --- a/src/os/unix/io.c +++ b/src/os/unix/io.c @@ -47,7 +47,7 @@ int console_printf(const ConsoleLevel level, const char *format, ...) ret = console_vprintf(level, format, ap); va_end(ap); - return 0; + return ret; } int console_printf_d(const char *format, ...) diff --git a/src/ppu/debug/ppu.debug.c b/src/ppu/debug/ppu.debug.c index a4b0927..bf32cd7 100644 --- a/src/ppu/debug/ppu.debug.c +++ b/src/ppu/debug/ppu.debug.c @@ -14,14 +14,14 @@ #include #include - +#if 0 /* Allegro includes */ #ifdef __APPLE__ #define USE_CONSOLE #include #else #define USE_CONSOLE -#include +//#include #endif #define __TINES_PPU_INTERNAL__ @@ -367,3 +367,4 @@ void ppu_dumpPalette(int x, int y) rectfill(Buffer, x + 91 + (i % 4) * 20, y + 21 +(i / 4) * 20, x + 91 + (i % 4) * 20 + 20, y + 21 +(i / 4) * 20 + 20, ppu_readMemory(0x3F, i+0x10)); } } +#endif \ No newline at end of file diff --git a/src/ppu/ppu.c b/src/ppu/ppu.c index df3c09b..088063c 100755 --- a/src/ppu/ppu.c +++ b/src/ppu/ppu.c @@ -36,8 +36,8 @@ extern int VBLANK_TIME; -volatile extern int frame; -volatile extern unsigned long IPS, FPS; +extern volatile int frame; +extern volatile unsigned long IPS, FPS; extern unsigned long ColorPalette[9 * 63]; extern short IRQScanHit;