From 430a246fe81d7eab6823bf6ca4562fd1e99f2a5d Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Sun, 26 Jan 2025 23:19:56 +0100 Subject: refactor mappers --- lib/nes/cartridge.hh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'lib/nes/cartridge.hh') diff --git a/lib/nes/cartridge.hh b/lib/nes/cartridge.hh index 3ce2a16..13c3594 100644 --- a/lib/nes/cartridge.hh +++ b/lib/nes/cartridge.hh @@ -1,5 +1,7 @@ #pragma once +#include "nes/util/status.hh" +#include "nes/mapper.hh" #include #include #include @@ -14,12 +16,16 @@ namespace nes class cartridge { - bool is_valid_{ false }; + static constexpr auto prg_rom_bank_size = std::size_t{ 16 * 1024 }; + static constexpr auto chr_rom_bank_size = std::size_t{ 8 * 1024 }; + static constexpr auto ram_bank_size = std::size_t{ 8 * 1024 }; + + status status_{ status::error_uninitialized }; std::vector prg_rom_; std::vector chr_rom_; std::vector ram_; - std::uint8_t mapper_number_{ 0 }; name_table_arrangement name_table_arrangement_{}; + mapper* mapper_{ &mapper::invalid() }; public: explicit cartridge() = default; @@ -27,7 +33,7 @@ namespace nes static auto from_data(void const* data, std::size_t length) -> cartridge; static auto from_file(std::string_view path) -> cartridge; - auto is_valid() const -> bool { return is_valid_; } + auto get_status() const -> status { return status_; } auto get_prg_rom() const -> std::uint8_t const* { return prg_rom_.data(); } auto get_prg_rom_length() const -> std::size_t { return prg_rom_.size(); } auto get_chr_rom() const -> std::uint8_t const* { return chr_rom_.data(); } @@ -35,7 +41,10 @@ namespace nes auto get_ram() const -> std::uint8_t const* { return ram_.data(); } auto get_ram_mut() -> std::uint8_t* { return ram_.data(); } auto get_ram_length() const -> std::size_t { return ram_.size(); } - auto get_mapper_number() const -> std::uint8_t { return mapper_number_; } + auto get_mapper() const -> mapper& { return *mapper_; } auto get_name_table_arrangement() const -> name_table_arrangement { return name_table_arrangement_; } + + private: + explicit cartridge(status); }; } // namespace nes \ No newline at end of file -- cgit v1.3.1