diff options
author | 2016-11-15 16:19:52 -0500 | |
---|---|---|
committer | 2016-11-15 16:19:52 -0500 | |
commit | 7cd5e850f53538be0f8e53cc0c42d099a8828c1e (patch) | |
tree | f36b541221f7a9e2a1764f3b8ffe37dce875f0c0 | |
parent | 4681199d4b249b980b760318268e7acb246b9bda (diff) | |
parent | b3f324ffb826be7c549cab354d3284973245b27a (diff) |
Merge branch 'master' of https://github.com/mamedev/mame.git
-rw-r--r-- | src/lib/netlist/plib/pfmtlog.h | 79 | ||||
-rw-r--r-- | src/lib/netlist/plib/pstring.cpp | 9 | ||||
-rw-r--r-- | src/lib/netlist/plib/pstring.h | 78 | ||||
-rw-r--r-- | src/mame/drivers/naomi.cpp | 36 |
4 files changed, 97 insertions, 105 deletions
diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h index 44397da115a..0e8b7f46946 100644 --- a/src/lib/netlist/plib/pfmtlog.h +++ b/src/lib/netlist/plib/pfmtlog.h @@ -7,104 +7,100 @@ #ifndef PFMT_H_ #define PFMT_H_ -//#include <cstdarg> -//#include <cstddef> +#include <limits> #include "pconfig.h" #include "pstring.h" #include "ptypes.h" namespace plib { + template <typename T> -struct ptype_treats +struct ptype_traits_base { + static T cast(T x) { return x; } + static const bool is_signed = std::numeric_limits<T>::is_signed; }; -template<> -struct ptype_treats<bool> +template <> +struct ptype_traits_base<bool> { static unsigned int cast(bool x) { return static_cast<unsigned int>(x); } - static const bool is_signed = false; + static const bool is_signed = std::numeric_limits<bool>::is_signed; +}; + +template <typename T> +struct ptype_traits; + +template<> +struct ptype_traits<bool> : ptype_traits_base<bool> +{ static const char *size_specifier() { return ""; } }; template<> -struct ptype_treats<char> +struct ptype_traits<char> : ptype_traits_base<char> { - static short cast(char x) { return x; } - static const bool is_signed = true; static const char *size_specifier() { return "h"; } }; template<> -struct ptype_treats<short> +struct ptype_traits<short> : ptype_traits_base<short> { - static short cast(short x) { return x; } - static const bool is_signed = true; static const char *size_specifier() { return "h"; } }; template<> -struct ptype_treats<int> +struct ptype_traits<int> : ptype_traits_base<int> { - static int cast(int x) { return x; } - static const bool is_signed = true; static const char *size_specifier() { return ""; } }; template<> -struct ptype_treats<long> +struct ptype_traits<long> : ptype_traits_base<long> { - static long cast(long x) { return x; } - static const bool is_signed = true; static const char *size_specifier() { return "l"; } }; template<> -struct ptype_treats<long long> +struct ptype_traits<long long> : ptype_traits_base<long long> { - static long long cast(long long x) { return x; } - static const bool is_signed = true; static const char *size_specifier() { return "ll"; } }; template<> -struct ptype_treats<unsigned char> +struct ptype_traits<signed char> : ptype_traits_base<signed char> +{ + static const char *size_specifier() { return "h"; } +}; + +template<> +struct ptype_traits<unsigned char> : ptype_traits_base<unsigned char> { - static unsigned short cast(unsigned char x) { return x; } - static const bool is_signed = false; static const char *size_specifier() { return "h"; } }; template<> -struct ptype_treats<unsigned short> +struct ptype_traits<unsigned short> : ptype_traits_base<unsigned short> { - static unsigned short cast(unsigned short x) { return x; } - static const bool is_signed = false; static const char *size_specifier() { return "h"; } }; template<> -struct ptype_treats<unsigned int> +struct ptype_traits<unsigned int> : ptype_traits_base<unsigned int> { - static unsigned int cast(unsigned int x) { return x; } - static const bool is_signed = false; static const char *size_specifier() { return ""; } }; template<> -struct ptype_treats<unsigned long> +struct ptype_traits<unsigned long> : ptype_traits_base<unsigned long> { - static unsigned long cast(unsigned long x) { return x; } - static const bool is_signed = false; static const char *size_specifier() { return "l"; } }; template<> -struct ptype_treats<unsigned long long> +struct ptype_traits<unsigned long long> : ptype_traits_base<unsigned long long> { - static unsigned long long cast(unsigned long long x) { return x; } - static const bool is_signed = false; static const char *size_specifier() { return "ll"; } }; @@ -127,29 +123,28 @@ public: P &operator ()(char *x, const char *f = "") { format_element(f, "", "s", x); return static_cast<P &>(*this); } P &operator ()(const void *x, const char *f = "") { format_element(f, "", "p", x); return static_cast<P &>(*this); } P &operator ()(const pstring &x, const char *f = "") { format_element(f, "", "s", x.cstr() ); return static_cast<P &>(*this); } - P &operator ()(const pstring_t<putf8_traits> &x, const char *f = "") { format_element(f, "", "s", x.cstr() ); return static_cast<P &>(*this); } template<typename T> P &operator ()(const T x, const char *f = "") { - if (ptype_treats<T>::is_signed) - format_element(f, ptype_treats<T>::size_specifier(), "d", ptype_treats<T>::cast(x)); + if (ptype_traits<T>::is_signed) + format_element(f, ptype_traits<T>::size_specifier(), "d", ptype_traits<T>::cast(x)); else - format_element(f, ptype_treats<T>::size_specifier(), "u", ptype_treats<T>::cast(x)); + format_element(f, ptype_traits<T>::size_specifier(), "u", ptype_traits<T>::cast(x)); return static_cast<P &>(*this); } template<typename T> P &x(const T x, const char *f = "") { - format_element(f, ptype_treats<T>::size_specifier(), "x", x); + format_element(f, ptype_traits<T>::size_specifier(), "x", x); return static_cast<P &>(*this); } template<typename T> P &o(const T x, const char *f = "") { - format_element(f, ptype_treats<T>::size_specifier(), "o", x); + format_element(f, ptype_traits<T>::size_specifier(), "o", x); return static_cast<P &>(*this); } diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp index 644f7d6f49a..d42ef6f4400 100644 --- a/src/lib/netlist/plib/pstring.cpp +++ b/src/lib/netlist/plib/pstring.cpp @@ -17,11 +17,6 @@ #include "palloc.h" #include "plists.h" -template<> -pstr_t pstring_t<putf8_traits>::m_zero = pstr_t(0); -template<> -pstr_t pstring_t<pu8_traits>::m_zero = pstr_t(0); - template<typename F> pstring_t<F>::~pstring_t() { @@ -528,3 +523,7 @@ void pstring_t<F>::resetmem() template struct pstring_t<pu8_traits>; template struct pstring_t<putf8_traits>; + +const unsigned pu8_traits::MAXCODELEN; +const unsigned putf8_traits::MAXCODELEN; +const int pstringbuffer::DEFAULT_SIZE; diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h index e7c8b3ba0dc..17132a5bf31 100644 --- a/src/lib/netlist/plib/pstring.h +++ b/src/lib/netlist/plib/pstring.h @@ -20,27 +20,27 @@ // It uses reference counts and only uses new memory when a string changes. // ---------------------------------------------------------------------------------------- - struct pstr_t +struct pstr_t +{ + //str_t() : m_ref_count(1), m_len(0) { m_str[0] = 0; } + pstr_t(const std::size_t alen) { - //str_t() : m_ref_count(1), m_len(0) { m_str[0] = 0; } - pstr_t(const std::size_t alen) - { - init(alen); - } - void init(const std::size_t alen) - { - m_ref_count = 1; - m_len = alen; - m_str[0] = 0; - } - char *str() { return &m_str[0]; } - unsigned char *ustr() { return reinterpret_cast<unsigned char *>(&m_str[0]); } - std::size_t len() const { return m_len; } - int m_ref_count; - private: - std::size_t m_len; - char m_str[1]; - }; + init(alen); + } + void init(const std::size_t alen) + { + m_ref_count = 1; + m_len = alen; + m_str[0] = 0; + } + char *str() { return &m_str[0]; } + unsigned char *ustr() { return reinterpret_cast<unsigned char *>(&m_str[0]); } + std::size_t len() const { return m_len; } + int m_ref_count; +private: + std::size_t m_len; + char m_str[1]; +}; template <typename F> @@ -61,9 +61,9 @@ public: ~pstring_t(); // construction with copy - pstring_t(const mem_t *string) {init(); if (string != nullptr && *string != 0) pcopy(string); } - pstring_t(const pstring_t &string) {init(); pcopy(string); } - pstring_t(pstring_t &&string) : m_ptr(string.m_ptr) {string.m_ptr = nullptr; } + pstring_t(const mem_t *string) { init(); if (string != nullptr && *string != 0) pcopy(string); } + pstring_t(const pstring_t &string) { init(); pcopy(string); } + pstring_t(pstring_t &&string) : m_ptr(string.m_ptr) { string.m_ptr = nullptr; } // assignment operators pstring_t &operator=(const mem_t *string) { pcopy(string); return *this; } @@ -77,11 +77,11 @@ public: iterator(const iterator &rhs) noexcept = default; iterator(iterator &&rhs) noexcept { p = rhs.p; } iterator &operator=(const iterator &it) { p = it.p; return *this; } - iterator& operator++() noexcept {p += traits::codelen(p); return *this;} - iterator operator++(int) noexcept {iterator tmp(*this); operator++(); return tmp;} - bool operator==(const iterator& rhs) noexcept {return p==rhs.p;} - bool operator!=(const iterator& rhs) noexcept {return p!=rhs.p;} - const code_t operator*() noexcept {return traits::code(p);} + iterator& operator++() noexcept { p += traits::codelen(p); return *this; } + iterator operator++(int) noexcept { iterator tmp(*this); operator++(); return tmp; } + bool operator==(const iterator& rhs) noexcept { return p==rhs.p; } + bool operator!=(const iterator& rhs) noexcept { return p!=rhs.p; } + const code_t operator*() noexcept { return traits::code(p); } iterator& operator+=(size_type count) { while (count>0) { --count; ++(*this); } return *this; } friend iterator operator+(iterator lhs, const size_type &rhs) { return (lhs += rhs); } }; @@ -154,7 +154,7 @@ public: const pstring_t substr(const iterator start, const iterator end) const ; const pstring_t substr(const iterator start) const { return substr(start, end()); } - const pstring_t substr(size_type start) const { if (start>=len()) return pstring_t(""); else return substr(begin() + start, end()); } + const pstring_t substr(size_type start) const { return (start >= len()) ? pstring_t("") : substr(begin() + start, end()); } const pstring_t left(iterator leftof) const { return substr(begin(), leftof); } const pstring_t right(iterator pos) const { return substr(pos, end()); } @@ -175,7 +175,6 @@ public: static void resetmem(); protected: - pstr_t *m_ptr; private: @@ -209,6 +208,8 @@ private: static pstr_t m_zero; }; +template <typename F> pstr_t pstring_t<F>::m_zero(0); + struct pu8_traits { static const unsigned MAXCODELEN = 1; /* in memory units */ @@ -317,21 +318,10 @@ struct putf8_traits } }; -// FIXME: "using pstring = pstring_t<putf8_traits>" is not understood by eclipse - -struct pstring : public pstring_t<putf8_traits> -{ -public: +extern template struct pstring_t<pu8_traits>; +extern template struct pstring_t<putf8_traits>; - typedef pstring_t<putf8_traits> type_t; - - // simple construction/destruction - pstring() : type_t() { } - - // construction with copy - pstring(const mem_t *string) : type_t(string) { } - pstring(const type_t &string) : type_t(string) { } -}; +typedef pstring_t<putf8_traits> pstring; // ---------------------------------------------------------------------------------------- // pstringbuffer: a string buffer implementation diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index d53d5634114..7dc9b3685b7 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -328,6 +328,7 @@ Game on cart IC22# # of SOP56 IC3 ---------------------------------------------------------------------------------------------------------------------------------- Club Kart: European Session (2003, prototype) no cart * 21 (64Mb) present 315-6206 not present * instead of EPROM have tiny PCB with 2 flashroms on it Crackin' DJ part 2 840-0068C 23674 20 (64Mb) present 315-6206 317-0311-COM PCB have label 840-0068B-01 837-14124, requires regular 837-13551 and 837-13938 rotary JVS boards, and turntable simulation +Crazy Taxi 840-0002C ? 13 (64Mb) ? 315-6206 ? not dumped, likely same as regular 171-7919A cart Ferrari F355 Challenge (twin/deluxe, prototype) no cart 22848P* 21 (64Mb) present 315-6206 317-0267-COM * flash-PCB have CRC 330B A417, the rest is the same as regular cart, not dumped but known to exist /Ferrari F355 Challenge 2 - International \Course Edition (twin/deluxe, prototype) no cart 23399 21 (64Mb) present 315-6206 317-0287-COM content is the same as regular 171-7919A cart @@ -7923,7 +7924,7 @@ ROM_START( lupinsho ) DISK_IMAGE_READONLY( "gds-0018", 0, BAD_DUMP SHA1(0633a99a666f363ab30450a76b9753685d6b1f57) ) ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) - ROM_LOAD("317-0332-jpn.pic", 0x00, 0x4000, CRC(f71cb2fc) SHA1(281b3b3b03edf9a39e380976de528b7c9674de53) ) + ROM_LOAD("317-0325-jpn.pic", 0x00, 0x4000, CRC(f71cb2fc) SHA1(281b3b3b03edf9a39e380976de528b7c9674de53) ) ROM_END ROM_START( vathlete ) @@ -8087,13 +8088,12 @@ ROM_START( puyofev ) ROM_END /* - note: - both Dragon Treasure game binaries have only first 16MB encrypted using DES key from security PIC provided with GD-ROMs. - the rest of data encrypted using some other key, same in both game versions. - presumably this data uploaded via network to satellite units and decrypted using DES key from their own security PICs. + Dragon Treasure 2 and 3 game binaries have only first 16MB encrypted using key from main unit security PIC. + data starting from 0x1000000 uploaded via network to satellite units and later decrypted using keys from satellite security PICs. + Dragon Treasure 2 binary also contain DIMM firmware updater ver 3.13 at 0x19000000 */ -// requires 837-14381 "G2 EXPANSION BD" I/O board +// requires 837-14381 "G2 EXPANSION BD" I/O board, NetDIMM, IC Card reader (unknown model) and coin mechanics ROM_START( dragntr2 ) NAOMIGD_BIOS NAOMI_DEFAULT_EEPROM @@ -8102,11 +8102,15 @@ ROM_START( dragntr2 ) DISK_IMAGE_READONLY( "gds-0037a", 0, SHA1(ce65fe84cabaa1ac3f40bff9535a42c2055b5f1c) ) ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) - //PIC is missing - ROM_LOAD("317-xxxx-xxx.pic", 0x00, 0x4000, NO_DUMP ) + //PIC16C621A (317-0389-COM) + ROM_LOAD("317-0389-com.pic", 0x00, 0x4000, CRC(35c511f9) SHA1(13073d6076d8b771f52a9cf461ed335471762574) ) + + ROM_REGION( 0x4000, "satl_pic", ROMREGION_ERASEFF) + //PIC16C621A (317-0390-COM) + ROM_LOAD("317-0390-com.pic", 0x00, 0x4000, CRC(92183b60) SHA1(1345a35ee4a3a02acc060f69d4faec5b72b7894b) ) ROM_END -// requires 837-14381 "G2 EXPANSION BD" I/O board +// requires 837-14381 "G2 EXPANSION BD" I/O board, NetDIMM, IC Card reader (unknown model) and coin mechanics ROM_START( dragntr3 ) NAOMIGD_BIOS NAOMI_DEFAULT_EEPROM @@ -8117,7 +8121,11 @@ ROM_START( dragntr3 ) ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) //PIC16F628A // copy, original labels unknown - ROM_LOAD("317-xxxx-xxx.pic", 0x00, 0x4000, CRC(8df4d33a) SHA1(0d27ec46a64af60b1e46ad4b3d34b6df5448f81a) ) + ROM_LOAD("317-xxxx-com.pic", 0x00, 0x4000, CRC(8df4d33a) SHA1(0d27ec46a64af60b1e46ad4b3d34b6df5448f81a) ) + + ROM_REGION(0x4000, "satl_pic", ROMREGION_ERASEFF) + //PIC16C621A (317-0390-COM) + ROM_LOAD("317-0390-com.pic", 0x00, 0x4000, CRC(92183b60) SHA1(1345a35ee4a3a02acc060f69d4faec5b72b7894b) ) ROM_END ROM_START( ndcfboxa ) @@ -8881,8 +8889,8 @@ ROM_START( wccf116 ) DISK_IMAGE_READONLY( "cdp-10001c", 0, SHA1(efa6ef20f278c99efbf7c3630b1c8e2cad0a05c0) ) // CD-R ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) - //PIC is missing - ROM_LOAD("wccf1.pic", 0x00, 0x4000, NO_DUMP ) + //PIC16C621A (317-0329-JPN) + ROM_LOAD("317-0329-jpn.pic", 0x00, 0x4000, CRC(097f5f92) SHA1(ffe7df06007bd99908db15c300dd53bbd321bdb8) ) ROM_END ROM_START( wccf1dup ) @@ -8893,8 +8901,8 @@ ROM_START( wccf1dup ) DISK_IMAGE_READONLY( "cdp-10003", 0, SHA1(13064b6e03527f1222b6bd01c0ba9a063d7be949) ) ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) - //PIC is missing, same as CDP-10001C - ROM_LOAD("wccf1.pic", 0x00, 0x4000, NO_DUMP ) + //PIC16C621A (317-0329-JPN) + ROM_LOAD("317-0329-jpn.pic", 0x00, 0x4000, CRC(097f5f92) SHA1(ffe7df06007bd99908db15c300dd53bbd321bdb8) ) ROM_END ROM_START( wccf212e ) |