{"id":20478708,"url":"https://github.com/tasemulators/mednafen","last_synced_at":"2025-04-13T13:16:00.738Z","repository":{"id":39656856,"uuid":"266822226","full_name":"TASEmulators/mednafen","owner":"TASEmulators","description":"a manual copy of mednafen code, because mednafen is too cool for git","archived":false,"fork":false,"pushed_at":"2024-11-15T03:36:55.000Z","size":6972,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-13T13:15:44.111Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TASEmulators.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-25T16:02:06.000Z","updated_at":"2025-03-30T00:46:53.000Z","dependencies_parsed_at":"2024-04-27T03:32:48.314Z","dependency_job_id":null,"html_url":"https://github.com/TASEmulators/mednafen","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TASEmulators%2Fmednafen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TASEmulators%2Fmednafen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TASEmulators%2Fmednafen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TASEmulators%2Fmednafen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TASEmulators","download_url":"https://codeload.github.com/TASEmulators/mednafen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248717238,"owners_count":21150389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T15:38:46.103Z","updated_at":"2025-04-13T13:16:00.712Z","avatar_url":"https://github.com/TASEmulators.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"------------------\nCompilation Notes:\n------------------\n\tgcc or LLVM clang is required for compiling Mednafen.  Intel's C compiler may work, but is untested.\n\tProbably doesn't need to be said, but the compilers optionally specified via CC and CXX *must* be the same version.\n\n\tclang: 3.5.0 or newer is required, though gcc 4.9.x is preferable for performance reasons.\n\n\tgcc: 4.8(4.8.4+), or 4.9(4.9.2+) or newer is required.  gcc 4.9 is recommended; gcc 5.x and gcc 6.x tend to produce\n\tslower executables, at least with Mednafen on x86_64.\n\n\tReportedly, passing:\t--build=x86_64-apple-darwin`uname -r`\n\tto the configure script is necessary for building on Mac OS X to work properly.\n\n\tCompiling at -O3 or higher, or with other custom optimization flags, is discouraged.\n\n\n---------------------------------------------\nSome notes(and reminders) on the source code:\n---------------------------------------------\n\tCheck \"mednafen/src/types.h\" for standard C and C++ library header includes, and avoid #include'ing the same files redundantly elsewhere.\n\n\tAvoid %= in save state load variable sanitizing code unless the variable is unsigned.\n\n\tmalloc(), realloc(), calloc()'ing 0 bytes of memory may return a NULL pointer.\n\n\tmemcpy()/memmove()/etc. with NULL pointers is undefined and bad even when length is 0.\n\n\tCareful to not do something like: void somefunc(int something[16]); [...] sizeof(something)\n\n\tTry to avoid writing new code that violates strict overflow(even though we compile with -fwrapv), especially be mindful\n\tof stuff like what's described at http://kqueue.org/blog/2013/09/17/cltq/\n\n\tOrder of operations != Operator precedence.  Remember sequence point rules, and don't do stuff like:\n\t\tvalue = FuncWithSideEffects() | (FuncWithSideEffects() \u003c\u003c 8);\t// BAD BAD\n\tSee: http://en.cppreference.com/w/cpp/language/eval_order\n\n\tAvoid writing new code that shifts left signed integers or negative values to avoid technically undefined behavior; use\n\tugly typecasting, or multiply by powers of 2 instead(remotely modern compilers can optimize it to a shift internally).\n\n\tVanishing temporaries: https://gcc.gnu.org/onlinedocs/gcc/Temporaries.html#Temporaries\n\n\tDo not place a period before the field width for \"s\" and \"[\" conversion specifiers in *scanf() format strings; perhaps a bad\n\thabit picked up long ago from working with a buggy libc or trio?\n\n\tAvoid compiling different C++ files with different compiler flags in regards to instruction set used(like -mmmx, -msse, -mfpmath, -march),\n\tor else there may be (template-)function ODR violations that could cause compatibility problems.\n\n\tGPLv3-incompatible code:\n\t\tWonderSwan emulation code from Cygne.\n\t\tQuickLZ(old version used)\n\n\tDon't do greater-than and less-than comparisons between pointers unless they're pointers to members of the same array/struct/etc.\n\n\tAvoid using a pointer into a nested array of a multidimensional array to access elements of the multidimensional array that lie outside of that specific\n\tnested array, as such behavior is probably undefined.\n\n\tPointer provenance, DR260.\n\n\tDon't create temporarily-invalid pointers via careless pointer arithmetic; restructure the expressions if possible, or utilize uintptr_t instead.\n\n\tx86_64 inline assembly, stack red zone.\n\n\thttps://gcc.gnu.org/onlinedocs/gccint/Memory-model.html#Memory-model\n\n\tDon't use memcmp() on class/struct objects unless they're initialized with memset() and copied around with only memcpy()(or equivalent).\n\n\tDon't rely on malloc(), realloc(), and calloc() setting errno to ENOMEM on a memory allocation error.\n\n\n---------------------------------------------\nCode contributions:\n---------------------------------------------\n\tTo keep things simpler for commercial licensing, any patches or new code offered for emulation modules \"apple2\", \"psx\", \"snes_faust\", and \"ss\",\n\talong with contributions to core Mednafen functionality with code that is not self-contained(e.g. support for a new CD image format), will be ignored.\n\tDistributing a separate patch set or an outright fork(with branding that clearly conveys the forkiness) is recommended.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftasemulators%2Fmednafen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftasemulators%2Fmednafen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftasemulators%2Fmednafen/lists"}