Adding SPM package

This commit is contained in:
Selim Mustafaev 2023-09-25 23:03:06 +03:00
parent d3eaacbe8a
commit cb12225d5e
12 changed files with 57 additions and 14 deletions

View File

@ -6,7 +6,7 @@ set(CMAKE_CXX_STANDARD 23)
add_compile_definitions(SDL_MAIN_HANDLED) add_compile_definitions(SDL_MAIN_HANDLED)
add_executable(nes add_executable(nes
main.cpp examples/sdl/main.cpp
src/Cartridge.cpp src/Cartridge.cpp
src/Cartridge.h src/Cartridge.h
src/Nes.cpp src/Nes.cpp
@ -17,16 +17,16 @@ add_executable(nes
src/Mapper/Mapper.h src/Mapper/Mapper.h
src/Mapper/Mapper0.cpp src/Mapper/Mapper0.cpp
src/Mapper/Mapper0.h src/Ppu.cpp src/Ppu.h src/Mapper/Mapper0.h src/Ppu.cpp src/Ppu.h
src/Window.cpp examples/sdl/Window.cpp
src/Window.h examples/sdl/Window.h
src/Shifter.cpp src/Shifter.cpp
src/Shifter.h src/Shifter.h
src/Logger.cpp src/Logger.cpp
src/Logger.h src/Logger.h
src/Controller.cpp src/Controller.cpp
src/Controller.h src/Controller.h
src/SdlKeyboardController.cpp examples/sdl/SdlKeyboardController.cpp
src/SdlKeyboardController.h src/Dma.cpp src/Dma.h examples/sdl/SdlKeyboardController.h src/Dma.cpp src/Dma.h
src/Oam.cpp src/Oam.cpp
src/Oam.h) src/Oam.h)

27
Package.swift Normal file
View File

@ -0,0 +1,27 @@
// swift-tools-version: 5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "NesKit",
platforms: [
.macOS(.v13),
.iOS(.v16)
],
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "NesKit",
targets: ["NesKit"]),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(name: "NesKit",
path: "./src",
exclude: ["Logger.cpp", "Logger.h"],
publicHeadersPath: ".")
],
cxxLanguageStandard: .cxx20
)

View File

@ -5,7 +5,7 @@
#ifndef NES_SDLKEYBOARDCONTROLLER_H #ifndef NES_SDLKEYBOARDCONTROLLER_H
#define NES_SDLKEYBOARDCONTROLLER_H #define NES_SDLKEYBOARDCONTROLLER_H
#include "Controller.h" #include "../../src/Controller.h"
class SdlKeyboardController: public nes::Controller { class SdlKeyboardController: public nes::Controller {
public: public:

View File

@ -5,7 +5,7 @@
#ifndef NES_WINDOW_H #ifndef NES_WINDOW_H
#define NES_WINDOW_H #define NES_WINDOW_H
#include "Ppu.h" #include "../../src/Ppu.h"
#include <SDL.h> #include <SDL.h>
#include <memory> #include <memory>

View File

@ -1,6 +1,6 @@
#include "src/Nes.h" #include "../../src/Nes.h"
#include "src/Window.h" #include "Window.h"
#include "src/SdlKeyboardController.h" #include "SdlKeyboardController.h"
#include <functional> #include <functional>
#include <thread> #include <thread>
@ -22,7 +22,7 @@ int main() {
}); });
device.connect(std::make_shared<SdlKeyboardController>()); device.connect(std::make_shared<SdlKeyboardController>());
//device.insertCartridge("/home/selim/Downloads/dk.nes"); //device.insertCartridge("/home/selim/Downloads/dk.nes");
device.insertCartridge("/Users/20910606/Documents/smb.nes"); device.insertCartridge("/Users/selim/Documents/smb.nes");
//device.insertCartridge("C:\\Users\\selim\\Documents\\nestest.nes"); //device.insertCartridge("C:\\Users\\selim\\Documents\\nestest.nes");
auto frameStart = std::chrono::steady_clock::now(); auto frameStart = std::chrono::steady_clock::now();

View File

@ -5,7 +5,10 @@
#include "Cpu.h" #include "Cpu.h"
#include "Nes.h" #include "Nes.h"
#include <iostream> #include <iostream>
#ifdef NES_LOGGING
#include <fmt/format.h> #include <fmt/format.h>
#endif
namespace nes { namespace nes {
@ -223,6 +226,7 @@ namespace nes {
_ticks = 8; _ticks = 8;
} }
#ifdef NES_LOGGING
std::string Cpu::state() const { std::string Cpu::state() const {
return fmt::format("{} ({:02X}), PC: {:X}, SP: {:X}, A: {:02X}, X: {:02X}, Y: {:02X}, [N:{}, V:{}, B{}, D{}, I{}, Z:{}, C:{}], H: {:08X}", return fmt::format("{} ({:02X}), PC: {:X}, SP: {:X}, A: {:02X}, X: {:02X}, Y: {:02X}, [N:{}, V:{}, B{}, D{}, I{}, Z:{}, C:{}], H: {:08X}",
_instructions[_currentOpcode].name, _instructions[_currentOpcode].name,
@ -237,6 +241,7 @@ namespace nes {
(int)getFlag(Carry), (int)getFlag(Carry),
_system->zpHash()); _system->zpHash());
} }
#endif
void Cpu::setFlag(CpuFlags flag, bool value) { void Cpu::setFlag(CpuFlags flag, bool value) {
if(value) { if(value) {

View File

@ -49,7 +49,10 @@ namespace nes {
bool getFlag(CpuFlags flag) const; bool getFlag(CpuFlags flag) const;
void setStartAddress(uint16_t address); void setStartAddress(uint16_t address);
void nmi(); void nmi();
#ifdef NES_LOGGING
std::string state() const; std::string state() const;
#endif
private: private:
size_t _ticks; size_t _ticks;

View File

@ -3,7 +3,10 @@
// //
#include "Ppu.h" #include "Ppu.h"
#ifdef NES_LOGGING
#include <fmt/format.h> #include <fmt/format.h>
#endif
namespace nes { namespace nes {
@ -422,6 +425,7 @@ namespace nes {
} }
} }
#ifdef NES_LOGGING
std::string Ppu::state() const { std::string Ppu::state() const {
auto palettes = (uint32_t*)_paletteTable.get(); auto palettes = (uint32_t*)_paletteTable.get();
@ -445,6 +449,7 @@ namespace nes {
_bgAttribShifter._lo, _bgAttribShifter._lo,
_bgAttribShifter._hi); _bgAttribShifter._hi);
} }
#endif
void Ppu::writeOam(uint8_t address, uint8_t data) { void Ppu::writeOam(uint8_t address, uint8_t data) {
_oam->write(address, data); _oam->write(address, data);

View File

@ -107,11 +107,14 @@ namespace nes {
void setPixel(uint16_t row, uint16_t column, Pixel pixel); void setPixel(uint16_t row, uint16_t column, Pixel pixel);
void connect(Cartridge* cartridge); void connect(Cartridge* cartridge);
void reset(); void reset();
[[nodiscard]] std::string state() const;
void writeOam(uint8_t address, uint8_t data); void writeOam(uint8_t address, uint8_t data);
uint8_t internalRead(uint16_t address); uint8_t internalRead(uint16_t address);
void internalWrite(uint16_t address, uint8_t value); void internalWrite(uint16_t address, uint8_t value);
#ifdef NES_LOGGING
[[nodiscard]] std::string state() const;
#endif
public: public:
std::function<void(const Pixel*)> onNewFrame; std::function<void(const Pixel*)> onNewFrame;