2016-01-07 17:14:33 +09:00
|
|
|
#pragma once
|
2010-08-09 22:28:56 +09: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;
|
2022-12-19 06:26:40 +09:00
|
|
|
typedef int64_t ssize_t;
|
2010-08-09 22:28:56 +09:00
|
|
|
#else
|
|
|
|
typedef int32_t intptr_t;
|
2022-12-19 06:26:40 +09:00
|
|
|
typedef int32_t ssize_t;
|
2010-08-09 22:28:56 +09:00
|
|
|
#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
|
|
|
|
|
2015-05-16 16:37:13 +09:00
|
|
|
#if defined(__SIZEOF_INT128__)
|
2021-01-15 06:00:00 +09:00
|
|
|
using int128_t = signed __int128;
|
2015-05-16 16:37:13 +09:00
|
|
|
using uint128_t = unsigned __int128;
|
|
|
|
#endif
|
|
|
|
|
2021-09-21 23:33:34 +09:00
|
|
|
using intmax = intmax_t;
|
|
|
|
using uintmax = uintmax_t;
|
|
|
|
|
2021-01-15 06:00:00 +09:00
|
|
|
using intptr = intptr_t;
|
2016-08-08 19:04:15 +09:00
|
|
|
using uintptr = uintptr_t;
|
|
|
|
|
2015-12-07 06:11:41 +09: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 20:50:32 +09:00
|
|
|
//note: long double size is not reliable across platforms
|
|
|
|
//using float80_t = long double;
|
2010-08-09 22:28:56 +09:00
|
|
|
|
2021-01-15 06:00:00 +09:00
|
|
|
static_assert(sizeof( int8_t) == 1, "int8_t is not of the correct size" );
|
2013-05-02 20:25:45 +09:00
|
|
|
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");
|
|
|
|
|
2021-01-15 06:00:00 +09:00
|
|
|
static_assert(sizeof( uint8_t) == 1, "int8_t is not of the correct size" );
|
2013-05-02 20:25:45 +09:00
|
|
|
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");
|
|
|
|
|
2016-10-28 06:16:58 +09: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 20:50:32 +09:00
|
|
|
//static_assert(sizeof(long double) >= 10, "float80_t is not of the correct size");
|
2015-11-16 17:38:05 +09:00
|
|
|
|
2021-01-15 06:00:00 +09:00
|
|
|
using sint = signed int;
|
2016-02-16 18:27:55 +09:00
|
|
|
using uint = unsigned int;
|
2020-04-29 04:20:00 +09:00
|
|
|
using real32_t = float;
|
|
|
|
using real64_t = double;
|
2021-01-15 06:00:00 +09:00
|
|
|
|
|
|
|
//shorthand
|
|
|
|
using s8 = int8_t;
|
|
|
|
using s08 = int8_t;
|
|
|
|
using s16 = int16_t;
|
|
|
|
using s32 = int32_t;
|
|
|
|
using s64 = int64_t;
|
|
|
|
|
|
|
|
using u8 = uint8_t;
|
|
|
|
using u08 = uint8_t;
|
|
|
|
using u16 = uint16_t;
|
|
|
|
using u32 = uint32_t;
|
|
|
|
using u64 = uint64_t;
|
|
|
|
|
|
|
|
using f32 = float32_t;
|
|
|
|
using f64 = float64_t;
|
|
|
|
|
|
|
|
#if defined(__SIZEOF_INT128__)
|
|
|
|
using s128 = int128_t;
|
|
|
|
using u128 = uint128_t;
|
2023-03-12 18:02:40 +09:00
|
|
|
#else
|
|
|
|
//arithmetic.hpp
|
|
|
|
namespace nall { struct u128; }
|
2021-01-15 06:00:00 +09:00
|
|
|
#endif
|