aboutsummaryrefslogtreecommitdiff
path: root/src/GBACart.h
diff options
context:
space:
mode:
authorJesse Talavera-Greenberg <jesse@jesse.tg>2023-11-08 16:21:21 -0500
committerGitHub <noreply@github.com>2023-11-08 22:21:21 +0100
commit8b47178add1e78da5ff96b335ecac73f34f4a8e9 (patch)
tree23bf7bad0aec69c3533ca22856dc24b96e1690b0 /src/GBACart.h
parentb4ff911fa357dd4a3572ff55373f8ddcd3f6f5ad (diff)
Move GBACart-related global state into objects (#1870)
- RAII will now do the heavy lifting - Mark some methods as const or noexcept - Once the `NDS` object is finalized, most of these `assert`s can go away
Diffstat (limited to 'src/GBACart.h')
-rw-r--r--src/GBACart.h98
1 files changed, 49 insertions, 49 deletions
diff --git a/src/GBACart.h b/src/GBACart.h
index 32ff6d5..7447f6f 100644
--- a/src/GBACart.h
+++ b/src/GBACart.h
@@ -53,7 +53,7 @@ public:
virtual int SetInput(int num, bool pressed);
- virtual u16 ROMRead(u32 addr);
+ virtual u16 ROMRead(u32 addr) const;
virtual void ROMWrite(u32 addr, u16 val);
virtual u8 SRAMRead(u32 addr);
@@ -83,7 +83,7 @@ public:
virtual void SetupSave(u32 type) override;
virtual void LoadSave(const u8* savedata, u32 savelen) override;
- virtual u16 ROMRead(u32 addr) override;
+ virtual u16 ROMRead(u32 addr) const override;
virtual void ROMWrite(u32 addr, u16 val) override;
virtual u8 SRAMRead(u32 addr) override;
@@ -180,7 +180,7 @@ public:
void DoSavestate(Savestate* file) override;
- u16 ROMRead(u32 addr) override;
+ u16 ROMRead(u32 addr) const override;
void ROMWrite(u32 addr, u16 val) override;
private:
@@ -195,13 +195,52 @@ enum
Input_SolarSensorUp,
};
-extern std::unique_ptr<CartCommon> Cart;
-
-bool Init();
-void DeInit();
-void Reset();
-
-void DoSavestate(Savestate* file);
+class GBACartSlot
+{
+public:
+ GBACartSlot() noexcept = default;
+ ~GBACartSlot() noexcept = default;
+ void Reset() noexcept;
+ void DoSavestate(Savestate* file) noexcept;
+ /// Applies the GBACartData to the emulator state and unloads an existing ROM if any.
+ /// Upon successful insertion, \c cart will be nullptr and the global GBACart state
+ /// (\c CartROM, CartInserted, etc.) will be updated.
+ bool InsertROM(std::unique_ptr<CartCommon>&& cart) noexcept;
+ bool LoadROM(const u8* romdata, u32 romlen) noexcept;
+ void LoadSave(const u8* savedata, u32 savelen) noexcept;
+
+ void LoadAddon(int type) noexcept;
+
+ void EjectCart() noexcept;
+
+ // TODO: make more flexible, support nonbinary inputs
+ int SetInput(int num, bool pressed) noexcept;
+
+ void SetOpenBusDecay(u16 val) noexcept { OpenBusDecay = val; }
+
+ u16 ROMRead(u32 addr) const noexcept;
+ void ROMWrite(u32 addr, u16 val) noexcept;
+
+ u8 SRAMRead(u32 addr) noexcept;
+ void SRAMWrite(u32 addr, u8 val) noexcept;
+
+ /// This function is intended to allow frontends to save and load SRAM
+ /// without using melonDS APIs.
+ /// Modifying the emulated SRAM for any other reason is strongly discouraged.
+ /// The returned pointer may be invalidated if the emulator is reset,
+ /// or when a new game is loaded.
+ /// Consequently, don't store the returned pointer for any longer than necessary.
+ /// @returns Pointer to this cart's SRAM if a cart is loaded and supports SRAM, otherwise \c nullptr.
+ [[nodiscard]] u8* GetSaveMemory() noexcept { return Cart ? Cart->GetSaveMemory() : nullptr; }
+ [[nodiscard]] const u8* GetSaveMemory() const noexcept { return Cart ? Cart->GetSaveMemory() : nullptr; }
+
+ /// @returns The length of the buffer returned by ::GetSaveMemory()
+ /// if a cart is loaded and supports SRAM, otherwise zero.
+ [[nodiscard]] u32 GetSaveMemoryLength() const noexcept { return Cart ? Cart->GetSaveMemoryLength() : 0; }
+private:
+ std::unique_ptr<CartCommon> Cart = nullptr;
+ u16 OpenBusDecay = 0;
+};
/// Parses the given ROM data and constructs a \c GBACart::CartCommon subclass
/// that can be inserted into the emulator or used to extract information about the cart beforehand.
@@ -213,45 +252,6 @@ void DoSavestate(Savestate* file);
/// or \c nullptr if the ROM data couldn't be parsed.
std::unique_ptr<CartCommon> ParseROM(const u8* romdata, u32 romlen);
-/// Applies the GBACartData to the emulator state and unloads an existing ROM if any.
-/// Upon successful insertion, \c cart will be nullptr and the global GBACart state
-/// (\c CartROM, CartInserted, etc.) will be updated.
-bool InsertROM(std::unique_ptr<CartCommon>&& cart);
-bool LoadROM(const u8* romdata, u32 romlen);
-void LoadSave(const u8* savedata, u32 savelen);
-
-void LoadAddon(int type);
-
-void EjectCart();
-
-//bool LoadROM(const char* path, const char* sram);
-//bool LoadROM(const u8* romdata, u32 filelength, const char *sram);
-//void RelocateSave(const char* path, bool write);
-
-// TODO: make more flexible, support nonbinary inputs
-int SetInput(int num, bool pressed);
-
-void SetOpenBusDecay(u16 val);
-
-u16 ROMRead(u32 addr);
-void ROMWrite(u32 addr, u16 val);
-
-u8 SRAMRead(u32 addr);
-void SRAMWrite(u32 addr, u8 val);
-
-/// This function is intended to allow frontends to save and load SRAM
-/// without using melonDS APIs.
-/// Modifying the emulated SRAM for any other reason is strongly discouraged.
-/// The returned pointer may be invalidated if the emulator is reset,
-/// or when a new game is loaded.
-/// Consequently, don't store the returned pointer for any longer than necessary.
-/// @returns Pointer to this cart's SRAM if a cart is loaded and supports SRAM, otherwise \c nullptr.
-u8* GetSaveMemory();
-
-/// @returns The length of the buffer returned by ::GetSaveMemory()
-/// if a cart is loaded and supports SRAM, otherwise zero.
-u32 GetSaveMemoryLength();
-
}
#endif // GBACART_H