diff options
Diffstat (limited to 'lib/nes/cartridge.hh')
| -rw-r--r-- | lib/nes/cartridge.hh | 17 |
1 files changed, 13 insertions, 4 deletions
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 <cstddef> #include <vector> #include <string_view> @@ -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<std::uint8_t> prg_rom_; std::vector<std::uint8_t> chr_rom_; std::vector<std::uint8_t> 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 |
