mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-01-19 20:24:59 -03:00
Merge pull request #14289 from Sintendo/typos
Fix various typos and spelling mistakes
This commit is contained in:
@@ -844,7 +844,7 @@ void GekkoIRPlugin::EvalTerminalAbs(Terminal type, const AssemblerToken& tok)
|
||||
|
||||
case Terminal::NumLabFwd:
|
||||
m_owner->EmitErrorHere(
|
||||
fmt::format("Forward label references not supported in fully resolved expressons"));
|
||||
fmt::format("Forward label references not supported in fully resolved expressions"));
|
||||
break;
|
||||
|
||||
case Terminal::NumLabBwd:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
// UniqueBuffer<T> and SharedBuffer<T> are a lighter alternative to std::vector<T>.
|
||||
// The main benefit is that elements are not value-initialized like in vector.
|
||||
// That can be quite a bit of unecessary overhead when allocating a large buffer.
|
||||
// That can be quite a bit of unnecessary overhead when allocating a large buffer.
|
||||
|
||||
namespace Common
|
||||
{
|
||||
|
||||
@@ -314,7 +314,7 @@ bool CaseInsensitiveContains(std::string_view haystack, std::string_view needle)
|
||||
// 'std::less'-like comparison function object type for case-insensitive strings.
|
||||
struct CaseInsensitiveLess
|
||||
{
|
||||
using is_transparent = void; // Allow heterogenous lookup.
|
||||
using is_transparent = void; // Allow heterogeneous lookup.
|
||||
bool operator()(std::string_view a, std::string_view b) const;
|
||||
};
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
explicit DSPAssembler(const AssemblerSettings& settings);
|
||||
~DSPAssembler();
|
||||
|
||||
// line_numbers is optional (and not yet implemented). It'll receieve a list of ints,
|
||||
// line_numbers is optional (and not yet implemented). It'll receive a list of ints,
|
||||
// one for each word of code, indicating the source assembler code line number it came from.
|
||||
|
||||
// If returns false, call GetErrorString to get some text to present to the user.
|
||||
|
||||
@@ -108,7 +108,7 @@ std::string DSPDisassembler::DisassembleParameters(const DSPOPCTemplate& opc, u1
|
||||
if (opc.params[j].mask == 0x003f)
|
||||
{
|
||||
// Left and right shifts function essentially as a single shift by a 7-bit signed value,
|
||||
// but are split into two intructions for clarity.
|
||||
// but are split into two instructions for clarity.
|
||||
buf += fmt::format("#{}", (val & 0x20) != 0 ? (int(val) - 64) : int(val));
|
||||
}
|
||||
else
|
||||
|
||||
@@ -16,7 +16,7 @@ using namespace Gen;
|
||||
|
||||
namespace DSP::JIT::x64
|
||||
{
|
||||
// Ordered in order of prefered use.
|
||||
// Ordered in order of preferred use.
|
||||
// Not all of these are actually available
|
||||
constexpr std::array<X64Reg, 15> s_allocation_order = {
|
||||
{R8, R9, R10, R11, R12, R13, R14, R15, RSI, RDI, RBX, RCX, RDX, RAX, RBP}};
|
||||
|
||||
@@ -98,7 +98,7 @@ struct BranchWatchSelectionValueType
|
||||
BranchWatchCollection::value_type* collection_ptr;
|
||||
bool is_virtual;
|
||||
bool condition;
|
||||
// This is moreso a GUI thing, but it works best in the Core code for multiple reasons.
|
||||
// This is more so a GUI thing, but it works best in the Core code for multiple reasons.
|
||||
Inspection inspection;
|
||||
};
|
||||
|
||||
|
||||
@@ -263,7 +263,7 @@ HitType CodeTrace::TraceLogic(const TraceOutput& current_instr, bool first_hit)
|
||||
if (!match_reg0 && !match_reg123 && !mem_hit)
|
||||
return HitType::SKIP;
|
||||
|
||||
// Checks if the intstruction is a type that needs special handling.
|
||||
// Checks if the instruction is a type that needs special handling.
|
||||
const auto CompareInstruction = [](std::string_view instruction, const auto& type_compare) {
|
||||
return std::ranges::any_of(
|
||||
type_compare, [&instruction](std::string_view s) { return instruction.starts_with(s); });
|
||||
|
||||
@@ -42,7 +42,7 @@ struct FileHeader
|
||||
u32 flags;
|
||||
u64 texMemOffset;
|
||||
u32 texMemSize;
|
||||
// These are for overriden RAM sizes. Otherwise the FIFO Player
|
||||
// These are for overridden RAM sizes. Otherwise the FIFO Player
|
||||
// will crash and burn with mismatched settings. See PR #8722.
|
||||
u32 mem1_size;
|
||||
u32 mem2_size;
|
||||
@@ -136,7 +136,7 @@ bool FifoDataFile::Save(const std::string& filename)
|
||||
FileHeader header;
|
||||
header.fileId = FILE_ID;
|
||||
header.file_version = VERSION_NUMBER;
|
||||
// Maintain backwards compatability so long as the RAM sizes aren't overridden.
|
||||
// Maintain backwards compatibility so long as the RAM sizes aren't overridden.
|
||||
if (Config::Get(Config::MAIN_RAM_OVERRIDE_ENABLE))
|
||||
header.min_loader_version = MIN_LOADER_VERSION_FOR_RAM_OVERRIDE;
|
||||
else
|
||||
|
||||
@@ -315,7 +315,7 @@ void FifoPlayer::SetFileLoadedCallback(CallbackFunc callback)
|
||||
{
|
||||
m_FileLoadedCb = std::move(callback);
|
||||
|
||||
// Trigger the callback immediatly if the file is already loaded.
|
||||
// Trigger the callback immediately if the file is already loaded.
|
||||
if (GetFile() != nullptr)
|
||||
{
|
||||
m_FileLoadedCb();
|
||||
|
||||
@@ -103,7 +103,7 @@ void PatchFixedFunctions(Core::System& system)
|
||||
// Not part of the binary itself, but either we or Gecko OS might insert
|
||||
// this, and it doesn't clear the icache properly.
|
||||
Patch(system, Gecko::ENTRY_POINT, "GeckoCodehandler");
|
||||
// This has to always be installed even if cheats are not enabled because of the possiblity of
|
||||
// This has to always be installed even if cheats are not enabled because of the possibility of
|
||||
// loading a savestate where PC is inside the code handler while cheats are disabled.
|
||||
Patch(system, Gecko::HLE_TRAMPOLINE_ADDRESS, "GeckoHandlerReturnTrampoline");
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ struct Accessors
|
||||
virtual u8 ReadU8(const Core::CPUThreadGuard& guard, u32 address) const = 0;
|
||||
virtual void WriteU8(const Core::CPUThreadGuard& guard, u32 address, u8 value) = 0;
|
||||
|
||||
// overrideable naive implementations of below are defined
|
||||
// overridable naive implementations of below are defined
|
||||
virtual u16 ReadU16(const Core::CPUThreadGuard& guard, u32 address) const;
|
||||
virtual void WriteU16(const Core::CPUThreadGuard& guard, u32 address, u16 value);
|
||||
virtual u32 ReadU32(const Core::CPUThreadGuard& guard, u32 address) const;
|
||||
|
||||
@@ -31,7 +31,7 @@ constexpr u32 MAIL_INPUT_NEXT_SAMPLES = 0x0222;
|
||||
// "send the samples for the internal buffer to the external buffer"
|
||||
constexpr u32 MAIN_SEND_SAMPLES = 0x0666;
|
||||
// "special: to dump the IROM Datas (remember disable others functions from the interrupt vector to
|
||||
// use) (CMBH+0x8000) countain the address of IROM" (not used)
|
||||
// use) (CMBH+0x8000) contains the address of IROM" (not used)
|
||||
constexpr u32 MAIL_ROM_DUMP_WORD = 0x0777;
|
||||
// "Used for test" (not used)
|
||||
constexpr u32 MAIL_TEST = 0x0888;
|
||||
|
||||
@@ -103,7 +103,7 @@ private:
|
||||
u32 flags;
|
||||
// internal addr counter
|
||||
u32 start_addr;
|
||||
// end voice physical pointer (bytes without alignament, but remember it reads in blocks of 32
|
||||
// end voice physical pointer (bytes without alignment, but remember it reads in blocks of 32
|
||||
// bytes (use padding to the end))
|
||||
u32 end_addr;
|
||||
// freq operation
|
||||
@@ -116,7 +116,7 @@ private:
|
||||
u16 volume_l, volume_r;
|
||||
// initial voice2 physical pointer (bytes aligned 32 bytes) (to do a ring)
|
||||
u32 start_addr2;
|
||||
// end voice2 physical pointer (bytes without alignament, but remember it reads in blocks of 32
|
||||
// end voice2 physical pointer (bytes without alignment, but remember it reads in blocks of 32
|
||||
// bytes (use padding to the end))
|
||||
u32 end_addr2;
|
||||
// volume (from 0 to 256) for voice 2
|
||||
|
||||
@@ -95,7 +95,7 @@ void GBAUCode::HandleMail(u32 mail)
|
||||
{
|
||||
PrepareBootUCode(mail);
|
||||
// The GBA ucode ignores the first 3 mails (mram_dest_addr, mram_size, mram_dram_addr)
|
||||
// but we currently don't handle that (they're read when they shoudln't be, but DSP HLE doesn't
|
||||
// but we currently don't handle that (they're read when they shouldn't be, but DSP HLE doesn't
|
||||
// implement them so it's fine).
|
||||
return;
|
||||
}
|
||||
@@ -106,7 +106,7 @@ void GBAUCode::HandleMail(u32 mail)
|
||||
{
|
||||
if (mail == REQUEST_MAIL)
|
||||
{
|
||||
INFO_LOG_FMT(DSPHLE, "GBAUCode - Recieved request mail");
|
||||
INFO_LOG_FMT(DSPHLE, "GBAUCode - Received request mail");
|
||||
m_mail_state = MailState::WaitingForAddress;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -52,7 +52,7 @@ constexpr double LONG_SEEK_VELOCITY_INVERSE = 4.5; // inverse: s/m
|
||||
// In practice this yields good-enough numbers as a more exact formula
|
||||
// involving the integral over a polar equation (too complex to describe here)
|
||||
// or the approximation of a DVD as a set of concentric circles (which is a
|
||||
// better approximation, but makes futher derivations more complicated than
|
||||
// better approximation, but makes further derivations more complicated than
|
||||
// they need to be).
|
||||
//
|
||||
// From the area approximation, we end up with this formula:
|
||||
|
||||
@@ -113,7 +113,7 @@ bool CEXIETHERNET::XLinkNetworkInterface::SendFrame(const u8* frame, u32 size)
|
||||
m_bba_failure_notified = true;
|
||||
}
|
||||
|
||||
// Return true because this isnt an error dolphin needs to handle
|
||||
// Return true because this isn't an error dolphin needs to handle
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ void CEXIETHERNET::XLinkNetworkInterface::ReadThreadHandler(
|
||||
ERROR_LOG_FMT(SP1, "Failed to read from BBA, err={}", bytes_read);
|
||||
}
|
||||
|
||||
// Make sure *anything* was recieved before going any further
|
||||
// Make sure *anything* was received before going any further
|
||||
if (bytes_read < 1)
|
||||
continue;
|
||||
|
||||
@@ -193,7 +193,7 @@ void CEXIETHERNET::XLinkNetworkInterface::ReadThreadHandler(
|
||||
}
|
||||
}
|
||||
}
|
||||
// Otherwise we recieved control data or junk
|
||||
// Otherwise we received control data or junk
|
||||
else
|
||||
{
|
||||
const std::string control_msg(self->m_in_frame, self->m_in_frame + bytes_read);
|
||||
|
||||
@@ -165,10 +165,10 @@ std::pair<GCMemcardErrorCode, std::optional<GCMemcard>> GCMemcard::Open(std::str
|
||||
//
|
||||
// This rule only applies for errors within a single block! That is, invalid checksums for both
|
||||
// types, and free block mismatch for the BATs. Once two valid blocks have been selected but it
|
||||
// later turns out they do not match eachother (eg. claimed block count of a file in the directory
|
||||
// does not match the actual block count arrived at by following BAT), the card will be treated as
|
||||
// corrupted, even if perhaps a different combination of the two blocks would result in a valid
|
||||
// memory card.
|
||||
// later turns out they do not match each other (eg. claimed block count of a file in the
|
||||
// directory does not match the actual block count arrived at by following BAT), the card will be
|
||||
// treated as corrupted, even if perhaps a different combination of the two blocks would result in
|
||||
// a valid memory card.
|
||||
|
||||
// can return invalid checksum, data in unused area
|
||||
GCMemcardErrorCode dir_block_0_error_code = card.m_directory_blocks[0].CheckForErrors();
|
||||
@@ -821,7 +821,7 @@ GCMemcardRemoveFileRetVal GCMemcard::RemoveFile(u8 index) // index in the direc
|
||||
|
||||
// TODO: Deleting a file via the GC BIOS sometimes leaves behind an extra updated directory block
|
||||
// here that has an empty file with the filename "Broken File000" where the actual deleted file
|
||||
// was. Determine when exactly this happens and if this is neccessary for anything.
|
||||
// was. Determine when exactly this happens and if this is necessary for anything.
|
||||
|
||||
memset(reinterpret_cast<u8*>(&UpdatedDir.m_dir_entries[index]), 0xFF, DENTRY_SIZE);
|
||||
UpdatedDir.m_update_counter = UpdatedDir.m_update_counter + 1;
|
||||
|
||||
@@ -177,7 +177,7 @@ struct HeaderData
|
||||
// 4 bytes at 0x001c: VI DTV status register value (u16 from 0xCC00206E)
|
||||
u32 m_dtv_status;
|
||||
|
||||
// 2 bytes at 0x0020: 0 if formated in slot A, 1 if formated in slot B
|
||||
// 2 bytes at 0x0020: 0 if formatted in slot A, 1 if formatted in slot B
|
||||
Common::BigEndianValue<u16> m_device_id;
|
||||
|
||||
// 2 bytes at 0x0022: Size of memcard in Mbits
|
||||
|
||||
@@ -575,7 +575,7 @@ s32 GCMemcardDirectory::DirectoryWrite(u32 dest_address, u32 length, const u8* s
|
||||
// first 58 bytes should always be 0xff
|
||||
// needed to update the update ctr, checksums
|
||||
// could check for writes to the 6 important bytes but doubtful that it improves performance
|
||||
// noticably
|
||||
// noticeably
|
||||
memcpy((u8*)(dest) + offset, src_address, length);
|
||||
SyncSaves();
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ ReadHandlingMethod<T>* ReadToLarger(Mapping* mmio, u32 larger_addr, u32 shift)
|
||||
});
|
||||
}
|
||||
|
||||
// Inplementation of the ReadHandler and WriteHandler class. There is a lot of
|
||||
// Implementation of the ReadHandler and WriteHandler class. There is a lot of
|
||||
// redundant code between these two classes but trying to abstract it away
|
||||
// brings more trouble than it fixes.
|
||||
template <typename T>
|
||||
|
||||
@@ -169,7 +169,7 @@ private:
|
||||
// MMIO block ID.
|
||||
//
|
||||
// Each array contains NUM_MMIOS / sizeof (AccessType) because larger
|
||||
// access types mean less possible adresses (assuming aligned only
|
||||
// access types mean less possible addresses (assuming aligned only
|
||||
// accesses).
|
||||
template <typename Unit>
|
||||
struct HandlerArray
|
||||
|
||||
@@ -99,7 +99,7 @@ int CSIDevice_GCController::RunBuffer(u8* buffer, int request_length)
|
||||
}
|
||||
|
||||
// GameID packet, no response needed, nothing to do
|
||||
// On real hardware, this is used to configure the BlueRetro controler
|
||||
// On real hardware, this is used to configure the BlueRetro controller
|
||||
// adapter, while licensed accessories ignore this command.
|
||||
case EBufferCommands::CMD_SET_GAME_ID:
|
||||
{
|
||||
|
||||
@@ -77,7 +77,7 @@ DataResponse CSIDevice_GCSteeringWheel::GetData(u32& hi, u32& low)
|
||||
GCPadStatus::MAIN_STICK_CENTER_Y - pad_status.stickY);
|
||||
|
||||
// We must double these values because we are mapping half of a stick range to a 0..255 value.
|
||||
// We're only getting half the precison we could potentially have,
|
||||
// We're only getting half the precision we could potentially have,
|
||||
// but we'll have to redesign our GameCube controller input to fix that.
|
||||
|
||||
// All 8 bits (Accelerate)
|
||||
|
||||
@@ -36,7 +36,7 @@ private:
|
||||
|
||||
KeyArray MapKeys(const KeyboardStatus& key_status) const;
|
||||
|
||||
// Internal counter synchonizing GC and keyboard
|
||||
// Internal counter synchronizing GC and keyboard
|
||||
u8 m_counter = 0;
|
||||
};
|
||||
} // namespace SerialInterface
|
||||
|
||||
@@ -491,7 +491,7 @@ float VideoInterfaceManager::GetAspectRatio() const
|
||||
// but it's only 4:3 if the picture fill the entire active area.
|
||||
// All games configure VideoInterface to add padding in both the horizontal and vertical
|
||||
// directions and most games also do a slight horizontal scale.
|
||||
// This means that XFB never fills the entire active area and is therefor almost never 4:3
|
||||
// This means that XFB never fills the entire active area and is therefore almost never 4:3
|
||||
|
||||
// To work out the correct aspect ratio of the XFB, we need to know how VideoInterface's
|
||||
// currently configured active area compares to the active area of a stock PAL or NTSC
|
||||
@@ -980,7 +980,7 @@ void VideoInterfaceManager::Update(u64 ticks)
|
||||
m_ticks_last_line_start = ticks;
|
||||
}
|
||||
|
||||
// TODO: Findout why skipping interrupts acts as a frameskip
|
||||
// TODO: Find out why skipping interrupts acts as a frameskip
|
||||
if (core_timing.GetVISkip())
|
||||
return;
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ union UVIFBInfoRegister
|
||||
// POFF only seems to exist in the top reg. XOFF, unknown.
|
||||
u32 XOFF : 4; // Horizontal Offset of the left-most pixel within the first word of the fetched
|
||||
// picture
|
||||
u32 POFF : 1; // Page offest: 1: fb address is (address>>5)
|
||||
u32 POFF : 1; // Page offset: 1: fb address is (address>>5)
|
||||
u32 CLRPOFF : 3; // ? setting bit 31 clears POFF
|
||||
};
|
||||
};
|
||||
|
||||
@@ -67,7 +67,7 @@ Common::Quaternion ComplementaryFilter(const Common::Quaternion& gyroscope,
|
||||
|
||||
const auto cos_angle = normalized_accel.Dot(gyro_vec);
|
||||
|
||||
// If gyro to accel angle difference is betwen 0 and 180 degrees we make an adjustment.
|
||||
// If gyro to accel angle difference is between 0 and 180 degrees we make an adjustment.
|
||||
const auto abs_cos_angle = std::abs(cos_angle);
|
||||
if (abs_cos_angle > 0 && abs_cos_angle < 1)
|
||||
{
|
||||
|
||||
@@ -305,7 +305,7 @@ void Wiimote::HandleWriteData(const OutputReportWriteData& wd)
|
||||
auto const bytes_written = m_i2c_bus.BusWrite(wd.slave_address, (u8)address, wd.size, wd.data);
|
||||
if (bytes_written != wd.size)
|
||||
{
|
||||
// A real wiimote gives error 7 for failed write to i2c bus (mainly a non-existant slave)
|
||||
// A real wiimote gives error 7 for failed write to i2c bus (mainly a non-existent slave)
|
||||
error_code = ErrorCode::Nack;
|
||||
}
|
||||
}
|
||||
@@ -463,7 +463,7 @@ bool Wiimote::ProcessReadDataRequest()
|
||||
// error code 8
|
||||
|
||||
// The real Wiimote generate an error for the first
|
||||
// request to 0x1770 if we dont't replicate that the game will never
|
||||
// request to 0x1770 if we don't replicate that the game will never
|
||||
// read the calibration data at the beginning of Eeprom.
|
||||
error_code = ErrorCode::InvalidAddress;
|
||||
}
|
||||
|
||||
@@ -499,7 +499,7 @@ EncryptionKey KeyGen::GenerateFromExtensionKeyData(const ExtKeyData& ext_key) co
|
||||
}
|
||||
|
||||
// Retail games never hit this path but some homebrew fills encryption key with 0x00.
|
||||
// Real extensions seem to then use entirely differnet "sboxes" for table generation.
|
||||
// Real extensions seem to then use entirely different "sboxes" for table generation.
|
||||
WARN_LOG_FMT(WIIMOTE, "Extension key gen did not match any idx. Generating fallback tables.");
|
||||
return GenerateFallbackTables(rand, key);
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ void Drums::Update(const DesiredExtensionState& target_state)
|
||||
|
||||
velocity = desired_state.softness;
|
||||
|
||||
// A drum-pad hit causes the relevent bit to be triggered for the next 10 frames.
|
||||
// A drum-pad hit causes the relevant bit to be triggered for the next 10 frames.
|
||||
constexpr u8 HIT_FRAME_COUNT = 10;
|
||||
|
||||
m_pad_remaining_frames[i] = HIT_FRAME_COUNT;
|
||||
@@ -178,7 +178,7 @@ void Drums::Update(const DesiredExtensionState& target_state)
|
||||
drum_data.velocity4 = velocity >> 4;
|
||||
|
||||
// Figure out which drum-pad bits to send.
|
||||
// Note: Relevent bits are not set until after velocity data has been sent.
|
||||
// Note: Relevant bits are not set until after velocity data has been sent.
|
||||
// My drums never exposed simultaneous hits. One pad bit was always sent before the other.
|
||||
for (std::size_t i = 0; i != drum_pad_bitmasks.size(); ++i)
|
||||
{
|
||||
|
||||
@@ -31,7 +31,7 @@ enum ExtensionNumber : u8
|
||||
class ExtensionPort
|
||||
{
|
||||
public:
|
||||
// The real wiimote reads extension data from i2c slave 0x52 addres 0x00:
|
||||
// The real wiimote reads extension data from i2c slave 0x52 address 0x00:
|
||||
static constexpr u8 REPORT_I2C_SLAVE = 0x52;
|
||||
static constexpr u8 REPORT_I2C_ADDR = 0x00;
|
||||
|
||||
|
||||
@@ -629,7 +629,7 @@ static std::vector<WiimoteScannerWindows::EnumeratedWiimoteInterface> GetAllWiim
|
||||
|
||||
const auto parent_inst = GetInst(hid_iface).and_then(GetParentInst);
|
||||
|
||||
// This provies a proper name like "Nintendo RVL-CNT-01" or "Nintendo RVL-WBC-01".
|
||||
// This provides a proper name like "Nintendo RVL-CNT-01" or "Nintendo RVL-WBC-01".
|
||||
const auto bluetooth_name = parent_inst.and_then(GetBluetoothName);
|
||||
DEBUG_LOG_FMT(WIIMOTE, " BluetoothName: {}", bluetooth_name.value_or("<error>"));
|
||||
|
||||
|
||||
@@ -182,7 +182,8 @@ int WiimoteHidapi::IORead(u8* buf)
|
||||
{
|
||||
int timeout = 200; // ms
|
||||
int result = hid_read_timeout(m_handle, buf + 1, MAX_PAYLOAD - 1, timeout);
|
||||
// TODO: If and once we use hidapi across plaforms, change our internal API to clean up this mess.
|
||||
// TODO: If and once we use hidapi across platforms, change our internal API to clean up this
|
||||
// mess.
|
||||
if (result == -1)
|
||||
{
|
||||
ERROR_LOG_FMT(WIIMOTE, "Failed to read from {}.", m_device_path);
|
||||
|
||||
@@ -388,7 +388,7 @@ static std::optional<DefaultInterface> GetSystemDefaultInterface()
|
||||
const u32 prefix_length = GetNetworkPrefixLength();
|
||||
const u32 netmask = (1 << prefix_length) - 1;
|
||||
const u32 gateway = GetNetworkGateway();
|
||||
// this isnt fully correct, but this will make calls to get the routing table at least return the
|
||||
// this isn't fully correct, but this will make calls to get the routing table at least return the
|
||||
// gateway
|
||||
if (routing_table.empty())
|
||||
routing_table = {{0, 0, 0, gateway}};
|
||||
@@ -433,7 +433,7 @@ static std::optional<DefaultInterface> GetSystemDefaultInterface()
|
||||
if (iface->ifa_addr && iface->ifa_addr->sa_family == AF_INET &&
|
||||
get_addr(iface->ifa_addr).s_addr == default_interface_address->s_addr)
|
||||
{
|
||||
// this isnt fully correct, but this will make calls to get the routing table at least return
|
||||
// this isn't fully correct, but this will make calls to get the routing table at least return
|
||||
// the gateway
|
||||
if (routing_table.empty())
|
||||
routing_table = {{0, {}, {}, get_addr(iface->ifa_dstaddr)}};
|
||||
|
||||
@@ -1394,7 +1394,7 @@ Type NormalizeSkylanderType(Type type)
|
||||
case Type::Trap:
|
||||
case Type::Vehicle:
|
||||
case Type::Unknown:
|
||||
// until these get seperate data logic (except unknown and item since items don't save data and
|
||||
// until these get separate data logic (except unknown and item since items don't save data and
|
||||
// unknown is unknown)
|
||||
return Type::Unknown;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ constexpr std::array<u8, 256> s_key_codes_azerty{
|
||||
0x55, // Multiply
|
||||
0x57, // Add
|
||||
0x00, // Separator
|
||||
0x56, // Substract
|
||||
0x56, // Subtract
|
||||
0x63, // Decimal
|
||||
0x54, // Divide
|
||||
// F1 -> F12
|
||||
|
||||
@@ -67,7 +67,7 @@ public:
|
||||
void AddFromStrings(const TBreakPointsStr& bp_strings);
|
||||
|
||||
bool IsAddressBreakPoint(u32 address) const;
|
||||
bool IsBreakPointEnable(u32 adresss) const;
|
||||
bool IsBreakPointEnable(u32 address) const;
|
||||
// Get the breakpoint in this address (for most purposes)
|
||||
const TBreakPoint* GetBreakpoint(u32 address) const;
|
||||
// Get the breakpoint in this address (ignore temporary breakpoint, e.g. for editing purposes)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
// TODO(ector): Tons of pshufb optimization of the loads/stores, for SSSE3+, possibly SSE4, only.
|
||||
// Should give a very noticable speed boost to paired single heavy code.
|
||||
// Should give a very noticeable speed boost to paired single heavy code.
|
||||
|
||||
#include "Core/PowerPC/Jit64/Jit.h"
|
||||
|
||||
|
||||
@@ -595,7 +595,7 @@ void Jit64::crXXX(UGeckoInstruction inst)
|
||||
JITDISABLE(bJITSystemRegistersOff);
|
||||
DEBUG_ASSERT_MSG(DYNA_REC, inst.OPCD == 19, "Invalid crXXX");
|
||||
|
||||
// TODO(merry): Futher optimizations can be performed here. For example,
|
||||
// TODO(merry): Further optimizations can be performed here. For example,
|
||||
// instead of extracting each CR field bit then setting it, the operation
|
||||
// could be performed on the internal format directly instead and the
|
||||
// relevant bit result can be masked out.
|
||||
|
||||
@@ -81,7 +81,7 @@ void CommonAsmRoutines::GenConvertDoubleToSingle()
|
||||
PAND(XMM0, MConst(double_bottom_bits));
|
||||
PSRLQ(XMM0, 29);
|
||||
|
||||
// OR them togther
|
||||
// OR them together
|
||||
POR(XMM0, R(XMM1));
|
||||
MOVD_xmm(R(RSCRATCH), XMM0);
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ static void EFB_Write(u32 data, u32 addr)
|
||||
if (addr & 0x00800000)
|
||||
{
|
||||
// It's possible to do a z-tested write to EFB by writing a 64bit value to this address range.
|
||||
// Not much is known, but let's at least get some loging.
|
||||
// Not much is known, but let's at least get some logging.
|
||||
ERROR_LOG_FMT(MEMMAP, "Unimplemented Z+Color EFB write. {:08x} @ {:#010x}", data, addr);
|
||||
}
|
||||
else if (addr & 0x00400000)
|
||||
|
||||
@@ -48,7 +48,7 @@ struct ContentFile
|
||||
typedef std::shared_ptr<std::vector<u8>> ContentMemory;
|
||||
|
||||
// Content chunk that loads data from a DirectoryBlobReader.
|
||||
// Intented for representing a partition within a disc.
|
||||
// Intended for representing a partition within a disc.
|
||||
struct ContentPartition
|
||||
{
|
||||
// Offset from the start of the partition for the first byte represented by this chunk.
|
||||
|
||||
@@ -244,7 +244,7 @@ bool NANDImporter::ExtractCertificates()
|
||||
|
||||
if (search_result.empty())
|
||||
{
|
||||
ERROR_LOG_FMT(DISCIO, "ExtractCertificates: Could not find offset for certficate '{}'",
|
||||
ERROR_LOG_FMT(DISCIO, "ExtractCertificates: Could not find offset for certificate '{}'",
|
||||
certificate.filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1792,7 +1792,7 @@ WIARVZFileReader<RVZ>::Convert(BlobReader* infile, const VolumeDisc* infile_volu
|
||||
|
||||
// Compared to WIA, RVZ adds an extra member to the GroupEntry struct. This added data usually
|
||||
// compresses well, so we'll assume the compression ratio for RVZ GroupEntries is 9 / 16 or
|
||||
// better. This constant is somehwat arbitrarily chosen, but no games were found that get a
|
||||
// better. This constant is somewhat arbitrarily chosen, but no games were found that get a
|
||||
// worse compression ratio than that. There are some games that get a worse ratio than 1 / 2,
|
||||
// such as Metroid: Other M (PAL) with the default settings.
|
||||
if (RVZ && compression_type > WIARVZCompressionType::Purge)
|
||||
|
||||
@@ -821,7 +821,7 @@ static void PaintStateIndicator(QPainter& painter, const QRect& region, ControlS
|
||||
QRect meter_region = region;
|
||||
meter_region.setWidth(region.width() * std::clamp(state, 0.0, 1.0));
|
||||
|
||||
// Create a temporary indicator object to retreive color constants.
|
||||
// Create a temporary indicator object to retrieve color constants.
|
||||
MappingIndicator indicator;
|
||||
|
||||
// Normal text.
|
||||
|
||||
@@ -676,7 +676,7 @@ void CodeViewWidget::OnContextMenu()
|
||||
|
||||
auto* note = m_ppc_symbol_db.GetNoteFromAddr(addr);
|
||||
note_edit_action->setEnabled(note != nullptr);
|
||||
// A note cannot be added ontop of the starting address of another note.
|
||||
// A note cannot be added on top of the starting address of another note.
|
||||
if (note != nullptr && note->address == addr)
|
||||
note_add_action->setEnabled(false);
|
||||
|
||||
|
||||
@@ -984,7 +984,7 @@ void MemoryViewWidget::ToggleHighlights(bool enabled)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Treated as being interchangable with Qt::transparent.
|
||||
// Treated as being interchangeable with Qt::transparent.
|
||||
m_highlight_color.setAlpha(0);
|
||||
|
||||
// Immediately remove highlights when paused.
|
||||
@@ -1220,7 +1220,7 @@ void MemoryViewWidget::OnContextMenu(const QPoint& pos)
|
||||
|
||||
auto* note = m_ppc_symbol_db.GetNoteFromAddr(addr);
|
||||
note_edit_action->setEnabled(note != nullptr);
|
||||
// A note cannot be added ontop of the starting address of another note.
|
||||
// A note cannot be added on top of the starting address of another note.
|
||||
if (note != nullptr && note->address == addr)
|
||||
note_add_action->setEnabled(false);
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ enum class RegisterType
|
||||
int_mask, // ???
|
||||
int_cause, // ???
|
||||
dsisr, // Defines the cause of data / alignment exceptions
|
||||
dar, // Data adress register
|
||||
dar, // Data address register
|
||||
pt_hashmask // ???
|
||||
};
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ void ResourcePackManager::RepopulateTable()
|
||||
SelectionChanged();
|
||||
}
|
||||
|
||||
// Revert the indicies as to be more intuitive for users
|
||||
// Revert the indices as to be more intuitive for users
|
||||
int ResourcePackManager::GetResourcePackIndex(QTableWidgetItem* item) const
|
||||
{
|
||||
return m_table_widget->rowCount() - 1 - item->row();
|
||||
|
||||
@@ -18,7 +18,7 @@ public:
|
||||
void Hide();
|
||||
|
||||
signals:
|
||||
void Search(const QString& serach);
|
||||
void Search(const QString& search);
|
||||
|
||||
private:
|
||||
void CreateWidgets();
|
||||
|
||||
@@ -414,7 +414,7 @@ void Settings::SetStyleType(StyleType type)
|
||||
{
|
||||
GetQSettings().setValue(QStringLiteral("userstyle/styletype"), static_cast<int>(type));
|
||||
|
||||
// also set the old setting so that the config is correctly intepreted by older Dolphin builds
|
||||
// also set the old setting so that the config is correctly interpreted by older Dolphin builds
|
||||
GetQSettings().setValue(QStringLiteral("userstyle/enabled"), type == StyleType::User);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ void AudioPane::CreateWidgets()
|
||||
const QFontMetrics font_metrics{font()};
|
||||
const int label_width = font_metrics.boundingRect(GetVolumeLabelText(100)).width();
|
||||
// Ensure the label is at least as wide as the QGroupBox title.
|
||||
// This prevents [-Volume] title uglyness on Windows.
|
||||
// This prevents [-Volume] title ugliness on Windows.
|
||||
const int title_width = font_metrics.boundingRect(volume_box->title()).width();
|
||||
m_volume_indicator->setFixedWidth(std::max(label_width, title_width));
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ void InterfacePane::CreateUI()
|
||||
m_combobox_language = MakeLanguageComboBox();
|
||||
combobox_layout->addRow(tr("&Language:"), m_combobox_language);
|
||||
|
||||
// List avalable themes
|
||||
// List available themes
|
||||
auto theme_paths =
|
||||
Common::DoFileSearch({File::GetUserPath(D_THEMES_IDX), File::GetSysDirectory() + THEMES_DIR});
|
||||
std::vector<std::string> theme_names;
|
||||
|
||||
@@ -198,7 +198,7 @@ TASSpinBox* TASInputWindow::CreateSliderValuePair(
|
||||
}
|
||||
|
||||
// The shortcut_widget argument needs to specify the container widget that will be hidden/shown.
|
||||
// This is done to avoid ambigous shortcuts
|
||||
// This is done to avoid ambiguous shortcuts
|
||||
TASSpinBox* TASInputWindow::CreateSliderValuePair(QBoxLayout* layout, int default_, int max,
|
||||
QKeySequence shortcut_key_sequence,
|
||||
Qt::Orientation orientation,
|
||||
|
||||
@@ -130,11 +130,11 @@ Lexer::Lexer(std::string expr_) : expr(std::move(expr_))
|
||||
it = expr.begin();
|
||||
}
|
||||
|
||||
Token Lexer::GetDelimitedToken(TokenType type, char delimeter)
|
||||
Token Lexer::GetDelimitedToken(TokenType type, char delimiter)
|
||||
{
|
||||
const std::string value = FetchCharsWhile([&](char c) { return c != delimeter && c != '\n'; });
|
||||
const std::string value = FetchCharsWhile([&](char c) { return c != delimiter && c != '\n'; });
|
||||
|
||||
if (it == expr.end() || *it != delimeter)
|
||||
if (it == expr.end() || *it != delimiter)
|
||||
return Token(TOK_INVALID);
|
||||
|
||||
++it;
|
||||
@@ -639,7 +639,8 @@ private:
|
||||
// right-hand child. Its intended use is for supporting old-style barewords expressions.
|
||||
// Note that if you have a keyboard device as default device and the expression is a single digit
|
||||
// number, this will usually resolve in a numerical key instead of a numerical value.
|
||||
// Though if this expression belongs to NumericSetting, it will likely be simplifed back to a value.
|
||||
// Though if this expression belongs to NumericSetting, it will likely be simplified back to a
|
||||
// value.
|
||||
class CoalesceExpression : public Expression
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -96,7 +96,7 @@ private:
|
||||
}
|
||||
|
||||
std::string FetchWordChars();
|
||||
Token GetDelimitedToken(TokenType type, char delimeter);
|
||||
Token GetDelimitedToken(TokenType type, char delimiter);
|
||||
Token GetDelimitedLiteral();
|
||||
Token GetVariable();
|
||||
Token GetFullyQualifiedControl();
|
||||
|
||||
@@ -28,7 +28,7 @@ Force::Force(const std::string& name_) : ReshapableInput(name_, name_, GroupType
|
||||
{_trans("Distance"),
|
||||
// i18n: The symbol/abbreviation for centimeters.
|
||||
_trans("cm"),
|
||||
// i18n: Refering to emulated wii remote swing movement.
|
||||
// i18n: Referring to emulated wii remote swing movement.
|
||||
_trans("Distance of travel from neutral position.")},
|
||||
50, 1, 100);
|
||||
|
||||
@@ -42,7 +42,7 @@ Force::Force(const std::string& name_) : ReshapableInput(name_, name_, GroupType
|
||||
{_trans("Speed"),
|
||||
// i18n: The symbol/abbreviation for meters per second.
|
||||
_trans("m/s"),
|
||||
// i18n: Refering to emulated wii remote swing movement.
|
||||
// i18n: Referring to emulated wii remote swing movement.
|
||||
_trans("Peak velocity of outward swing movements.")},
|
||||
16, 1, 40);
|
||||
|
||||
@@ -51,7 +51,7 @@ Force::Force(const std::string& name_) : ReshapableInput(name_, name_, GroupType
|
||||
{_trans("Return Speed"),
|
||||
// i18n: The symbol/abbreviation for meters per second.
|
||||
_trans("m/s"),
|
||||
// i18n: Refering to emulated wii remote swing movement.
|
||||
// i18n: Referring to emulated wii remote swing movement.
|
||||
_trans("Peak velocity of movements to neutral position.")},
|
||||
2, 1, 40);
|
||||
|
||||
@@ -59,7 +59,7 @@ Force::Force(const std::string& name_) : ReshapableInput(name_, name_, GroupType
|
||||
{_trans("Angle"),
|
||||
// i18n: The symbol/abbreviation for degrees (unit of angular measure).
|
||||
_trans("°"),
|
||||
// i18n: Refering to emulated wii remote swing movement.
|
||||
// i18n: Referring to emulated wii remote swing movement.
|
||||
_trans("Rotation applied at extremities of swing.")},
|
||||
90, 1, 180);
|
||||
}
|
||||
@@ -141,7 +141,7 @@ Shake::Shake(const std::string& name_, ControlState default_intensity_scale)
|
||||
{_trans("Intensity"),
|
||||
// i18n: The symbol/abbreviation for centimeters.
|
||||
_trans("cm"),
|
||||
// i18n: Refering to emulated wii remote movement.
|
||||
// i18n: Referring to emulated wii remote movement.
|
||||
_trans("Total travel distance.")},
|
||||
10 * default_intensity_scale, -50, 50);
|
||||
|
||||
@@ -151,7 +151,7 @@ Shake::Shake(const std::string& name_, ControlState default_intensity_scale)
|
||||
{_trans("Frequency"),
|
||||
// i18n: The symbol/abbreviation for hertz (cycles per second).
|
||||
_trans("Hz"),
|
||||
// i18n: Refering to emulated wii remote movement.
|
||||
// i18n: Referring to emulated wii remote movement.
|
||||
_trans("Number of shakes per second.")},
|
||||
6, 1, 20);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ std::optional<double> GetRayLineIntersection(Common::DVec2 ray, Common::DVec2 po
|
||||
const auto dot = diff.Dot({-ray.y, ray.x});
|
||||
if (std::abs(dot) < 0.00001)
|
||||
{
|
||||
// Both points are on top of eachother.
|
||||
// Both points are on top of each other.
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
@@ -169,7 +169,7 @@ ControlState ReshapableInput::GetCalibrationDataRadiusAtAngle(const CalibrationD
|
||||
GetPointFromAngleAndLength(sample1_angle, data[sample1_index]),
|
||||
GetPointFromAngleAndLength(sample2_angle, data[sample2_index]));
|
||||
|
||||
// Intersection has no value when points are on top of eachother.
|
||||
// Intersection has no value when points are on top of each other.
|
||||
return intersection.value_or(data[sample1_index]);
|
||||
}
|
||||
|
||||
|
||||
@@ -240,7 +240,7 @@ struct Message
|
||||
std::optional<ToMsgType> CheckAndCastTo()
|
||||
{
|
||||
const u32 crc32_in_header = m_message.header.crc32;
|
||||
// zero out the crc32 in the packet once we got it since that's whats needed for calculation
|
||||
// zero out the crc32 in the packet once we got it since that's what's needed for calculation
|
||||
m_message.header.crc32 = 0;
|
||||
const u32 crc32_calculated =
|
||||
Common::ComputeCRC32(reinterpret_cast<const u8*>(&m_message), sizeof(ToMsgType));
|
||||
|
||||
@@ -328,7 +328,7 @@ private:
|
||||
if (m_switch == WGI::GameControllerSwitchPosition::Center)
|
||||
return 0.0;
|
||||
|
||||
// All of the "inbetween" states (e.g. Up-Right) are one-off from the four cardinal
|
||||
// All of the "in between" states (e.g. Up-Right) are one-off from the four cardinal
|
||||
// directions. This tests that the current switch state value is within 1 of the desired
|
||||
// state.
|
||||
const auto direction_diff = std::abs(static_cast<int32_t>(m_switch) - m_direction);
|
||||
|
||||
@@ -737,7 +737,7 @@ void Device::ProcessExtensionID(u8 id_0, u8 id_4, u8 id_5)
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is a normal occurance before extension initialization.
|
||||
// This is a normal occurrence before extension initialization.
|
||||
DEBUG_LOG_FMT(WIIMOTE, "WiiRemote: Unknown extension: {} {} {}.", id_0, id_4, id_5);
|
||||
m_extension_id = ExtensionID::Unsupported;
|
||||
}
|
||||
@@ -1328,7 +1328,7 @@ void Device::IRState::ProcessData(const DataReportManipulator& manipulator)
|
||||
if (points.Count() >= 2)
|
||||
{
|
||||
const auto variance = points.PopulationVariance();
|
||||
// Adjusts Y coorinate to match horizontal FOV.
|
||||
// Adjusts Y coordinate to match horizontal FOV.
|
||||
const auto separation =
|
||||
Common::Vec2(std::sqrt(variance.x), std::sqrt(variance.y)) /
|
||||
Common::Vec2(WiimoteEmu::CameraLogic::CAMERA_RES_X,
|
||||
|
||||
@@ -634,7 +634,7 @@ static bool CheckDeviceAccess(libusb_device* device)
|
||||
}
|
||||
else if (ret != 0) // 0: kernel driver is not active, but otherwise no error.
|
||||
{
|
||||
// Neither 0 nor 1 means an error occured.
|
||||
// Neither 0 nor 1 means an error occurred.
|
||||
ERROR_LOG_FMT(CONTROLLERINTERFACE, "libusb_kernel_driver_active failed: {}",
|
||||
LibusbUtils::ErrorWrap(ret));
|
||||
}
|
||||
|
||||
@@ -274,7 +274,7 @@ void UpdateDiscordPresence(int party_size, SecretType type, const std::string& s
|
||||
std::string secret_final;
|
||||
if (type != SecretType::Empty)
|
||||
{
|
||||
// Declearing party_id or secret_final here will deallocate the variable before passing the
|
||||
// Declaring party_id or secret_final here will deallocate the variable before passing the
|
||||
// values over to Discord_UpdatePresence.
|
||||
|
||||
const size_t secret_length = secret.length();
|
||||
|
||||
@@ -289,7 +289,7 @@ std::optional<std::string> NetPlaySession::DecryptID(std::string_view password)
|
||||
if (password.empty())
|
||||
return {};
|
||||
|
||||
// If the length of an encrypted session id is not divisble by two, it's invalid
|
||||
// If the length of an encrypted session id is not divisible by two, it's invalid
|
||||
if (server_id.empty() || server_id.size() % 2 != 0)
|
||||
return {};
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ void XRRConfiguration::Update()
|
||||
}
|
||||
fullMode = 0;
|
||||
|
||||
// Get the resolution setings for fullscreen mode
|
||||
// Get the resolution settings for fullscreen mode
|
||||
unsigned int fullWidth, fullHeight;
|
||||
char* output_name = nullptr;
|
||||
char auxFlag = '\0';
|
||||
|
||||
@@ -331,7 +331,7 @@ bool BackupFile(const std::string& path)
|
||||
LogToFile("Backing up existing %s to .bak.\n", path.c_str());
|
||||
if (!File::Rename(path, backup_path))
|
||||
{
|
||||
LogToFile("Cound not rename %s to %s for backup.\n", path.c_str(), backup_path.c_str());
|
||||
LogToFile("Could not rename %s to %s for backup.\n", path.c_str(), backup_path.c_str());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
|
||||
void TransitionToState(D3D12_RESOURCE_STATES state) const;
|
||||
|
||||
// Destoys the resource backing this texture. The resource must not be in use by the GPU.
|
||||
// Destroys the resource backing this texture. The resource must not be in use by the GPU.
|
||||
void DestroyResource();
|
||||
|
||||
private:
|
||||
|
||||
@@ -316,7 +316,7 @@ bool SwapChain::ChangeSurface(void* native_handle)
|
||||
{
|
||||
DestroySwapChain();
|
||||
m_wsi.render_surface = native_handle;
|
||||
// We only keep the swap chain settings (HDR/Stereo) that had successfully applied beofre
|
||||
// We only keep the swap chain settings (HDR/Stereo) that had successfully applied before
|
||||
return CreateSwapChain(m_stereo, m_hdr);
|
||||
}
|
||||
|
||||
|
||||
@@ -891,7 +891,7 @@ void Metal::StateTracker::PrepareCompute()
|
||||
{
|
||||
m_dirty_textures &= ~pipe->GetTextures();
|
||||
// Since there's two sets of textures, it's likely there'll be a few in each
|
||||
// Check each set separately to avoid doing too many unneccessary bindings
|
||||
// Check each set separately to avoid doing too many unnecessary bindings
|
||||
constexpr u32 lo_mask = (1 << VideoCommon::MAX_COMPUTE_SHADER_SAMPLERS) - 1;
|
||||
if (u32 lo = dirty & lo_mask)
|
||||
{
|
||||
|
||||
@@ -274,7 +274,7 @@ bool PopulateConfig(GLContext* m_main_gl_context)
|
||||
|
||||
if (!GLExtensions::Supports("GL_ARB_sampler_objects"))
|
||||
{
|
||||
// Our sampler cache uses this extension. It could easyly be workaround and it's by far the
|
||||
// Our sampler cache uses this extension. It could easily be workaround and it's by far the
|
||||
// highest requirement, but it seems that no driver lacks support for it.
|
||||
PanicAlertFmtT("GPU: OGL ERROR: Need GL_ARB_sampler_objects.\n"
|
||||
"GPU: Does your video card support OpenGL 3.3?");
|
||||
|
||||
@@ -133,7 +133,7 @@ bool VideoBackend::FillBackendInfo(GLContext* context)
|
||||
g_backend_info.bSupportsPipelineCacheData = false;
|
||||
g_backend_info.bSupportsLodBiasInSampler = true;
|
||||
g_backend_info.bSupportsPartialMultisampleResolve = true;
|
||||
// Unneccessary since OGL doesn't use pipelines
|
||||
// Unnecessary since OGL doesn't use pipelines
|
||||
g_backend_info.bSupportsDynamicVertexLoader = false;
|
||||
|
||||
// TODO: There is a bug here, if texel buffers or SSBOs/atomics are not supported the graphics
|
||||
|
||||
@@ -42,7 +42,7 @@ StreamBuffer::~StreamBuffer()
|
||||
* The next three functions are to create/delete/use the OpenGL synchronization.
|
||||
* ARB_sync (OpenGL 3.2) is used and required.
|
||||
*
|
||||
* To reduce overhead, the complete buffer is splitted up into SYNC_POINTS chunks.
|
||||
* To reduce overhead, the complete buffer is split up into SYNC_POINTS chunks.
|
||||
* For each of this chunks, there is a fence which checks if this chunk is still in use.
|
||||
*
|
||||
* As our API allows to alloc more memory then it has to use, we have to catch how much is already
|
||||
|
||||
@@ -129,7 +129,7 @@ void SWGfx::SetScissorRect(const MathUtil::Rectangle<int>& rc)
|
||||
{
|
||||
// BPFunctions calls SetScissorRect with the "best" scissor rect whenever the viewport or scissor
|
||||
// changes. However, the software renderer is actually able to use multiple scissor rects (which
|
||||
// is necessary in a few renderering edge cases, such as with Major Minor's Majestic March).
|
||||
// is necessary in a few rendering edge cases, such as with Major Minor's Majestic March).
|
||||
// Thus, we use this as a signal to update the list of scissor rects, but ignore the parameter.
|
||||
Rasterizer::ScissorChanged();
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
// Fence "counters" are used to track which commands have been completed by the GPU.
|
||||
// If the last completed fence counter is greater or equal to N, it means that the work
|
||||
// associated counter N has been completed by the GPU. The value of N to associate with
|
||||
// commands can be retreived by calling GetCurrentFenceCounter().
|
||||
// commands can be retrieved by calling GetCurrentFenceCounter().
|
||||
u64 GetCompletedFenceCounter() const { return m_completed_fence_counter; }
|
||||
|
||||
// Gets the fence that will be signaled when the currently executing command buffer is
|
||||
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
void SetViewport(const VkViewport& viewport);
|
||||
void SetScissor(const VkRect2D& scissor);
|
||||
|
||||
// Binds all dirty state to the commmand buffer.
|
||||
// Binds all dirty state to the command buffer.
|
||||
// If this returns false, you should not issue the draw.
|
||||
bool Bind();
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ struct RasterSurfaceShaderData
|
||||
|
||||
// These shader properties describe the input that the
|
||||
// shader expects to expose. The key is text
|
||||
// expected to be in the shader code and the propery
|
||||
// expected to be in the shader code and the property
|
||||
// describes various details about the input
|
||||
std::vector<ShaderProperty> uniform_properties;
|
||||
std::string vertex_source;
|
||||
|
||||
@@ -20,7 +20,7 @@ struct TextureSamplerValue
|
||||
// If 'Asset' is used, the sampler is pulled
|
||||
// directly from the asset properties
|
||||
// If 'TextureHash' is chosen, the sampler is pulled
|
||||
// from the game with the cooresponding texture hash
|
||||
// from the game with the corresponding texture hash
|
||||
enum class SamplerOrigin
|
||||
{
|
||||
Asset,
|
||||
|
||||
@@ -153,7 +153,7 @@ bool CPUCull::AreAllVerticesCulled(VertexLoaderBase* loader, OpcodeDecoder::Prim
|
||||
Common::AllocateAlignedMemory(new_size * sizeof(TransformedVertex), 32)));
|
||||
}
|
||||
|
||||
// transform functions need the projection matrix to tranform to clip space
|
||||
// transform functions need the projection matrix to transform to clip space
|
||||
auto& system = Core::System::GetInstance();
|
||||
system.GetVertexShaderManager().SetProjectionMatrix(system.GetXFStateManager());
|
||||
|
||||
|
||||
@@ -325,7 +325,7 @@ enum Bug
|
||||
|
||||
// BUG: Some driver and Apple Silicon GPU combinations have problems with fragment discard when
|
||||
// early depth test is enabled. Discarded fragments may appear corrupted (Super Mario Sunshine,
|
||||
// Sonic Adventure 2: Battle, Phantasy Star Online Epsiodes 1 & 2, etc).
|
||||
// Sonic Adventure 2: Battle, Phantasy Star Online Episodes 1 & 2, etc).
|
||||
// Affected devices: Apple Silicon GPUs of Apple family 4 and newer.
|
||||
// Started version: -1
|
||||
// Ended version: -1
|
||||
|
||||
@@ -18,7 +18,7 @@ void GeometryShaderManager::Init()
|
||||
{
|
||||
constants = {};
|
||||
|
||||
// Init any intial constants which aren't zero when bpmem is zero.
|
||||
// Init any initial constants which aren't zero when bpmem is zero.
|
||||
SetViewportChanged();
|
||||
SetProjectionChanged();
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ void PixelShaderManager::Init()
|
||||
{
|
||||
constants = {};
|
||||
|
||||
// Init any intial constants which aren't zero when bpmem is zero.
|
||||
// Init any initial constants which aren't zero when bpmem is zero.
|
||||
m_fog_range_adjusted_changed = true;
|
||||
m_viewport_changed = false;
|
||||
|
||||
@@ -51,9 +51,9 @@ void PixelShaderManager::Init()
|
||||
constants.konst[10][component] = 0;
|
||||
constants.konst[11][component] = 0;
|
||||
|
||||
// Annoyingly, alpha reads zero values for the .rgb colors (offically
|
||||
// Annoyingly, alpha reads zero values for the .rgb colors (officially
|
||||
// defined as invalid)
|
||||
// If it wasn't for this, we could just use one of the first 3 colunms
|
||||
// If it wasn't for this, we could just use one of the first 3 columns
|
||||
// instead of
|
||||
// wasting an entire 4th column just for alpha.
|
||||
if (component == 3)
|
||||
|
||||
@@ -908,7 +908,7 @@ void PostProcessing::FillUniformBuffer(const MathUtil::Rectangle<int>& src,
|
||||
g_ActiveConfig.color_correction.fSDRDisplayCustomGamma;
|
||||
// scRGB (RGBA16F) expects linear values as opposed to sRGB gamma
|
||||
builtin_uniforms.linear_space_output = m_framebuffer_format == AbstractTextureFormat::RGBA16F;
|
||||
// Implies ouput values can be beyond the 0-1 range
|
||||
// Implies output values can be beyond the 0-1 range
|
||||
builtin_uniforms.hdr_output = m_framebuffer_format == AbstractTextureFormat::RGBA16F;
|
||||
builtin_uniforms.hdr_paper_white_nits = g_ActiveConfig.color_correction.fHDRPaperWhiteNits;
|
||||
// A value of 1 1 1 usually matches 80 nits in HDR
|
||||
|
||||
@@ -628,7 +628,7 @@ std::tuple<float, float> Presenter::ApplyStandardAspectCrop(float width, float h
|
||||
// For the custom (relative) case, we want to crop from the native aspect ratio
|
||||
// to the specific target one, as they likely have a small difference
|
||||
case AspectMode::Custom:
|
||||
// There should be no cropping needed in the custom strech case,
|
||||
// There should be no cropping needed in the custom stretch case,
|
||||
// as output should always exactly match the target aspect ratio
|
||||
case AspectMode::CustomStretch:
|
||||
expected_aspect = g_ActiveConfig.GetCustomAspectRatio();
|
||||
|
||||
@@ -76,7 +76,7 @@ static DstBlendFactor RemoveDstAlphaUsage(DstBlendFactor factor)
|
||||
}
|
||||
|
||||
// We separate the blending parameter for rgb and alpha. For blending
|
||||
// the alpha component, CLR and ALPHA are indentical. So just always
|
||||
// the alpha component, CLR and ALPHA are identical. So just always
|
||||
// use ALPHA as this makes it easier for the backends to use the second
|
||||
// alpha value of dual source blending.
|
||||
static DstBlendFactor RemoveSrcColorUsage(DstBlendFactor factor)
|
||||
|
||||
@@ -569,7 +569,7 @@ void TextureCacheBase::DoSaveState(PointerWrap& p)
|
||||
auto ShouldSaveEntry = [](const RcTcacheEntry& entry) {
|
||||
// We skip non-copies as they can be decoded from RAM when the state is loaded.
|
||||
// Storing them would duplicate data in the save state file, adding to decompression time.
|
||||
// We also need to store invalidated entires, as they can't be restored from RAM.
|
||||
// We also need to store invalidated entries, as they can't be restored from RAM.
|
||||
return entry->IsCopy() || entry->invalidated;
|
||||
};
|
||||
auto AddCacheEntryToMap = [&entry_map, &entries_to_save](const RcTcacheEntry& entry) -> u32 {
|
||||
@@ -1257,7 +1257,7 @@ TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool fo
|
||||
// If the TMEM configuration is such that this texture is more or less guaranteed to still
|
||||
// be in TMEM, then we know we can reuse the old entry without even hashing the memory
|
||||
//
|
||||
// It's possible this texture has already been overwritten in emulated memory and therfore
|
||||
// It's possible this texture has already been overwritten in emulated memory and therefore
|
||||
// invalidated from our texture cache, but we want to use it anyway to approximate the
|
||||
// result of the game using an overwritten texture cached in TMEM.
|
||||
//
|
||||
@@ -2471,7 +2471,7 @@ void TextureCacheBase::CopyRenderTargetToTexture(
|
||||
|
||||
if (OpcodeDecoder::g_record_fifo_data)
|
||||
{
|
||||
// Mark the memory behind this efb copy as dynamicly generated for the Fifo log
|
||||
// Mark the memory behind this efb copy as dynamically generated for the Fifo log
|
||||
u32 address = dstAddr;
|
||||
for (u32 i = 0; i < num_blocks_y; i++)
|
||||
{
|
||||
@@ -2690,7 +2690,7 @@ TextureCacheBase::FindMatchingTextureFromPool(const TextureConfig& config)
|
||||
// Find a texture from the pool that does not have a frameCount of FRAMECOUNT_INVALID.
|
||||
// This prevents a texture from being used twice in a single frame with different data,
|
||||
// which potentially means that a driver has to maintain two copies of the texture anyway.
|
||||
// Render-target textures are fine through, as they have to be generated in a seperated pass.
|
||||
// Render-target textures are fine through, as they have to be generated in a separate pass.
|
||||
// As non-render-target textures are usually static, this should not matter much.
|
||||
auto range = m_texture_pool.equal_range(config);
|
||||
auto matching_iter = std::find_if(range.first, range.second, [](const auto& iter) {
|
||||
|
||||
@@ -1006,7 +1006,7 @@ static void TexDecoder_DecodeImpl_RGBA8_SSSE3(u32* dst, const u8* src, int width
|
||||
TextureFormat texformat, const u8* tlut,
|
||||
TLUTFormat tlutfmt, int Wsteps4, int Wsteps8)
|
||||
{
|
||||
// xsacha optimized with SSSE3 instrinsics
|
||||
// xsacha optimized with SSSE3 intrinsics
|
||||
// Produces a ~30% speed improvement over SSE2 implementation
|
||||
for (int y = 0; y < height; y += 4)
|
||||
{
|
||||
@@ -1212,7 +1212,7 @@ static void TexDecoder_DecodeImpl_CMPR(u32* dst, const u8* src, int width, int h
|
||||
int cmp1 = _mm_extract_epi16(cmprgb0rgb1, 4);
|
||||
|
||||
// green:
|
||||
// NOTE: We start with the larger number of bits (6) firts for G and shift the mask down
|
||||
// NOTE: We start with the larger number of bits (6) first for G and shift the mask down
|
||||
// 1 bit to get a 5-bit mask later for R and B components.
|
||||
// low6mask == _mm_set_epi32(0x0000FC00, 0x0000FC00, 0x0000FC00, 0x0000FC00)
|
||||
const __m128i low6mask = _mm_slli_epi32(_mm_srli_epi32(allFFs128, 24 + 2), 8 + 2);
|
||||
|
||||
@@ -557,7 +557,7 @@ ShaderCode GenPixelShader(APIType api_type, const ShaderHostConfig& host_config,
|
||||
out.Write("}}\n"
|
||||
"\n");
|
||||
|
||||
// Since the fixed-point texture coodinate variables aren't global, we need to pass
|
||||
// Since the fixed-point texture coordinate variables aren't global, we need to pass
|
||||
// them to the select function. This applies to all backends.
|
||||
if (numTexgen > 0)
|
||||
{
|
||||
|
||||
@@ -439,7 +439,7 @@ float3 load_input_float3_rawtex(uint vtx_offset, uint attr_offset) {{
|
||||
// There are two different ways to do this, when the depth range is oversized, we process
|
||||
// the depth range in the vertex shader, if not we let the host driver handle it.
|
||||
//
|
||||
// Adjust z for the depth range. We're using an equation which incorperates a depth inversion,
|
||||
// Adjust z for the depth range. We're using an equation which incorporates a depth inversion,
|
||||
// so we can map the console -1..0 range to the 0..1 range used in the depth buffer.
|
||||
// We have to handle the depth range in the vertex shader instead of after the perspective
|
||||
// divide, because some games will use a depth range larger than what is allowed by the
|
||||
@@ -451,7 +451,7 @@ float3 load_input_float3_rawtex(uint vtx_offset, uint attr_offset) {{
|
||||
if (!host_config.backend_clip_control)
|
||||
{
|
||||
// If the graphics API doesn't support a depth range of 0..1, then we need to map z to
|
||||
// the -1..1 range. Unfortunately we have to use a substraction, which is a lossy floating-point
|
||||
// the -1..1 range. Unfortunately we have to use a subtraction, which is a lossy floating-point
|
||||
// operation that can introduce a round-trip error.
|
||||
out.Write("o.pos.z = o.pos.z * 2.0 - o.pos.w;\n");
|
||||
}
|
||||
|
||||
@@ -965,7 +965,7 @@ void VertexManagerBase::OnDraw()
|
||||
|
||||
void VertexManagerBase::OnCPUEFBAccess()
|
||||
{
|
||||
// Check this isn't another access without any draws inbetween.
|
||||
// Check this isn't another access without any draws in between.
|
||||
if (!m_cpu_accesses_this_frame.empty() && m_cpu_accesses_this_frame.back() == m_draw_counter)
|
||||
return;
|
||||
|
||||
|
||||
@@ -792,7 +792,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
|
||||
// There are two different ways to do this, when the depth range is oversized, we process
|
||||
// the depth range in the vertex shader, if not we let the host driver handle it.
|
||||
//
|
||||
// Adjust z for the depth range. We're using an equation which incorperates a depth inversion,
|
||||
// Adjust z for the depth range. We're using an equation which incorporates a depth inversion,
|
||||
// so we can map the console -1..0 range to the 0..1 range used in the depth buffer.
|
||||
// We have to handle the depth range in the vertex shader instead of after the perspective
|
||||
// divide, because some games will use a depth range larger than what is allowed by the
|
||||
@@ -804,7 +804,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
|
||||
if (!host_config.backend_clip_control)
|
||||
{
|
||||
// If the graphics API doesn't support a depth range of 0..1, then we need to map z to
|
||||
// the -1..1 range. Unfortunately we have to use a substraction, which is a lossy floating-point
|
||||
// the -1..1 range. Unfortunately we have to use a subtraction, which is a lossy floating-point
|
||||
// operation that can introduce a round-trip error.
|
||||
out.Write("o.pos.z = o.pos.z * 2.0 - o.pos.w;\n");
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
// IMPORTANT: UI etc should modify g_Config. Graphics code should read g_ActiveConfig.
|
||||
// The reason for this is to get rid of race conditions etc when the configuration
|
||||
// changes in the middle of a frame. This is done by copying g_Config to g_ActiveConfig
|
||||
// at the start of every frame. Noone should ever change members of g_ActiveConfig
|
||||
// at the start of every frame. No one should ever change members of g_ActiveConfig
|
||||
// directly.
|
||||
|
||||
#pragma once
|
||||
|
||||
@@ -236,7 +236,7 @@ dma_copy:
|
||||
si @DMBL, #0xfeeb
|
||||
si @DIRQ, #0x0001
|
||||
|
||||
; wait for the CPU to recieve our response before we execute the next op
|
||||
; wait for the CPU to receive our response before we execute the next op
|
||||
call 0x8078
|
||||
andi $ac0.m, #0x7fff
|
||||
lrs $ac1.m, @CMBL
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Instead of having one PCH per module, dolphin has one PCH shared between all modules.
|
||||
# So we need to implement PCH manually, rather than using the PCH support built into cmake
|
||||
|
||||
# linking against this interface libary will cause targets to enable PCH
|
||||
# linking against this interface library will cause targets to enable PCH
|
||||
add_library(use_pch INTERFACE)
|
||||
|
||||
# Uncomment this return to disable PCH
|
||||
|
||||
@@ -2258,7 +2258,7 @@ TEST(Assembler, InvalidNumericLabels)
|
||||
res = Assemble(forward_directive, 0);
|
||||
EXPECT_TRUE(IsFailure(res) &&
|
||||
GetFailure(res).message ==
|
||||
"Forward label references not supported in fully resolved expressons")
|
||||
"Forward label references not supported in fully resolved expressions")
|
||||
<< GetFailure(res).message;
|
||||
res = Assemble(missing_backward_directive, 0);
|
||||
EXPECT_TRUE(IsFailure(res) && GetFailure(res).message == "No numeric label '0' found above here")
|
||||
|
||||
@@ -32,7 +32,7 @@ TEST(BusyLoopTest, MultiThreaded)
|
||||
{
|
||||
// We normally have to call Wakeup to assure the Event is triggered.
|
||||
// But this check is for an internal feature of the BlockingLoop.
|
||||
// It's implemented to fall back to a busy loop regulary.
|
||||
// It's implemented to fall back to a busy loop regularly.
|
||||
// If we're in the busy loop, the payload (and so the Event) is called all the time.
|
||||
// loop.Wakeup();
|
||||
e.Wait();
|
||||
|
||||
@@ -48,6 +48,6 @@ TEST(WorkQueueThread, Simple)
|
||||
|
||||
worker.Push(2);
|
||||
worker.WaitForCompletion();
|
||||
// Still running after cancelation.
|
||||
// Still running after cancellation.
|
||||
EXPECT_EQ(x, 2);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ SR: equ 0x13
|
||||
PRODL: equ 0x14
|
||||
PRODM: equ 0x15
|
||||
PRODH: equ 0x16
|
||||
PRODM2: equ 0x17
|
||||
PRODM2: equ 0x17
|
||||
|
||||
AXL0: equ 0x18
|
||||
AXL1: equ 0x19
|
||||
@@ -88,7 +88,7 @@ NUM_SAMPLES: equ 1024 ; 1024 stereo samples 16 bits
|
||||
/**************************************************************/
|
||||
/* SOUND CHANNEL REGS */
|
||||
/**************************************************************/
|
||||
|
||||
|
||||
MEM_REG2: equ 0x0
|
||||
MEM_VECTH: equ MEM_REG2
|
||||
MEM_VECTL: equ MEM_REG2+1
|
||||
@@ -108,10 +108,10 @@ DELAYL_SND: equ MEM_REG+3 // Delay samples Low word
|
||||
|
||||
CHAN_REGS: equ MEM_REG+4 // specific regs for the channel
|
||||
|
||||
FLAGSH_SMP: equ CHAN_REGS+0 // countain number of bytes for step (1-> Mono 8 bits, 2-> Stereo 8 bits and Mono 16 bits, 4-> Stereo 16 bits)
|
||||
FLAGSH_SMP: equ CHAN_REGS+0 // contains number of bytes for step (1-> Mono 8 bits, 2-> Stereo 8 bits and Mono 16 bits, 4-> Stereo 16 bits)
|
||||
FLAGSL_SMP: equ CHAN_REGS+1 // 0->Mono 8 bits, 1->Stereo 8 bits, 2->Mono 16 bits 3 -> Stereo 16 bits
|
||||
|
||||
ADDRH_SMP: equ CHAN_REGS+2 // start address
|
||||
ADDRH_SMP: equ CHAN_REGS+2 // start address
|
||||
ADDRL_SMP: equ CHAN_REGS+3
|
||||
|
||||
ADDREH_SMP: equ CHAN_REGS+4 // end address
|
||||
@@ -156,7 +156,7 @@ data_end: equ MEM_SAMP+0x20
|
||||
|
||||
MEM_SND: equ data_end ; it need 2048 words (4096 bytes)
|
||||
|
||||
|
||||
|
||||
|
||||
/*** START CODE ***/
|
||||
|
||||
@@ -175,16 +175,16 @@ MEM_SND: equ data_end ; it need 2048 words (4096 bytes)
|
||||
|
||||
lri $CONFIG, #0xff
|
||||
lri $SR,#0
|
||||
s16
|
||||
clr15
|
||||
m0
|
||||
s16
|
||||
clr15
|
||||
m0
|
||||
|
||||
/**************************************************************/
|
||||
/* main */
|
||||
/**************************************************************/
|
||||
|
||||
main:
|
||||
|
||||
|
||||
// send init token to CPU
|
||||
|
||||
si @DMBH, #0xdcd1
|
||||
@@ -195,7 +195,7 @@ recv_cmd:
|
||||
// check if previous mail is received from the CPU
|
||||
|
||||
call wait_for_dsp_mail
|
||||
|
||||
|
||||
// wait a mail from CPU
|
||||
|
||||
call wait_for_cpu_mail
|
||||
@@ -206,7 +206,7 @@ recv_cmd:
|
||||
lri $ACM0,#0xcdd1
|
||||
cmp
|
||||
jz sys_command
|
||||
|
||||
|
||||
clr $ACC1
|
||||
lrs $ACM1, @CMBL
|
||||
|
||||
@@ -217,7 +217,7 @@ recv_cmd:
|
||||
jz input_samples2
|
||||
|
||||
cmpi $ACM1, #0x123 // get the address of the voice datas buffer (CHANNEL DATAS)
|
||||
jz get_data_addr
|
||||
jz get_data_addr
|
||||
|
||||
cmpi $ACM1, #0x222 // process the voice mixing the samples internally
|
||||
jz input_next_samples
|
||||
@@ -226,14 +226,14 @@ recv_cmd:
|
||||
jz send_samples
|
||||
|
||||
cmpi $ACM1, #0x777 // special: to dump the IROM Datas (remember disable others functions from the interrupt vector to use)
|
||||
jz rom_dump_word // (CMBH+0x8000) countain the address of IROM
|
||||
jz rom_dump_word // (CMBH+0x8000) contains the address of IROM
|
||||
|
||||
cmpi $ACM1, #0x888 // Used for test
|
||||
jz polla_loca
|
||||
jz polla_loca
|
||||
|
||||
cmpi $ACM1, #0x999
|
||||
jz task_terminate
|
||||
|
||||
|
||||
si @DMBL, #0x0004 // return 0 as ignore command
|
||||
si @DIRQ, #0x1 // set the interrupt
|
||||
jmp recv_cmd
|
||||
@@ -242,19 +242,19 @@ task_terminate:
|
||||
si @DMBL, #0x0003
|
||||
si @DIRQ, #0x1
|
||||
jmp recv_cmd
|
||||
|
||||
|
||||
sys_command:
|
||||
clr $ACC1
|
||||
lrs $ACM1, @CMBL
|
||||
|
||||
|
||||
cmpi $ACM1,#0x0001
|
||||
jz run_nexttask
|
||||
|
||||
|
||||
cmpi $ACM1,#0x0002
|
||||
jz 0x8000
|
||||
|
||||
|
||||
jmp recv_cmd
|
||||
|
||||
|
||||
run_nexttask:
|
||||
s16
|
||||
call wait_for_cpu_mail
|
||||
@@ -283,7 +283,7 @@ run_nexttask:
|
||||
lrs $27,@CMBL
|
||||
sbclr #0x05
|
||||
sbclr #0x06
|
||||
jmp 0x80b5
|
||||
jmp 0x80b5
|
||||
halt
|
||||
|
||||
/**************************************************************************************************************************************/
|
||||
@@ -296,7 +296,7 @@ send_samples:
|
||||
lri $AXL0, #NUM_SAMPLES*4 ; len
|
||||
lr $ACM0, @ADDRH_SND
|
||||
lr $ACL0, @ADDRL_SND
|
||||
|
||||
|
||||
call do_dma
|
||||
si @DMBL, #0x0004
|
||||
si @DIRQ, #0x1 // set the interrupt
|
||||
@@ -310,10 +310,10 @@ get_data_addr:
|
||||
|
||||
lrs $ACM0, @CMBH
|
||||
lr $ACL0, @CMBL
|
||||
|
||||
|
||||
sr @MEM_VECTH, $ACM0
|
||||
sr @MEM_VECTL, $ACL0
|
||||
|
||||
|
||||
si @DIRQ, #0x0 // clear the interrupt
|
||||
jmp recv_cmd
|
||||
|
||||
@@ -326,7 +326,7 @@ input_samples:
|
||||
lr $ACM0, @MEM_VECTH
|
||||
lr $ACL0, @MEM_VECTL
|
||||
|
||||
lris $AXL0, #0x0004
|
||||
lris $AXL0, #0x0004
|
||||
sr @RETURN, $AXL0
|
||||
si @DIRQ, #0x0000
|
||||
|
||||
@@ -363,7 +363,7 @@ input_samples2:
|
||||
lr $ACM0, @MEM_VECTH
|
||||
lr $ACL0, @MEM_VECTL
|
||||
|
||||
lris $AXL0, #0x0004
|
||||
lris $AXL0, #0x0004
|
||||
sr @RETURN, $AXL0
|
||||
si @DIRQ, #0x0000
|
||||
|
||||
@@ -381,7 +381,7 @@ input_samples2:
|
||||
lri $AR0, #MEM_SND
|
||||
lris $AXL1, #DMA_TO_DSP;
|
||||
lri $AXL0, #NUM_SAMPLES*4; len
|
||||
|
||||
|
||||
call do_dma
|
||||
|
||||
jmp start_main
|
||||
@@ -390,12 +390,12 @@ input_samples2:
|
||||
// process the voice mixing the samples internally
|
||||
|
||||
input_next_samples:
|
||||
|
||||
|
||||
clr $ACC0
|
||||
lr $ACM0, @MEM_VECTH
|
||||
lr $ACL0, @MEM_VECTL
|
||||
|
||||
lris $AXL0, #0x0004
|
||||
lris $AXL0, #0x0004
|
||||
sr @RETURN, $AXL0
|
||||
si @DIRQ, #0x0000
|
||||
|
||||
@@ -408,10 +408,10 @@ input_next_samples:
|
||||
call do_dma
|
||||
|
||||
/**************************************************************************************************************************************/
|
||||
// mixing and control pitch to create 1024 Stereo Samples at 16 bits from here
|
||||
// mixing and control pitch to create 1024 Stereo Samples at 16 bits from here
|
||||
|
||||
start_main:
|
||||
|
||||
|
||||
lri $R08, #48000
|
||||
|
||||
// load the previous samples used
|
||||
@@ -426,29 +426,29 @@ start_main:
|
||||
addi $ACM1, #sample_selector
|
||||
mrr $AR3, $ACM1
|
||||
ilrr $ACM1, @$AR3
|
||||
mrr $AR3, $ACM1 // AR3 countain the jump loaded from sample selector
|
||||
mrr $AR3, $ACM1 // AR3 contains the jump loaded from sample selector
|
||||
|
||||
clr $ACC0
|
||||
|
||||
// test for channel paused
|
||||
|
||||
lr $ACM0, @FLAGSL_SMP
|
||||
andcf $ACM0, #0x20
|
||||
lr $ACM0, @FLAGSL_SMP
|
||||
andcf $ACM0, #0x20
|
||||
jlz end_main
|
||||
|
||||
|
||||
// load the sample address
|
||||
|
||||
lr $ACM0, @ADDRH_SMP
|
||||
lr $ACL0, @ADDRL_SMP
|
||||
|
||||
// test if ADDR_SMP & ADDR2H_SMP are zero
|
||||
|
||||
|
||||
tst $ACC0
|
||||
jnz do_not_change1
|
||||
|
||||
// set return as "change of buffer"
|
||||
|
||||
lris $AXL0, #0x0004
|
||||
lris $AXL0, #0x0004
|
||||
sr @RETURN, $AXL0
|
||||
|
||||
// change to buffer 2 if it is possible
|
||||
@@ -464,10 +464,10 @@ do_not_change1:
|
||||
|
||||
|
||||
// backup the external sample address
|
||||
|
||||
|
||||
mrr $IX2, $ACM0
|
||||
mrr $IX3, $ACL0
|
||||
|
||||
|
||||
|
||||
// load the counter pitch
|
||||
|
||||
@@ -500,7 +500,7 @@ do_not_change1:
|
||||
tst $ACC0
|
||||
jz no_delay
|
||||
|
||||
// samples left and right to 0
|
||||
// samples left and right to 0
|
||||
|
||||
lris $AXH0, #0
|
||||
lris $AXH1, #0
|
||||
@@ -510,7 +510,7 @@ do_not_change1:
|
||||
mrr $ACM1, $AXL0
|
||||
l_delay:
|
||||
iar $AR1 // skip two samples
|
||||
iar $AR1
|
||||
iar $AR1
|
||||
decm $ACM1
|
||||
jz exit_delay1 // exit1 if samples to be processed == 0
|
||||
|
||||
@@ -522,14 +522,14 @@ l_delay:
|
||||
|
||||
exit_delay1:
|
||||
decm $ACM0
|
||||
|
||||
|
||||
sr @DELAYH_SND, $ACH0
|
||||
sr @DELAYL_SND, $ACM0
|
||||
|
||||
|
||||
lris $AXL0,#0 ; exit from loop
|
||||
|
||||
jmp no_delay
|
||||
|
||||
|
||||
jmp no_delay
|
||||
|
||||
|
||||
exit_delay2:
|
||||
|
||||
@@ -551,9 +551,9 @@ no_delay:
|
||||
R"(
|
||||
/* bucle de generacion de samples */
|
||||
|
||||
|
||||
|
||||
// load the sample buffer with address aligned to 32 bytes blocks (first time)
|
||||
|
||||
|
||||
si @DSCR, #DMA_TO_DSP // very important!: load_smp_addr_align and jump_load_smp_addr need fix this DMA Register (I gain some cycles so)
|
||||
|
||||
// load_smp_addr_align input: $IX2:$IX3
|
||||
@@ -564,25 +564,25 @@ no_delay:
|
||||
|
||||
lr $IX0, @LEFT_VOLUME
|
||||
lr $IX1, @RIGHT_VOLUME
|
||||
|
||||
|
||||
// test the freq value
|
||||
|
||||
clr $ACC0
|
||||
lr $ACH0, @FREQH_SMP
|
||||
lr $ACM0, @FREQL_SMP
|
||||
|
||||
|
||||
clr $ACC1
|
||||
;lri $ACM1,#48000
|
||||
mrr $ACM1, $R08
|
||||
cmp
|
||||
|
||||
// select the output of the routine to process stereo-mono 8/16bits samples
|
||||
|
||||
lri $AR0, #get_sample // fast method <=48000
|
||||
|
||||
// if number is greater freq>48000 fix different routine
|
||||
|
||||
ifg
|
||||
// select the output of the routine to process stereo-mono 8/16bits samples
|
||||
|
||||
lri $AR0, #get_sample // fast method <=48000
|
||||
|
||||
// if number is greater freq>48000 fix different routine
|
||||
|
||||
ifg
|
||||
lri $AR0, #get_sample2 // slow method >48000
|
||||
|
||||
// loops for samples to be processed
|
||||
@@ -594,12 +594,12 @@ no_delay:
|
||||
|
||||
// Mix right sample section
|
||||
|
||||
lrr $ACL0, @$AR1 // load in ACL0 the right sample from the internal buffer
|
||||
lrr $ACL0, @$AR1 // load in ACL0 the right sample from the internal buffer
|
||||
movax $ACC1, $AXL1 // big trick :) load the current sample <<16 and sign extended
|
||||
|
||||
asl $ACC0,#24 // convert sample from buffer to 24 bit number with sign extended (ACH0:ACM0)
|
||||
asr $ACC0,#-8
|
||||
|
||||
|
||||
add $ACC0,$ACC1 // current_sample+buffer sample
|
||||
|
||||
cmpi $ACM0,#32767 // limit to 32767
|
||||
@@ -613,20 +613,20 @@ right_skip:
|
||||
cmpi $ACM0,#-32768 // limit to -32768
|
||||
ifle
|
||||
lri $ACM0, #-32768
|
||||
|
||||
right_skip2:
|
||||
|
||||
right_skip2:
|
||||
|
||||
srri @$AR1, $ACM0 // store the right sample mixed to the internal buffer and increment AR1
|
||||
|
||||
// Mix left sample section
|
||||
|
||||
lrr $ACL0, @$AR1 // load in ACL0 the left sample from the internal buffer
|
||||
lrr $ACL0, @$AR1 // load in ACL0 the left sample from the internal buffer
|
||||
|
||||
movax $ACC1, $AXL0 // big trick :) load the current sample <<16 and sign extended
|
||||
|
||||
|
||||
asl $ACC0, #24 // convert sample from buffer to 24 bit number with sign extended (ACH0:ACM0)
|
||||
asr $ACC0, #-8
|
||||
|
||||
|
||||
add $ACC0, $ACC1 // current_sample+buffer sample
|
||||
|
||||
cmpi $ACM0,#32767 // limit to 32767
|
||||
@@ -640,11 +640,11 @@ left_skip:
|
||||
cmpi $ACM0,#-32768 // limit to -32768
|
||||
ifle
|
||||
lri $ACM0, #-32768
|
||||
|
||||
left_skip2:
|
||||
|
||||
left_skip2:
|
||||
|
||||
srri @$AR1, $ACM0 // store the left sample mixed to the internal buffer and increment AR1
|
||||
|
||||
|
||||
// adds the counter with the voice frequency and test if it >=48000 to get the next sample
|
||||
|
||||
clr $ACC1
|
||||
@@ -653,7 +653,7 @@ left_skip2:
|
||||
clr $ACC0
|
||||
lr $ACH0, @FREQH_SMP
|
||||
lr $ACM0, @FREQL_SMP
|
||||
|
||||
|
||||
add $ACC1,$ACC0
|
||||
clr $ACC0
|
||||
//lri $ACM0,#48000
|
||||
@@ -663,7 +663,7 @@ left_skip2:
|
||||
|
||||
jrnc $AR0 //get_sample or get_sample2 method
|
||||
|
||||
sr @COUNTERH_SMP, $ACH1
|
||||
sr @COUNTERH_SMP, $ACH1
|
||||
sr @COUNTERL_SMP, $ACM1
|
||||
|
||||
jmp loop_end
|
||||
@@ -700,8 +700,8 @@ get_sample2: // slow method
|
||||
cmp
|
||||
|
||||
jle get_sample2
|
||||
|
||||
sr @COUNTERH_SMP, $ACH1
|
||||
|
||||
sr @COUNTERH_SMP, $ACH1
|
||||
sr @COUNTERL_SMP, $ACM1
|
||||
|
||||
mrr $ACM0, $IX2 // load ADDRH_SMP
|
||||
@@ -721,14 +721,14 @@ get_sample2: // slow method
|
||||
|
||||
// load samples from dma, return $ar2 with the addr to get the samples and return using $ar0 to the routine to process 8-16bits Mono/Stereo
|
||||
|
||||
jmp jump_load_smp_addr
|
||||
jmp jump_load_smp_addr
|
||||
|
||||
// get a new sample for freq <= 48000 Hz
|
||||
|
||||
get_sample: // fast method
|
||||
|
||||
|
||||
sub $ACC1,$ACC0 // restore the counter
|
||||
sr @COUNTERH_SMP, $ACH1
|
||||
sr @COUNTERH_SMP, $ACH1
|
||||
sr @COUNTERL_SMP, $ACM1
|
||||
|
||||
// restore the external sample buffer address
|
||||
@@ -739,7 +739,7 @@ get_sample: // fast method
|
||||
|
||||
lr $AXL1, @FLAGSH_SMP // add the step to get the next samples
|
||||
addaxl $ACC0, $AXL1
|
||||
|
||||
|
||||
clr $ACC1
|
||||
mrr $ACM1, $r0a // load ADDREH_SMP
|
||||
mrr $ACL1, $r0b // load ADDREL_SMP
|
||||
@@ -756,21 +756,21 @@ get_sample: // fast method
|
||||
|
||||
// load samples from dma, return $ar2 with the addr and return using $ar0 to the routine to process 8-16bits Mono/Stereo or addr_get_sample_again
|
||||
|
||||
jmp jump_load_smp_addr
|
||||
jmp jump_load_smp_addr
|
||||
|
||||
sample_selector:
|
||||
cw mono_8bits
|
||||
cw mono_16bits
|
||||
cw stereo_8bits
|
||||
cw stereo_16bits
|
||||
cw mono_8bits
|
||||
cw mono_16bits
|
||||
cw stereo_8bits
|
||||
cw stereo_16bits
|
||||
|
||||
get_new_buffer:
|
||||
|
||||
// set return as "change of buffer": it need to change the sample address
|
||||
|
||||
lris $AXL0, #0x0004
|
||||
lris $AXL0, #0x0004
|
||||
sr @RETURN, $AXL0
|
||||
|
||||
|
||||
call change_buffer // load add from addr2
|
||||
|
||||
// addr is 0 ? go to zero_samples and exit
|
||||
@@ -785,9 +785,9 @@ get_new_buffer:
|
||||
// jump_load_smp_addr: $IX2:$IX3
|
||||
// load samples from dma, return $ar2 with the addr to get the samples and return using $ar0 to the routine to process 8-16bits Mono/Stereo
|
||||
|
||||
jmp jump_load_smp_addr
|
||||
jmp jump_load_smp_addr
|
||||
|
||||
// set to 0 the current samples
|
||||
// set to 0 the current samples
|
||||
|
||||
zero_samples:
|
||||
|
||||
@@ -796,7 +796,7 @@ zero_samples:
|
||||
jmp out_samp
|
||||
|
||||
mono_8bits:
|
||||
|
||||
|
||||
// 8 bits mono
|
||||
mrr $ACM1, $IX3
|
||||
lrri $ACL0, @$AR2
|
||||
@@ -810,7 +810,7 @@ mono_8bits:
|
||||
mrr $AXH0,$ACL0
|
||||
jmp out_samp
|
||||
|
||||
stereo_8bits:
|
||||
stereo_8bits:
|
||||
|
||||
// 8 bits stereo
|
||||
|
||||
@@ -838,8 +838,8 @@ stereo_16bits:
|
||||
lrri $AXH1, @$AR2
|
||||
lrri $AXH0, @$AR2
|
||||
|
||||
out_samp:
|
||||
|
||||
out_samp:
|
||||
|
||||
// multiply sample x volume
|
||||
|
||||
// LEFT_VOLUME
|
||||
@@ -860,7 +860,7 @@ loop_end:
|
||||
nop
|
||||
|
||||
end_process:
|
||||
|
||||
|
||||
// load the sample address
|
||||
|
||||
clr $ACC0
|
||||
@@ -872,7 +872,7 @@ end_process:
|
||||
|
||||
// set return as "change of buffer"
|
||||
|
||||
lris $AXL0, #0x0004
|
||||
lris $AXL0, #0x0004
|
||||
sr @RETURN, $AXL0
|
||||
|
||||
// change to buffer 2 if it is possible
|
||||
@@ -880,13 +880,13 @@ end_process:
|
||||
call change_buffer
|
||||
|
||||
save_datas_end:
|
||||
|
||||
|
||||
sr @ADDRH_SMP, $IX2
|
||||
sr @ADDRL_SMP, $IX3
|
||||
sr @SMP_R, $AXH0
|
||||
sr @SMP_R, $AXH0
|
||||
sr @SMP_L, $AXH1
|
||||
|
||||
end_main:
|
||||
|
||||
end_main:
|
||||
|
||||
// program DMA to send the CHANNEL DATAS changed
|
||||
|
||||
@@ -909,35 +909,35 @@ end_main:
|
||||
jmp recv_cmd
|
||||
|
||||
change_buffer:
|
||||
|
||||
|
||||
clr $ACC0
|
||||
lr $ACM0, @LEFT_VOLUME2
|
||||
lr $ACL0, @RIGHT_VOLUME2
|
||||
sr @LEFT_VOLUME, $ACM0
|
||||
sr @LEFT_VOLUME, $ACM0
|
||||
sr @RIGHT_VOLUME, $ACL0
|
||||
mrr $IX0, $ACM0
|
||||
mrr $IX0, $ACM0
|
||||
mrr $IX1, $ACL0
|
||||
|
||||
lr $ACM0, @ADDR2EH_SMP
|
||||
lr $ACL0, @ADDR2EL_SMP
|
||||
sr @ADDREH_SMP, $ACM0
|
||||
sr @ADDREH_SMP, $ACM0
|
||||
sr @ADDREL_SMP, $ACL0
|
||||
mrr $r0a, $ACM0
|
||||
mrr $r0b, $ACL0
|
||||
|
||||
lr $ACM0, @ADDR2H_SMP
|
||||
lr $ACL0, @ADDR2L_SMP
|
||||
sr @ADDRH_SMP, $ACM0
|
||||
sr @ADDRH_SMP, $ACM0
|
||||
sr @ADDRL_SMP, $ACL0
|
||||
sr @BACKUPH_SMP, $ACM0
|
||||
sr @BACKUPH_SMP, $ACM0
|
||||
sr @BACKUPL_SMP, $ACL0
|
||||
mrr $IX2, $ACM0
|
||||
mrr $IX3, $ACL0
|
||||
|
||||
|
||||
lr $ACM1, @FLAGSL_SMP
|
||||
andcf $ACM1, #0x4
|
||||
retlz
|
||||
|
||||
|
||||
sr @ADDR2H_SMP, $ACH0
|
||||
sr @ADDR2L_SMP, $ACH0
|
||||
sr @ADDR2EH_SMP, $ACH0
|
||||
@@ -1007,7 +1007,7 @@ jump_load_smp_addr:
|
||||
asr $ACC0, #-1
|
||||
andi $ACM0, #0xf
|
||||
jz jump_load_smp_dma
|
||||
|
||||
|
||||
addi $ACM0, #MEM_SAMP
|
||||
mrr $AR2, $ACM0
|
||||
jmpr $AR3
|
||||
@@ -1024,10 +1024,10 @@ wait_dma2:
|
||||
lrs $ACM0, @DSCR
|
||||
andcf $ACM0, #0x4
|
||||
jlz wait_dma2
|
||||
|
||||
|
||||
lri $AR2, #MEM_SAMP
|
||||
jmpr $AR3
|
||||
|
||||
|
||||
// exception table
|
||||
|
||||
exception0: // RESET
|
||||
@@ -1038,7 +1038,7 @@ exception1: // STACK OVERFLOW
|
||||
|
||||
exception2:
|
||||
rti
|
||||
|
||||
|
||||
exception3:
|
||||
rti
|
||||
|
||||
@@ -1047,21 +1047,21 @@ exception4:
|
||||
|
||||
exception5: // ACCELERATOR ADDRESS OVERFLOW
|
||||
rti
|
||||
|
||||
|
||||
exception6:
|
||||
rti
|
||||
|
||||
exception7:
|
||||
rti
|
||||
|
||||
// routine to read a word of the IROM space
|
||||
// routine to read a word of the IROM space
|
||||
|
||||
rom_dump_word:
|
||||
|
||||
clr $ACC0
|
||||
|
||||
lr $ACM0, @CMBH
|
||||
ori $ACM0, #0x8000
|
||||
ori $ACM0, #0x8000
|
||||
mrr $AR0, $ACM0
|
||||
clr $ACC0
|
||||
ilrr $ACM0, @$AR0
|
||||
@@ -1076,7 +1076,7 @@ polla_loca:
|
||||
clr $ACC0
|
||||
lri $acm0, #0x0
|
||||
andf $acm0,#0x1
|
||||
|
||||
|
||||
sr @DMBH, $sr
|
||||
sr @DMBL, $acm0
|
||||
;si @DIRQ, #0x1 // set the interrupt
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
pathmap replaces path prefixes of source files with a hardcoded value, assisting with keeping output
|
||||
files uniform even if actually built from different locations. The mapped path doesn't really need full
|
||||
drive prefix, but it keeps things human readable. Note the trailing "\" is actually to be escaped by a
|
||||
preceeding "\" in the expanded variable.
|
||||
preceding "\" in the expanded variable.
|
||||
-->
|
||||
<AdditionalOptions>/pathmap:"$(DolphinRootDir)\"=d:\ %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/pathmap:"$(WindowsSdkDir)\"=w:\ %(AdditionalOptions)</AdditionalOptions>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<Lib>
|
||||
<!--
|
||||
Clear the output path so projects referencing this one don't try to drag
|
||||
in a nonexistant .lib file.
|
||||
in a nonexistent .lib file.
|
||||
-->
|
||||
<OutputFile />
|
||||
</Lib>
|
||||
@@ -33,4 +33,4 @@
|
||||
</PropertyGroup>
|
||||
</Target>
|
||||
<!--End .lib hacks-->
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user