2016-01-07 08:14:33 +00:00
|
|
|
#pragma once
|
2010-08-09 13:28:56 +00:00
|
|
|
|
|
|
|
#if defined(_MSC_VER)
|
|
|
|
typedef signed char int8_t;
|
|
|
|
typedef signed short int16_t;
|
|
|
|
typedef signed int int32_t;
|
|
|
|
typedef signed long long int64_t;
|
|
|
|
typedef int64_t intmax_t;
|
|
|
|
#if defined(_WIN64)
|
|
|
|
typedef int64_t intptr_t;
|
|
|
|
#else
|
|
|
|
typedef int32_t intptr_t;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef unsigned char uint8_t;
|
|
|
|
typedef unsigned short uint16_t;
|
|
|
|
typedef unsigned int uint32_t;
|
|
|
|
typedef unsigned long long uint64_t;
|
|
|
|
typedef uint64_t uintmax_t;
|
|
|
|
#if defined(_WIN64)
|
|
|
|
typedef uint64_t uintptr_t;
|
|
|
|
#else
|
|
|
|
typedef uint32_t uintptr_t;
|
|
|
|
#endif
|
|
|
|
#else
|
|
|
|
#include <stdint.h>
|
|
|
|
#endif
|
|
|
|
|
2016-08-08 10:04:15 +00:00
|
|
|
//note: (u)intmax actually mean it: use as many bits as is possible
|
2015-05-16 07:37:13 +00:00
|
|
|
#if defined(__SIZEOF_INT128__)
|
|
|
|
using int128_t = signed __int128;
|
|
|
|
using uint128_t = unsigned __int128;
|
2016-08-08 10:04:15 +00:00
|
|
|
|
2016-08-09 11:07:18 +00:00
|
|
|
#define INTMAX_BITS 128
|
2016-08-08 10:04:15 +00:00
|
|
|
using intmax = int128_t;
|
|
|
|
using uintmax = uint128_t;
|
|
|
|
#else
|
2016-08-09 11:07:18 +00:00
|
|
|
#define INTMAX_BITS 64
|
2016-08-08 10:04:15 +00:00
|
|
|
using intmax = intmax_t;
|
|
|
|
using uintmax = uintmax_t;
|
2015-05-16 07:37:13 +00:00
|
|
|
#endif
|
|
|
|
|
2016-08-08 10:04:15 +00:00
|
|
|
using intptr = intptr_t;
|
|
|
|
using uintptr = uintptr_t;
|
|
|
|
|
2015-12-06 21:11:41 +00:00
|
|
|
using float32_t = float;
|
|
|
|
using float64_t = double;
|
Update to v099r14 release.
byuu says:
Changelog:
- (u)int(max,ptr) abbreviations removed; use _t suffix now [didn't feel
like they were contributing enough to be worth it]
- cleaned up nall::integer,natural,real functionality
- toInteger, toNatural, toReal for parsing strings to numbers
- fromInteger, fromNatural, fromReal for creating strings from numbers
- (string,Markup::Node,SQL-based-classes)::(integer,natural,real)
left unchanged
- template<typename T> numeral(T value, long padding, char padchar)
-> string for print() formatting
- deduces integer,natural,real based on T ... cast the value if you
want to override
- there still exists binary,octal,hex,pointer for explicit print()
formatting
- lstring -> string_vector [but using lstring = string_vector; is
declared]
- would be nice to remove the using lstring eventually ... but that'd
probably require 10,000 lines of changes >_>
- format -> string_format [no using here; format was too ambiguous]
- using integer = Integer<sizeof(int)*8>; and using natural =
Natural<sizeof(uint)*8>; declared
- for consistency with boolean. These three are meant for creating
zero-initialized values implicitly (various uses)
- R65816::io() -> idle() and SPC700::io() -> idle() [more clear; frees
up struct IO {} io; naming]
- SFC CPU, PPU, SMP use struct IO {} io; over struct (Status,Registers) {}
(status,registers); now
- still some CPU::Status status values ... they didn't really fit into
IO functionality ... will have to think about this more
- SFC CPU, PPU, SMP now use step() exclusively instead of addClocks()
calling into step()
- SFC CPU joypad1_bits, joypad2_bits were unused; killed them
- SFC PPU CGRAM moved into PPU::Screen; since nothing else uses it
- SFC PPU OAM moved into PPU::Object; since nothing else uses it
- the raw uint8[544] array is gone. OAM::read() constructs values from
the OAM::Object[512] table now
- this avoids having to determine how we want to sub-divide the two
OAM memory sections
- this also eliminates the OAM::synchronize() functionality
- probably more I'm forgetting
The FPS fluctuations are driving me insane. This WIP went from 128fps to
137fps. Settled on 133.5fps for the final build. But nothing I changed
should have affected performance at all. This level of fluctuation makes
it damn near impossible to know whether I'm speeding things up or slowing
things down with changes.
2016-07-01 11:50:32 +00:00
|
|
|
//note: long double size is not reliable across platforms
|
|
|
|
//using float80_t = long double;
|
2010-08-09 13:28:56 +00:00
|
|
|
|
2013-05-02 11:25:45 +00:00
|
|
|
static_assert(sizeof(int8_t) == 1, "int8_t is not of the correct size" );
|
|
|
|
static_assert(sizeof(int16_t) == 2, "int16_t is not of the correct size");
|
|
|
|
static_assert(sizeof(int32_t) == 4, "int32_t is not of the correct size");
|
|
|
|
static_assert(sizeof(int64_t) == 8, "int64_t is not of the correct size");
|
|
|
|
|
|
|
|
static_assert(sizeof(uint8_t) == 1, "int8_t is not of the correct size" );
|
|
|
|
static_assert(sizeof(uint16_t) == 2, "int16_t is not of the correct size");
|
|
|
|
static_assert(sizeof(uint32_t) == 4, "int32_t is not of the correct size");
|
|
|
|
static_assert(sizeof(uint64_t) == 8, "int64_t is not of the correct size");
|
|
|
|
|
2015-12-06 21:11:41 +00:00
|
|
|
static_assert(sizeof(float) >= 4, "float32_t is not of the correct size");
|
|
|
|
static_assert(sizeof(double) >= 8, "float64_t is not of the correct size");
|
Update to v099r14 release.
byuu says:
Changelog:
- (u)int(max,ptr) abbreviations removed; use _t suffix now [didn't feel
like they were contributing enough to be worth it]
- cleaned up nall::integer,natural,real functionality
- toInteger, toNatural, toReal for parsing strings to numbers
- fromInteger, fromNatural, fromReal for creating strings from numbers
- (string,Markup::Node,SQL-based-classes)::(integer,natural,real)
left unchanged
- template<typename T> numeral(T value, long padding, char padchar)
-> string for print() formatting
- deduces integer,natural,real based on T ... cast the value if you
want to override
- there still exists binary,octal,hex,pointer for explicit print()
formatting
- lstring -> string_vector [but using lstring = string_vector; is
declared]
- would be nice to remove the using lstring eventually ... but that'd
probably require 10,000 lines of changes >_>
- format -> string_format [no using here; format was too ambiguous]
- using integer = Integer<sizeof(int)*8>; and using natural =
Natural<sizeof(uint)*8>; declared
- for consistency with boolean. These three are meant for creating
zero-initialized values implicitly (various uses)
- R65816::io() -> idle() and SPC700::io() -> idle() [more clear; frees
up struct IO {} io; naming]
- SFC CPU, PPU, SMP use struct IO {} io; over struct (Status,Registers) {}
(status,registers); now
- still some CPU::Status status values ... they didn't really fit into
IO functionality ... will have to think about this more
- SFC CPU, PPU, SMP now use step() exclusively instead of addClocks()
calling into step()
- SFC CPU joypad1_bits, joypad2_bits were unused; killed them
- SFC PPU CGRAM moved into PPU::Screen; since nothing else uses it
- SFC PPU OAM moved into PPU::Object; since nothing else uses it
- the raw uint8[544] array is gone. OAM::read() constructs values from
the OAM::Object[512] table now
- this avoids having to determine how we want to sub-divide the two
OAM memory sections
- this also eliminates the OAM::synchronize() functionality
- probably more I'm forgetting
The FPS fluctuations are driving me insane. This WIP went from 128fps to
137fps. Settled on 133.5fps for the final build. But nothing I changed
should have affected performance at all. This level of fluctuation makes
it damn near impossible to know whether I'm speeding things up or slowing
things down with changes.
2016-07-01 11:50:32 +00:00
|
|
|
//static_assert(sizeof(long double) >= 10, "float80_t is not of the correct size");
|
2015-11-16 08:38:05 +00:00
|
|
|
|
2016-02-16 09:27:55 +00:00
|
|
|
using uint = unsigned int;
|