Improving PPU.

This commit is contained in:
Andrea Orrù 2013-11-24 12:35:26 +01:00
parent f2c1212389
commit 3a46496e9b
5 changed files with 92 additions and 18 deletions

View file

@ -7,7 +7,7 @@ OBJ = $(patsubst %.cpp, %.o, $(SRC))
.PHONY: check-syntax clean
laines: $(OBJ)
$(CXX) -o $@ $^
$(CXX) $(CXXFLAGS) -o $@ $^
check-syntax:
$(CXX) $(CXXFLAGS) -o /dev/null -S ${CHK_SOURCES}

View file

@ -112,7 +112,7 @@ void BRK() { exit(0); }
/* Execute a CPU instruction */
void step()
void step()
{
switch (rd(PC++)) // Fetch the opcode.
{
@ -162,7 +162,7 @@ void step()
case 0x95: return st<A,zpx>() ; case 0x96: return st<X,zpy>() ;
case 0x98: return tr<Y,A>() ; case 0x99: return st<A,aby>() ;
case 0x9A: return tr<X,S>() ; case 0x9D: return st<A,abx>() ;
case 0xA0: return ld<Y,imm>() ; case 0xA1: return ld<A,izx>() ;
case 0xA0: return ld<Y,imm>() ; case 0xA1: return ld<A,izx>() ;
case 0xA2: return ld<X,imm>() ; case 0xA4: return ld<Y,zp>() ;
case 0xA5: return ld<A,zp>() ; case 0xA6: return ld<X,zp>() ;
case 0xA8: return tr<A,Y>() ; case 0xA9: return ld<A,imm>() ;
@ -222,7 +222,7 @@ int main(int argc, char const *argv[])
CPU::PC, CPU::A, CPU::X, CPU::Y, CPU::P.reg, CPU::S, (CPU::cycles - old_cycles) * 3);
fflush(stdout);
old_cycles = CPU::cycles;
CPU::step();
}

View file

@ -3,23 +3,31 @@
namespace PPU {
int scanline;
int cycle;
void step()
{
if (y < 240)
switch (cycle++)
{
if (cyc > 0 && cyc <= 256)
{
switch (cyc % 8)
{
case 1: addr = ntAddr(); break; case 2: tileNum = rd(addr); break;
case 3: addr = attrAddr(); break; case 4: attr = rd(addr); break;
case 5: addr = dataAddr(); break; case 6: tileData.l = rd(addr); break;
case 7: addr += 8; break; case 0: tileData.h = rd(addr); v++; break;
}
render_pixel();
}
cyc++;
TILE_PHASE_1: addr = ntAddr(); break;
TILE_PHASE_2: tileNum = rd(addr); break;
TILE_PHASE_3: addr = attrAddr(); break;
TILE_PHASE_4: attr = rd(addr); break;
TILE_PHASE_5: addr = dataAddr(); break;
TILE_PHASE_6: tileData.l = rd(addr); break;
TILE_PHASE_7: addr += 8; break;
TILE_PHASE_8: tileData.h = rd(addr); h_scroll(); break;
case 256: tileData.h = rd(addr); h_scroll(); v_scroll(); break;
case 257: h_update(); break;
SPRITE_PHASE_5: addr = sprAddr(); break;
SPRITE_PHASE_6: sprData.l = rd(addr); break;
SPRITE_PHASE_7: addr += 8; break;
SPRITE_PHASE_8: sprData.h = rd(addr); break;
}
render_pixel();
}

12
src/ppu.hpp Normal file
View file

@ -0,0 +1,12 @@
#include "types.hpp"
#ifndef PPU_HPP
#define PPU_HPP
namespace PPU {
}
#endif // PPU_HPP

54
src/ppu_case.hpp Normal file
View file

@ -0,0 +1,54 @@
#ifndef PPU_CASE_HPP
#define PPU_CASE_HPP
#define TILE_PHASE_1 \
case 1: case 9: case 17: case 25: case 33: case 41: case 49: case 57: case 65: \
case 73: case 81: case 89: case 97: case 105: case 113: case 121: case 129: case 137: \
case 145: case 153: case 161: case 169: case 177: case 185: case 193: case 201: case 209: \
case 217: case 225: case 233: case 241: case 249
#define TILE_PHASE_2 \
case 2: case 10: case 18: case 26: case 34: case 42: case 50: case 58: case 66: \
case 74: case 82: case 90: case 98: case 106: case 114: case 122: case 130: case 138: \
case 146: case 154: case 162: case 170: case 178: case 186: case 194: case 202: case 210: \
case 218: case 226: case 234: case 242: case 250
#define TILE_PHASE_3 \
case 3: case 11: case 19: case 27: case 35: case 43: case 51: case 59: case 67: \
case 75: case 83: case 91: case 99: case 107: case 115: case 123: case 131: case 139: \
case 147: case 155: case 163: case 171: case 179: case 187: case 195: case 203: case 211: \
case 219: case 227: case 235: case 243: case 251
#define TILE_PHASE_4 \
case 4: case 12: case 20: case 28: case 36: case 44: case 52: case 60: case 68: \
case 76: case 84: case 92: case 100: case 108: case 116: case 124: case 132: case 140: \
case 148: case 156: case 164: case 172: case 180: case 188: case 196: case 204: case 212: \
case 220: case 228: case 236: case 244: case 252
#define TILE_PHASE_5 \
case 5: case 13: case 21: case 29: case 37: case 45: case 53: case 61: case 69: \
case 77: case 85: case 93: case 101: case 109: case 117: case 125: case 133: case 141: \
case 149: case 157: case 165: case 173: case 181: case 189: case 197: case 205: case 213: \
case 221: case 229: case 237: case 245: case 253
#define TILE_PHASE_6 \
case 6: case 14: case 22: case 30: case 38: case 46: case 54: case 62: case 70: \
case 78: case 86: case 94: case 102: case 110: case 118: case 126: case 134: case 142: \
case 150: case 158: case 166: case 174: case 182: case 190: case 198: case 206: case 214: \
case 222: case 230: case 238: case 246: case 254
#define TILE_PHASE_7 \
case 7: case 15: case 23: case 31: case 39: case 47: case 55: case 63: case 71: \
case 79: case 87: case 95: case 103: case 111: case 119: case 127: case 135: case 143: \
case 151: case 159: case 167: case 175: case 183: case 191: case 199: case 207: case 215: \
case 223: case 231: case 239: case 247: case 255
#define TILE_PHASE_8 \
case 8: case 16: case 24: case 32: case 40: case 48: case 56: case 64: case 72: \
case 80: case 88: case 96: case 104: case 112: case 120: case 128: case 136: case 144: \
case 152: case 160: case 168: case 176: case 184: case 192: case 200: case 208: case 216: \
case 224: case 232: case 240: case 248
#endif // PPU_CASE_HPP