diff options
Diffstat (limited to 'src/devices/bus/snes/sdd1.h')
-rw-r--r-- | src/devices/bus/snes/sdd1.h | 269 |
1 files changed, 129 insertions, 140 deletions
diff --git a/src/devices/bus/snes/sdd1.h b/src/devices/bus/snes/sdd1.h index 244c552f101..6265e630bdc 100644 --- a/src/devices/bus/snes/sdd1.h +++ b/src/devices/bus/snes/sdd1.h @@ -1,174 +1,163 @@ // license:BSD-3-Clause // copyright-holders:Fabio Priuli -#ifndef __SNS_SDD1_H -#define __SNS_SDD1_H +#ifndef MAME_BUS_SNES_SDD1_H +#define MAME_BUS_SNES_SDD1_H -#include "snes_slot.h" +#pragma once -// misc classes for the S-DD1 +#include "snes_slot.h" -class SDD1_IM //Input Manager -{ -public: - SDD1_IM(): - m_byte_ptr(0), - m_bit_count(0) - { } - uint32_t m_byte_ptr; - uint8_t m_bit_count; - void IM_prepareDecomp(uint32_t in_buf); - uint8_t IM_getCodeword(uint8_t *ROM, uint32_t *mmc, const uint8_t code_len); -}; +// ======================> sns_rom_sdd1_device -class SDD1_GCD //Golomb-Code Decoder +class sns_rom_sdd1_device : public device_t, + public device_sns_cart_interface { public: - SDD1_GCD(SDD1_IM* associatedIM) - : m_IM(associatedIM) { } - - SDD1_IM* m_IM; - - void GCD_getRunCount(uint8_t *ROM, uint32_t *mmc, uint8_t code_num, uint8_t* MPScount, uint8_t* LPSind); -}; + // construction/destruction + sns_rom_sdd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -class SDD1_BG // Bits Generator -{ -public: - SDD1_BG(SDD1_GCD* associatedGCD, uint8_t code) - : m_code_num(code), - m_MPScount(0), - m_LPSind(0), - m_GCD(associatedGCD) - { - } + // reading and writing + virtual DECLARE_READ8_MEMBER(read_l) override; + virtual DECLARE_READ8_MEMBER(read_h) override; + virtual DECLARE_READ8_MEMBER(read_ram) override; + virtual DECLARE_WRITE8_MEMBER(write_ram) override; + virtual DECLARE_READ8_MEMBER(chip_read) override; + virtual DECLARE_WRITE8_MEMBER(chip_write) override; - uint8_t m_code_num; - uint8_t m_MPScount; - uint8_t m_LPSind; - SDD1_GCD* m_GCD; +protected: + sns_rom_sdd1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - void BG_prepareDecomp(); - uint8_t BG_getBit(uint8_t *ROM, uint32_t *mmc, uint8_t* endOfRun); -} ; + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; -struct SDD1_PEM_ContextInfo -{ - uint8_t status; - uint8_t MPS; -}; + // misc classes for the S-DD1 -class SDD1_PEM //Probability Estimation Module -{ -public: - SDD1_PEM( - SDD1_BG* associatedBG0, SDD1_BG* associatedBG1, - SDD1_BG* associatedBG2, SDD1_BG* associatedBG3, - SDD1_BG* associatedBG4, SDD1_BG* associatedBG5, - SDD1_BG* associatedBG6, SDD1_BG* associatedBG7) + class SDD1_IM //Input Manager { - m_BG[0] = associatedBG0; - m_BG[1] = associatedBG1; - m_BG[2] = associatedBG2; - m_BG[3] = associatedBG3; - m_BG[4] = associatedBG4; - m_BG[5] = associatedBG5; - m_BG[6] = associatedBG6; - m_BG[7] = associatedBG7; - } + public: + SDD1_IM() { } - SDD1_PEM_ContextInfo m_contextInfo[32]; - SDD1_BG* m_BG[8]; + void IM_prepareDecomp(uint32_t in_buf); + uint8_t IM_getCodeword(uint8_t *ROM, uint32_t *mmc, const uint8_t code_len); - void PEM_prepareDecomp(); - uint8_t PEM_getBit(uint8_t *ROM, uint32_t *mmc, uint8_t context); -} ; + uint32_t m_byte_ptr = 0; + uint8_t m_bit_count = 0; + }; + class SDD1_GCD //Golomb-Code Decoder + { + public: + SDD1_GCD(SDD1_IM* associatedIM) : m_IM(associatedIM) { } -class SDD1_CM -{ -public: - SDD1_CM(SDD1_PEM* associatedPEM) - : m_bitplanesInfo(0), m_contextBitsInfo(0), m_bit_number(0), m_currBitplane(0), m_PEM(associatedPEM) { } + void GCD_getRunCount(uint8_t *ROM, uint32_t *mmc, uint8_t code_num, uint8_t* MPScount, uint8_t* LPSind); - uint8_t m_bitplanesInfo; - uint8_t m_contextBitsInfo; - uint8_t m_bit_number; - uint8_t m_currBitplane; - uint16_t m_prevBitplaneBits[8]; - SDD1_PEM* m_PEM; + SDD1_IM* m_IM; + }; - void CM_prepareDecomp(uint8_t *ROM, uint32_t *mmc, uint32_t first_byte); - uint8_t CM_getBit(uint8_t *ROM, uint32_t *mmc); -} ; + class SDD1_BG // Bits Generator + { + public: + SDD1_BG(SDD1_GCD* associatedGCD, uint8_t code) : m_code_num(code), m_GCD(associatedGCD) { } + void BG_prepareDecomp(); + uint8_t BG_getBit(uint8_t *ROM, uint32_t *mmc, uint8_t* endOfRun); -class SDD1_OL -{ -public: - SDD1_OL(SDD1_CM* associatedCM) - : m_bitplanesInfo(0), m_length(0), m_buffer(nullptr), m_CM(associatedCM) { } + uint8_t m_code_num; + uint8_t m_MPScount = 0; + uint8_t m_LPSind = 0; + SDD1_GCD* m_GCD; + }; - uint8_t m_bitplanesInfo; - uint16_t m_length; - uint8_t* m_buffer; - SDD1_CM* m_CM; + struct SDD1_PEM_ContextInfo + { + uint8_t status; + uint8_t MPS; + }; - void OL_prepareDecomp(uint8_t *ROM, uint32_t *mmc, uint32_t first_byte, uint16_t out_len, uint8_t *out_buf); - void OL_launch(uint8_t *ROM, uint32_t *mmc); -} ; + class SDD1_PEM //Probability Estimation Module + { + public: + SDD1_PEM( + SDD1_BG* associatedBG0, + SDD1_BG* associatedBG1, + SDD1_BG* associatedBG2, + SDD1_BG* associatedBG3, + SDD1_BG* associatedBG4, + SDD1_BG* associatedBG5, + SDD1_BG* associatedBG6, + SDD1_BG* associatedBG7) + : m_BG{ associatedBG0, associatedBG1, associatedBG2, associatedBG3, associatedBG4, associatedBG5, associatedBG6, associatedBG7 } + { + } + + void PEM_prepareDecomp(); + uint8_t PEM_getBit(uint8_t *ROM, uint32_t *mmc, uint8_t context); + + SDD1_PEM_ContextInfo m_contextInfo[32]; + SDD1_BG* m_BG[8]; + }; + + + class SDD1_CM + { + public: + SDD1_CM(SDD1_PEM* associatedPEM) : m_PEM(associatedPEM) { } -class SDD1_emu -{ -public: - SDD1_emu(running_machine &machine); - - running_machine &machine() const { return m_machine; } - - std::unique_ptr<SDD1_IM> m_IM; - std::unique_ptr<SDD1_GCD> m_GCD; - std::unique_ptr<SDD1_BG> m_BG0; - std::unique_ptr<SDD1_BG> m_BG1; - std::unique_ptr<SDD1_BG> m_BG2; - std::unique_ptr<SDD1_BG> m_BG3; - std::unique_ptr<SDD1_BG> m_BG4; - std::unique_ptr<SDD1_BG> m_BG5; - std::unique_ptr<SDD1_BG> m_BG6; - std::unique_ptr<SDD1_BG> m_BG7; - std::unique_ptr<SDD1_PEM> m_PEM; - std::unique_ptr<SDD1_CM> m_CM; - std::unique_ptr<SDD1_OL> m_OL; - - void SDD1emu_decompress(uint8_t *ROM, uint32_t *mmc, uint32_t in_buf, uint16_t out_len, uint8_t *out_buf); - -private: - running_machine& m_machine; -}; + void CM_prepareDecomp(uint8_t *ROM, uint32_t *mmc, uint32_t first_byte); + uint8_t CM_getBit(uint8_t *ROM, uint32_t *mmc); + uint8_t m_bitplanesInfo = 0; + uint8_t m_contextBitsInfo = 0; + uint8_t m_bit_number = 0; + uint8_t m_currBitplane = 0; + uint16_t m_prevBitplaneBits[8]; + SDD1_PEM* m_PEM; + }; -// ======================> sns_rom_sdd1_device + class SDD1_OL + { + public: + SDD1_OL(SDD1_CM* associatedCM) : m_CM(associatedCM) { } -class sns_rom_sdd1_device : public device_t, - public device_sns_cart_interface -{ -public: - // construction/destruction - sns_rom_sdd1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - sns_rom_sdd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + void OL_prepareDecomp(uint8_t *ROM, uint32_t *mmc, uint32_t first_byte, uint16_t out_len, uint8_t *out_buf); + void OL_launch(uint8_t *ROM, uint32_t *mmc); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + uint8_t m_bitplanesInfo = 0; + uint16_t m_length = 0; + uint8_t* m_buffer = nullptr; + SDD1_CM* m_CM; + }; - // reading and writing - virtual DECLARE_READ8_MEMBER(read_l) override; - virtual DECLARE_READ8_MEMBER(read_h) override; - virtual DECLARE_READ8_MEMBER(read_ram) override; - virtual DECLARE_WRITE8_MEMBER(write_ram) override; - virtual DECLARE_READ8_MEMBER(chip_read) override; - virtual DECLARE_WRITE8_MEMBER(chip_write) override; + class SDD1_emu + { + public: + SDD1_emu(running_machine &machine); + + running_machine &machine() const { return m_machine; } + + void SDD1emu_decompress(uint8_t *ROM, uint32_t *mmc, uint32_t in_buf, uint16_t out_len, uint8_t *out_buf); + + std::unique_ptr<SDD1_IM> m_IM; + std::unique_ptr<SDD1_GCD> m_GCD; + std::unique_ptr<SDD1_BG> m_BG0; + std::unique_ptr<SDD1_BG> m_BG1; + std::unique_ptr<SDD1_BG> m_BG2; + std::unique_ptr<SDD1_BG> m_BG3; + std::unique_ptr<SDD1_BG> m_BG4; + std::unique_ptr<SDD1_BG> m_BG5; + std::unique_ptr<SDD1_BG> m_BG6; + std::unique_ptr<SDD1_BG> m_BG7; + std::unique_ptr<SDD1_PEM> m_PEM; + std::unique_ptr<SDD1_CM> m_CM; + std::unique_ptr<SDD1_OL> m_OL; + + private: + running_machine& m_machine; + }; uint8_t read_helper(uint32_t offset); @@ -195,6 +184,6 @@ public: // device type definition -extern const device_type SNS_LOROM_SDD1; +DECLARE_DEVICE_TYPE(SNS_LOROM_SDD1, sns_rom_sdd1_device) -#endif +#endif // MAME_BUS_SNES_SDD1_H |