13 Commits

Author SHA1 Message Date
Godzil
5336cf6272 Add Joe Granato's Troll Burner Demo as a test for mapper #30
More about that game/demo of NESMaker here:
http://troll.thenew8bitheroes.com/
2018-01-30 16:24:21 +00:00
Godzil
29a2deb1f3 Not sure what was done here before. 2018-01-30 16:18:12 +00:00
Godzil
05f17740fd Merge remote-tracking branch 'origin/master'
# Conflicts:
#	CMakeLists.txt
#	src/CMakeLists.txt
#	src/NESCarts.c
#	src/os/unix/graphics.c
#	src/ppu/debug/ppu.debug.c
2018-01-30 16:16:33 +00:00
Godzil
6e179a5866 Update glfw, and make TI-NESulator great again (and add Mapper #30 support) 2018-01-30 16:12:53 +00:00
Manoël Trapier
a6586b3467 Make travis happy, again (or try to) 2017-12-27 03:26:57 +01:00
Godzil
79e43a98e4 glext.h was not included hence the error. Using GLFW3 facility to include it as some OS have OpenGL/xxx other GL/xxx for include file... NASTY! 2017-03-17 14:59:18 +01:00
Godzil
9413fc5e27 Damn travis, be a bit more smart please! 2017-03-17 14:44:47 +01:00
Godzil
1158daab8b Change apt commands to be Linux only, switch to GL_TEXTURE_RECTANGLE, will it work? 2017-03-17 14:33:29 +01:00
Godzil
6f2bf79917 Need to investigate why travis OS X build miss GL_TEXTURE_RECTANGLE_ARB 2017-03-17 13:51:38 +01:00
Godzil
c7c21ce752 Switch GL_TEXTURE_RECTANGLE_EXT to the official GL_TEXTURE_RECTANGLE_ARB 2017-03-17 13:45:15 +01:00
Godzil
8b34ba6c26 We probably miss Glew on OS X 2017-03-17 13:35:29 +01:00
Godzil
e8171d4705 Add OS X build 2017-03-17 13:27:14 +01:00
Godzil
f5c15c741b Stupid me, stupid me.. 2017-03-17 13:25:09 +01:00
8 changed files with 146 additions and 44 deletions

View File

@@ -1,32 +1,40 @@
language: c
git:
submodule: true
compiler:
- clang
- gcc
script:
- mkdir build
- cd build
- cmake -DUSE_ALLEGRO=OFF -DUSE_PROFILING=OFF -DCOVERALLS=OFF -DCMAKE_BUILD_TYPE=Release ..
- cmake --build .
- cd ..
- mkdir coverage
- cd coverage
- cmake -DUSE_ALLEGRO=OFF -DUSE_PROFILING=OFF -DCOVERALLS=ON -DCMAKE_BUILD_TYPE=Debug ..
- cmake --build .
- cmake --build . --target coveralls
install: true
env:
global:
- CODECOV_TOKEN=$COVERALLS_REPO_TOKEN
os:
- linux
- osx
matrix:
allow_failures:
- os: osx
addons:
apt:
sources:
- george-edison55-precise-backports # cmake 3.2.3 / doxygen 1.8.3
packages:
- cmake
- cmake-data
- lcov
- curl
- xorg-dev
- libglu1-mesa-dev
compiler:
- clang
- gcc
script:
- mkdir build
- cd build
- cmake -DUSE_ALLEGRO=OFF -DUSE_PROFILING=OFF -DCOVERALLS=OFF -DCMAKE_BUILD_TYPE=Release ..
- cmake --build .
- cd ..
- mkdir coverage
- cd coverage
- cmake -DUSE_ALLEGRO=OFF -DUSE_PROFILING=OFF -DCOVERALLS=ON -DCMAKE_BUILD_TYPE=Debug ..
- cmake --build .
- cmake --build . --target coveralls
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install glew; fi
install: true
after_success:
- bash <(curl -s https://codecov.io/bash)

BIN
data/trollburner_demo.nes Normal file

Binary file not shown.

2
external/glfw vendored

View File

@@ -29,6 +29,7 @@
#include <NESCarts.h>
#include <os_dependent.h>
#include <mappers/manager.h>
#include <sys/mman.h>
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)
if ((cart->File == NULL) || (cart->File == MAP_FAILED))
return -1;
sprintf(buffer, "%c%c%c%c", 0x4E, 0x45, 0x53, 0x1A);

View File

@@ -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 <ppu/ppu.h>
#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);
}

View File

@@ -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 <mappers/manager.h>
int unrom512_InitMapper(NesCart * cart);
void unrom512_MapperDump(FILE *fp);

View File

@@ -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 },

View File

@@ -18,8 +18,8 @@
#include <os_dependent.h>
#define GLFW_INCLUDE_GLEXT
#include <GLFW/glfw3.h>
//#include <OpenGL/glext.h>
#include <palette.h>
@@ -43,10 +43,6 @@ struct GLWindow_t
int HEIGHT;
};
#ifndef GL_TEXTURE_RECTANGLE_EXT
#define GL_TEXTURE_RECTANGLE_EXT GL_TEXTURE_RECTANGLE_NV
#endif
static int window_num = 0;
void GLWindowInitEx(GLWindow *g, int w, int h)
@@ -63,10 +59,10 @@ void GLWindowInit(GLWindow *g)
void ShowScreen(GLWindow *g, int w, int h)
{
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, g->videoTexture);
glBindTexture(GL_TEXTURE_RECTANGLE, g->videoTexture);
// glTexSubImage2D is faster when not using a texture range
glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, w, h, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, g->videoMemory);
glTexSubImage2D(GL_TEXTURE_RECTANGLE, 0, 0, 0, w, h, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, g->videoMemory);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
@@ -104,20 +100,20 @@ void setupGL(GLWindow *g, int w, int h)
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_RECTANGLE_EXT);
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, g->videoTexture);
glEnable(GL_TEXTURE_RECTANGLE);
glBindTexture(GL_TEXTURE_RECTANGLE, g->videoTexture);
// glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_NV_EXT, 0, NULL);
// glTexParameteri(GL_TEXTURE_RECTANGLE_NV_EXT, GL_TEXTURE_STORAGE_HINT_APPLE , GL_STORAGE_CACHED_APPLE);
// glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, w,
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA, w,
h, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, g->videoMemory);
glDisable(GL_DEPTH_TEST);
@@ -140,7 +136,7 @@ void restoreGL(GLWindow *g, int w, int h)
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_RECTANGLE_EXT);
glEnable(GL_TEXTURE_RECTANGLE);
glDisable(GL_DEPTH_TEST);
}
@@ -169,6 +165,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 +178,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);
@@ -433,4 +435,4 @@ int graphics_blit(long x, long y, long w, long h)
int getKeyStatus(int key)
{
return mainWindow.keyArray[key].curState;
}
}