This commit is contained in:
Adrian Conlon 2017-10-22 21:31:47 +01:00
commit a25eac63e1
14 changed files with 54 additions and 20 deletions

View File

@ -1,6 +1,8 @@
#pragma once
#include <cstdint>
#include <string>
#include <sstream>
#include <boost/format.hpp>
namespace EightBit {

View File

@ -4,16 +4,17 @@
#include <array>
#include <cstdint>
#include <Ram.h>
#include "GameBoyBus.h"
#include "AbstractColourPalette.h"
#include "ObjectAttribute.h"
namespace EightBit {
class Ram;
namespace GameBoy {
class AbstractColourPalette;
class CharacterDefinition;
class Bus;
class Display {
public:

View File

@ -7,6 +7,7 @@
#include <Ram.h>
#include <Bus.h>
#include "LR35902.h"
#include "IoRegisters.h"
namespace EightBit {
@ -32,6 +33,7 @@ namespace EightBit {
Bus();
LR35902& CPU() { return m_cpu; }
Ram& VRAM() { return m_videoRam; }
Ram& OAMRAM() { return m_oamRam; }
IoRegisters& IO() { return m_ioPorts; }
@ -51,6 +53,8 @@ namespace EightBit {
virtual uint8_t& reference(uint16_t address, bool& rom);
private:
LR35902 m_cpu;
Rom m_bootRom; // 0x0000 - 0x00ff
std::vector<Rom> m_gameRomBanks; // 0x0000 - 0x3fff, 0x4000 - 0x7fff (switchable)
Ram m_videoRam; // 0x8000 - 0x9fff

View File

@ -4,12 +4,13 @@
#include <IntelProcessor.h>
#include <Signal.h>
#include "GameBoyBus.h"
#include "Display.h"
#include <Register.h>
namespace EightBit {
namespace GameBoy {
class Bus;
class LR35902 : public IntelProcessor {
public:
enum StatusBits {

View File

@ -2,22 +2,17 @@
#include <cstdint>
#include <Ram.h>
#include <Processor.h>
namespace EightBit {
class Ram;
namespace GameBoy {
class ObjectAttribute {
public:
ObjectAttribute() {}
ObjectAttribute(Ram& ram, uint16_t address, int height) {
m_positionY = ram.peek(address);
m_positionX = ram.peek(address + 1);
m_pattern = ram.peek(address + 2);
if (height == 16)
m_pattern >>= 1;
m_flags = ram.peek(address + 3);
}
ObjectAttribute();
ObjectAttribute(Ram& ram, uint16_t address, int height);
uint8_t positionY() const { return m_positionY; }
uint8_t positionX() const { return m_positionX; }

View File

@ -7,6 +7,7 @@
#include "Memory.h"
#include "LR35902.h"
#include "IoRegisters.h"
EightBit::GameBoy::Disassembler::Disassembler() {
// Disable exceptions where too many format arguments are available

View File

@ -1,9 +1,11 @@
#include "stdafx.h"
#include "Display.h"
#include "Processor.h"
#include "CharacterDefinition.h"
#include "ObjectAttribute.h"
#include "GameBoyBus.h"
#include "AbstractColourPalette.h"
#include <Processor.h>
#include <vector>
EightBit::GameBoy::Display::Display(const AbstractColourPalette* colours, Bus& bus, Ram& oam, Ram& vram)

View File

@ -2,7 +2,8 @@
#include "GameBoyBus.h"
EightBit::GameBoy::Bus::Bus()
: m_bootRom(0x100),
: m_cpu(*this),
m_bootRom(0x100),
m_gameRomBanks(1),
m_videoRam(0x2000),
m_ramBanks(0),
@ -24,6 +25,7 @@ EightBit::GameBoy::Bus::Bus()
void EightBit::GameBoy::Bus::reset() {
m_ioPorts.reset();
m_cpu.initialise();
}
void EightBit::GameBoy::Bus::loadBootRom(const std::string& path) {

View File

@ -1,5 +1,7 @@
#include "stdafx.h"
#include "LR35902.h"
#include "GameBoyBus.h"
#include "Display.h"
// based on http://www.z80.info/decoding.htm

View File

@ -157,6 +157,7 @@
<ClCompile Include="Display.cpp" />
<ClCompile Include="IoRegisters.cpp" />
<ClCompile Include="LR35902.cpp" />
<ClCompile Include="ObjectAttribute.cpp" />
<ClCompile Include="Profiler.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>

View File

@ -67,5 +67,8 @@
<ClCompile Include="IoRegisters.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ObjectAttribute.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -2,7 +2,7 @@ LIB = liblr35902.a
CXXFLAGS = -Wall -std=c++11 -pipe -I ../inc -I ../../inc
CXXFILES = CharacterDefinition.cpp Disassembler.cpp Display.cpp GameBoyBus.cpp LR35902.cpp Profiler.cpp
CXXFILES = CharacterDefinition.cpp Disassembler.cpp Display.cpp GameBoyBus.cpp IoRegisters.cpp LR35902.cpp ObjectAttribute.cpp Profiler.cpp
CXXOBJECTS = $(CXXFILES:.cpp=.o)

View File

@ -0,0 +1,16 @@
#include "stdafx.h"
#include "ObjectAttribute.h"
#include <Ram.h>
EightBit::GameBoy::ObjectAttribute::ObjectAttribute() {
}
EightBit::GameBoy::ObjectAttribute::ObjectAttribute(Ram& ram, uint16_t address, int height) {
m_positionY = ram.peek(address);
m_positionX = ram.peek(address + 1);
m_pattern = ram.peek(address + 2);
if (height == 16)
m_pattern >>= 1;
m_flags = ram.peek(address + 3);
}

View File

@ -28,7 +28,11 @@
#include <Memory.h>
#include <Processor.h>
#include <IntelProcessor.h>
#include <Register.h>
#include <Signal.h>
#include <Rom.h>
#include <Ram.h>
#include <Bus.h>
#ifdef _MSC_VER
#include <intrin.h>