Changelog:
Updated web pages and download links for 2.6.6 release.
Fixed memory leak bug where FCEU_LoadGameSave and FCEU_SaveGameSave functions were not closing out their file handles.
fix build errors from rdtsc (fixes #663)
Added feature macro __FCEU_X86_TSC_ENABLE to enable usage of the X86TSC.
Mapper 134 CHR and PRG masks
Mapper 134 fix
Issue #654 fix
Mapper 45 fixes
More mapper 45 fixes
Upgrade appveyor macos build environment to monterey. Also auto buildmacos app with Qt6.
Comment out warning message about debug file not being able to be opened for reading. It is normal for the file to not exist so it seems silly to warn about not being able to open it.
For Qt GUI, added hot keys for certain emulation speed presets. Presets are: 1/4x, 1/2x, Normal 1x, 2x, 4x, 8x, and 16x. These hot keys can be mapped to gamepads using advanced key bindings.
Fix handling of roms with prg size below 16KFix #675
Merge pull request #676 from negativeExponent/masterFix handling of roms with prg size below 16K
Changed Qt Win64 1px fullscreen window border to be a configuration option. Doesn’t seem to be necessary for all users and maybe not at all anymore. We will see if the QOpenGLWidget issue resurfaces with this setting off. Fixes #514
Add support for misc rom area
Add mapper 413 support
Fix 128K CHR-ROM variants for VRC5
For Qt GUI, added initial framework for use of the Qt built-in ECMAScript (javascript based) engine. This scripting capability will allow users to load their own custom UI windows (created using Qt Creator tool) in the GUI. This is intended to serve as a the Qt GUI’s functional replacement for building GUI elements using IUP in LUA scripts. This is a work in progress.
Qt JS engine in work.
Qt JS engine in work.
Build fix for Qt6.
Minor refactor of script memory hook interface so that both lua and js script can coexist nicely. Script engines now register themselves with the CPU module for their functions to be called.
Qt JS script engine interface in work.
Build fix for systems without Qt QML installed.
Added global JS property tree to allow exploring of engine data.
Minor fixes for JS global variable viewer.
Added logic to realtime update js global variable viewer.
Added memory access functions for JS script interface.
Clip Left/Right Sides option now taken into account when using NTSC scaler
Use macro and minor offset adjustment
Added debug script to aid in getting crash callstacks from users.
Added source listing to gdb debug output.
Merge pull request #690 from negativeExponent/fix_ntsc_clipClip Left/Right Sides option now taken into account when using NTSC s
Added memory hooks to JS engine.
Bug fix for issue in new LUA memory hook scheme where the callbacks get unregistered from the x6502 while still running. Fixes #693
Removed const qualifiers to fix Qt build. Different versions of Qt QJSValue don’t allow the call method to called from a const object.
Change linear filter checkbox text to not include OpenGL. This function not specific to OpenGL and works for all supported video drivers.
For Qt GUI, edit frame throttling logic when using turbo mode or really fast emulation speed to not be so wasteful when emulation is paused. Don’t make sense to waste CPU resources spinning on nothing. Fixes #681.
fix indents
Multiple Lua support fixes:- Move call to info_onstop from FCEU_LuaStop to FCEU_LuaOnStop so it will always get called
– Do NOT assume the error message from lua_pcall will always be in stack slot 1, as sometimes it won’t be
– After calling HandleCallbackError ensure L still exists before calling lua_settop
Added nullptr check in the event QStyle factory fails.
JS scripting in work.
Revert bad fix for not terminating script on initial error
Multiple Lua support fixes:- Do not crash when a Lua script calls rom.gethash when no ROM is loaded
– Do NOT assume the error message from lua_pcall will always be in stack slot 1, as sometimes it won’t be
Fix for build break, QJSEngine::setObjectOwnership does not exist inQt5. Only in version 6.
Retriggering checks
Merge pull request #695 from negativeExponent/mapper413Mapper413
For Qt GUI, add video buffer mutex to ensure clean transfer between emulation and GUI threads. Use common FCEU::mutex wrapper for cleaner code.
For Qt GUI, changed onFrameFinished callback to only update video buffer. Don’t do any input processing as this will mess up when running turbo mode. Added a draw timer to SDL video renderer to better align is scheduling with the next vsync.
Added vsync timer logic to Qt OpenGL video driver.
Merge pull request #699 from TheRealQuantam/luafixes2Multiple Lua Implementation Fixes
Added JS script monitoring thread to prevent bad scripts from hangingthe gui.
Finished remaining JS interface functions for JS emu object.
Implemented ROM JS interface object.
Added ppu interface functions to JS engine.
Minor null check fix.
Added emulator save state JS interface.
QT: Fix volume adjustment for APUVolume adjustments for the apu channel has a range of 0-256. With a value of 256, this acts as a bypass (toggle) and skips the computation entirely when set. This fixes issues when the original signal is too low already that passing it through volume controls will attunuate the signal instead and silence it.
The main volume does not behave the same way and 256 is not a toggle, so left it as-is.
@thor2016 feel free to make it better if necessary, maybe a toggle instead of a 256 max value or something.
Merge pull request #706 from negativeExponent/patch-1QT: Fix volume adjustment for APU
Added a QJSEngine wrapper class to maintain link to script instance and dialog window with new script objects.
JS logging improvements.
Added ability to pass command line arguments to JS scripts.
Added JS joypad object functionality.
JS joypad API improvements.
Added joypad button override functionality to JS API.
Added initial framework for movie JS API. Still TODO implement rest of movie functions.
Added more movie JS interface functions. Hooked up lua joypad.getimmediate functionality for Qt GUI.
Added movie js function remaps
Fix timestamp arm64Fix timestamp arm64
Added JS log file functionality.
Changed JS log file save function so that it doesn’t truncate the current temp file.
Merge pull request #708 from andyvand/masterFix timestamp arm64
Fix build for newer targetsFix build
Merge pull request #1 from TASEmulators/masterAdd improvements
Update CMakeLists.txt
Include missing headers to fix build.
Added initial framework for a JS File object.
Minor JS File object fixes.
Merge pull request #2 from TASEmulators/masterImprovements
Change toUtf8() to toLocal8Bit()Change strings
Remove .orig fileRemove left overs from patch
Fix Linux buildFix Linux build
Fix LinuxFix Linux build
Fix Linux buildFix Linux build
Fix Linux buildFix Linux build
For Qt GUI, poll SDL events immediately after initializing the joystick subsystem to process all input device add events. Added gamepad init logging.
Merge pull request #3 from TASEmulators/masterFor Qt GUI, poll SDL events immediately after initializing the joysti
Added option on how to handle new gamepad device detection. Can now choose to do nothing, prompt user, or auto reconfigure of button mappings when a new device is detected.
Merge pull request #709 from andyvand/masterFix strings
Added more functions to JS File object.
Added initial framework for netplay on Qt GUI. Still much TODO here.
More Qt netplay updates.
Minor config improvements. Modified Qt recent ROM menu to drop file entries that no longer exist on disk.
Added a clear recent ROM list menu item to Qt GUI.
NetPlay config and GUI improvements.
Added global module import function to Qt GUI JS engine.
Trace logging optimizations and bug fixes
Dummy commit to re-validate PR
Merge pull request #714 from TheRealQuantam/tracefix2Trace logging optimizations and bug fixes
Merge pull request #686 from negativeExponent/vrc5_128kFix 128K CHR-ROM variants for VRC5
Resolved a couple gcc compiler warnings in trace logger.
Partial cleanup of sprintf usage in favor of snprintf. This is to resolve deprecation warnings on Mac OSX
More cleanup of sprintf usage in favor of snprintf. This is to resolve deprecation warnings on Mac OSX
Resolved vsprintf deprecation compiler warning, swap out for vsnprintf
Non-SDL/Qt Windows optimizations
Merge pull request #718 from TheRealQuantam/tracefix4Non-SDL/Qt Windows Trace Logging Optimizations
More cleanup of sprintf usage in favor of snprintf. This is to resolve deprecation warnings on Mac OSX
Run cppcheck static analyzer against code base. Fixed a few warnings.
Compile fix for
Build fix for const qualifier not being respected.
Help pages build fixes for Qt6.
Build fix for Qt win platforms when UNICODE defaults to wide chars.
QHelp build for Mac OSX
Another win64 Qt6 build fix
More attempted to fix Qt6 win build.
Put win64 auto build back to Qt5 until the Qt6 build issue can be solved.
Added sync checking and network byte ordering code for Qt net play.
Added custom string class that mirrors the C++ std::string API but also allows for fixed size buffers on the stack. This new class also has various C style functions (like sprintf) built into it.
Added client pause flag to status message for net play.
Added a simple ping message to Qt netplay in an effort to measure round trip message delay.
Added ROM loaded and NES reset signals to allow for net play to reconfigure accordingly during those events.
Added framework for a net play host status dialog window.
Added NetPlay server force resync and drop player UI functionality.
For NetPlay, added ability for client to request a ROM to load.
Added netplay client frame throttling functionality to keep it in step with server.
Update StringBuilder.hFix nullptr_t to std::nullptr_t
Merge pull request #721 from vampirecat35/masterUpdate StringBuilder.h
For Qt GUI, changed instruction tracing to be enabled/disabled by registering callback functions. This increases efficiency when tracing is disabled.
For Qt GUI, added netplay client state load request functionality.
Qt netplay host game UI dialog improvements.
Added on state loaded callback function to core so that driver code can be notified of a new state being loaded. In Qt driver, emit a signal on state loads that objects can connect to. For a resync of all netplay clients when server detects a new state load.
Added app version check between netplay host and clients to ensure interface compatibility.
unrom512.cpp: Expand support for PRG ROM size upto 4Mat least 1 cart in Mapper30 has 2MB. current implementation only allows carts of upto 512K
Added netplay ROM comparison logic.
Build fix for constexpr vars that conflicted with some win macros.
Netplay modified data read code to allow smaller buffered data to arrive in pieces rather than waiting for full data set.
Increased netplay tcp OS level send/receive buffer sizes.
Set low delay tcp option for netplay.
Reduce netplay max tcp transmission size to 8k for ROM transfers.
Bug fix for Qt win64 netplay, make sure rom files are opened in binary mode.
Added ROM unload handling logic for netplay.
Added framework for Qt netplay client status dialog.
Qt netplay fixes for processing input packet data. Don’t attempt spawn dialog windows when in read loop, it will cause event loop re-entrancy issues.
Fix Path Traversal in Netplay server
Merge pull request #728 from liyansong2018/masterFix Path Traversal #727 in Netplay server
Merge pull request #726 from negativeExponent/patch-1unrom512.cpp: Expand support for PRG ROM size upto 4M
For Qt netplay, changed client message dialogs to be non-blocking. This prevents re-entrant event loops.
Minor cleanup of netplay main menu.
Netplay sync state fixes.
Added logic to allow netplay host to control pause state of clients.
Added netplay debug mode for interface debug logging.
For Qt Netplay, added code to sync cheats between server and clients.
Fix code so that FCEUGI fully constructs properly and is not clobbered after the construction by a memset. Also, some minor code cleanup in related areas.
Added more netplay status data to host status dialog.
“(z),Y” addressing incorrectly shown as “(z,Y)” in debugger
Remember that Qt and Win versions have different disassembly code
Merge pull request #730 from TheRealQuantam/indy-fix”(z),Y” addressing incorrectly shown as “(z,Y)” in debugger
For Qt GUI, create a temp directory per every boot of application that can be used to store temporary files for things such as netplay roms. This folder is deleted at application exit.
Build fix.
For Qt GUI, store archive file index so that a hard reload knows howto refind the ROM inside the archive. For netplay, don’t send entire zip archives. Instead just send the single extracted ROM of interest.
Updated client netplay rom requests to only send extracted archive files as well.
Make X24C02 only enter read/write state if I2C address matches; fixesSD Gundam Gaiden 2
For Qt netplay, reset client frame rate adjustment to normal on disconnect.
Changed Qt Avi recording to use atomic buffer indices to ensure boththreads are aware of changes when they happen.
Take NES 2.0 header WRAM size into account for MMC3
Fix Linux build
Merge pull request #735 from awjackson/fixbuildFix Linux build
Minor gcc/clang compiler warning fix.
Replace strncpy usage in favor of Strlcpy to get rid of compiler warnings.
Fix for gcc misleading indentation in lua-engine.cpp.
Merge pull request #732 from awjackson/fix_731Make X24C02 only enter read/write state if I2C address matches; fixes #731
Fix attributionThis change de-duplicates Xodnizel’s identity in some “About” windows.
Closes #753
Fix PRG writes in CD LoggerThis code was added for FDS RAM, but it breaks PRG writes with normal
cartridge-based memory controllers.
The bug inappropriately resets (clears) the access mode bits previously
recorded when an MMIO register is written in PRG address space. For
instance, if an instruction is executed at $8000 and then some code
later writes to $8000, the instruction execution would have been
forgotten.
Fix “OVERFLOW” byte not being shown at address $FFFF.
enabled taseditor lua functions for QT
Do not treat jump destinations as data accessesThe two JMP instructions have address modes that imply a data access
occurs. All branch instructions and JSR have `optype` 0, so they don’t
have this problem.
MMC5: Fix initial values for chr banks and nametablesAt least 1 game expect chr bank and nametables to be initialized at zero (fix Deathloop 256)
Add mappers 451 and 471As requested.
Fix #761
chore: update AviRecord to comply with updated x265 APISome patch ref: https://code.videolan.org/videolan/vlc/-/merge_requests/6167
upstream commit: https://bitbucket.org/multicoreware/x265_git/commits/c69c113960834400545bc4bce2830ff51dcb86b3
Signed-off-by: Rui Chen
Merge pull request #766 from chenrui333/fix-x265-4.0chore: update AviRecord to comply with updated x265 API
Merge pull request #758 from silverslither/masterEnable TAS Editor Lua functions on QT
Merge pull request #767 from negativeExponent/add_m451_m471Add mappers 451 and 471
Merge pull request #765 from negativeExponent/patch-2MMC5: Fix initial values for chr banks and nametables
Merge pull request #754 from parasyte/fix/attributionFix attribution
Merge pull request #756 from parasyte/fix/debugger-overflowFix “OVERFLOW” byte not being shown at address $FFFF.
Merge pull request #755 from parasyte/fix/cdlogger-invalidationFix PRG reads and writes in CD Logger
Added tas editor lua null checks for Qt GUI.
Updated MacOSX auto build environment to ventura OS.
Use proper symbol name checking for arm64The proper symbol for checking for 64-bit ARM is __aarch64__
Merge pull request #772 from brad0/arm64_buildUse proper symbol name checking for arm64
chore: scope the patch for x265 4.0 buildupstream has reverted the x265_encoder_encode api change in https://bitbucket.org/multicoreware/x265_git/commits/78e5b703b186fe184bf91bb37df82f64059b3f61 per 4.1 release, thus the patch is no longer needed, hence reverting for now. (previous 4.0 API change commit, https://bitbucket.org/multicoreware/x265_git/commits/c69c113960834400545bc4bce2830ff51dcb86b3)
Signed-off-by: Rui Chen
Merge pull request #774 from chenrui333/revert-766-fix-x265-4.0chore: scope the patch for x265 4.0 build
Implement mapper 92 correctly (it’s not an address latching mapper but a mapper 72 variant)
Mapper fixes: Fix 97, remove deprecated 101 and 151, add names to various mappers
Merge pull request #778 from awjackson/mapper97More mapper fixes
Merge pull request #776 from awjackson/mapper92Reimplement mapper 92 correctly
Atualizações:
Páginas da web e links de download atualizados para o lançamento 2.6.6.
Corrigido o bug de vazamento de memória onde as funções FCEU_LoadGameSave e FCEU_SaveGameSave não estavam fechando seus manipuladores de arquivo.
Correção de erros de compilação do rdtsc (corrige #663).
Adicionada a macro de recurso __FCEU_X86_TSC_ENABLE para habilitar o uso do X86TSC.
Máscaras CHR e PRG do Mapeador 134.
Correção do Mapeador 134.
Correção do problema #654.
Correções no Mapeador 45.
Mais correções no Mapeador 45.
Atualização do ambiente de construção do AppVeyor para macOS Monterey. Também adicionado o build automático do macOS com Qt6.
Comentado a mensagem de aviso sobre o arquivo de depuração não poder ser aberto para leitura. É normal que o arquivo não exista, então parece um aviso desnecessário.
Para a interface Qt GUI, foram adicionadas teclas de atalho para certos predefinições de velocidade de emulação. As predefinições são: 1/4x, 1/2x, Normal 1x, 2x, 4x, 8x, e 16x. Essas teclas podem ser mapeadas para gamepads usando vinculações de teclas avançadas.
Correção do manuseio de ROMs com tamanho PRG abaixo de 16K (corrige #675).
Mesclado o pull request #676 de negativeExponent/master para corrigir o manuseio de ROMs com tamanho PRG abaixo de 16K.
Mudança na borda de janela de tela cheia de 1px do Qt Win64 para ser uma opção de configuração. Não parece ser necessário para todos os usuários e talvez nem mais, vamos ver se o problema do QOpenGLWidget ressurge com essa configuração desativada. Corrige #514.
Adicionado suporte para área de ROMs diversas.
Adicionado suporte para o mapeador 413.
Correção das variantes de ROM CHR de 128K para VRC5.
Para a interface Qt GUI, foi adicionado o framework inicial para o uso do motor ECMAScript embutido (baseado em JavaScript). Essa capacidade de script permitirá que os usuários carreguem suas próprias janelas personalizadas (criados com a ferramenta Qt Creator) na interface. Isso serve como um substituto funcional para a criação de elementos de interface usando IUP em scripts LUA. Esse recurso está em andamento.
Motor JS do Qt em andamento.
Correção na construção para o Qt6.
Refatoração menor da interface de hook de memória do script para que tanto os scripts Lua quanto JS possam coexistir de maneira eficiente. Agora, os motores de script se registram no módulo CPU para que suas funções sejam chamadas.
Interface do motor de script JS do Qt em andamento.
Correção de construção para sistemas sem Qt QML instalado.
Adicionada a propriedade global de árvore JS para explorar os dados do motor.
Correções menores para o visualizador de variáveis globais JS.
Adicionada lógica para atualizar em tempo real o visualizador de variáveis globais JS.
Adicionadas funções de acesso à memória para a interface de script JS.
A opção de “Clip Left/Right Sides” agora é considerada ao usar o escalador NTSC.
Usada macro e ajuste menor de deslocamento.
Adicionado script de depuração para ajudar a obter pilhas de chamadas de crash dos usuários.
Adicionada listagem de código-fonte na saída de depuração do gdb.
Mesclado o pull request #690 de negativeExponent/fix_ntsc_clip.
Adicionadas hooks de memória para o motor JS.
Correção do bug na nova implementação do hook de memória LUA onde os callbacks são desregistrados do x6502 enquanto ainda estão em execução. Corrige #693.
Removidos os qualificadores de const para corrigir a construção do Qt. Diferentes versões do QJSValue do Qt não permitem que o método call seja chamado de um objeto constante.
Alterada a legenda da caixa de seleção de filtro linear para não incluir OpenGL. Essa função não é específica do OpenGL e funciona para todos os drivers de vídeo suportados.
Para a interface Qt GUI, editada a lógica de limitação de quadro ao usar o modo turbo ou velocidades muito rápidas de emulação para não desperdiçar recursos de CPU quando a emulação estiver pausada. Não faz sentido desperdiçar recursos de CPU girando em nada. Corrige #681.
Correção de indentação.
Correções múltiplas no suporte a Lua:
Movido o call para info_onstop de FCEU_LuaStop para FCEU_LuaOnStop para que ele sempre seja chamado.
NÃO assumir que a mensagem de erro de lua_pcall estará sempre na posição 1 da pilha, pois às vezes ela não estará.
Após chamar HandleCallbackError, garantir que L ainda exista antes de chamar lua_settop.
Adicionada verificação de nullptr no caso de falha da fábrica de estilo QStyle.
Script JS em andamento.
Revertida correção ruim para não terminar o script no erro inicial.
Correções múltiplas no suporte a Lua:
Não travar quando um script Lua chama rom.gethash sem ROM carregada.
NÃO assumir que a mensagem de erro de lua_pcall estará sempre na posição 1 da pilha, pois às vezes ela não estará.
Correção para quebra de compilação, QJSEngine::setObjectOwnership não existe no Qt5. Só na versão 6.
Reexecutando verificações.
Mesclado o pull request #695 de negativeExponent/mapper413.
Para a interface Qt GUI, adicionado mutex de buffer de vídeo para garantir transferência limpa entre os threads de emulação e GUI. Usado o wrapper comum FCEU::mutex para um código mais limpo.
Para a interface Qt GUI, alterado o callback onFrameFinished para atualizar apenas o buffer de vídeo. Não deve fazer o processamento de entrada, pois isso bagunça ao rodar em modo turbo. Adicionado um temporizador de desenho para o renderizador de vídeo SDL para alinhar melhor o agendamento com o próximo VSync.
Adicionada lógica de temporizador de VSync no driver de vídeo OpenGL do Qt.
Mesclado o pull request #699 de TheRealQuantam/luafixes2.
Adicionada thread de monitoramento de script JS para evitar que scripts ruins travem a interface.
Finalizadas as funções de interface do emulador JS.
Implementado objeto de interface ROM JS.
Adicionadas funções de interface PPU para o motor JS.
Correção menor de verificação de nullptr.
Adicionado interface de estado de salvamento do emulador JS.
QT: Correção do ajuste de volume para APU. O ajuste de volume para o canal APU tem um intervalo de 0-256. Com um valor de 256, isso funciona como um bypass (alternância) e pula a computação completamente quando definido. Isso resolve problemas quando o sinal original já é muito baixo, fazendo com que passá-lo pelo controle de volume o atenuasse e silenciasse.
Ajustes no volume principal não seguem o mesmo comportamento, então 256 não é um alternador, por isso foi mantido como está.
@thor2016, sinta-se à vontade para melhorar, se necessário, talvez um alternador em vez de um valor máximo de 256 ou algo assim.
Mesclado o pull request #706 de negativeExponent/patch-1.
Adicionada classe wrapper QJSEngine para manter o link com a instância de script e a janela de diálogo com novos objetos de script.
Melhorias no log de JS.
Adicionada capacidade de passar argumentos de linha de comando para scripts JS.
Adicionada funcionalidade de objeto JS joypad.
Melhorias na API JS joypad.
Adicionada funcionalidade de substituição de botão de joypad na API JS.
Adicionado framework inicial para API de filmes JS. Falta implementar o restante das funções de filmes.
Adicionadas mais funções de interface de filmes JS. Conectado a funcionalidade lua joypad.getimmediate para a interface Qt GUI.
Funções de filme JS remapeadas.
Correção de carimbo de data/hora arm64.
Adicionada funcionalidade de log de arquivo JS.
Mudada a função de salvar log de arquivo JS para não truncar o arquivo temporário atual.
Mesclado o pull request #708 de andyvand/master.
Correção de build para alvos mais recentes.
Mesclado o pull request #1 de TASEmulators/master.
Atualizado CMakeLists.txt.
Incluídos cabeçalhos ausentes para corrigir o build.
Adicionado framework inicial para objeto de arquivo JS.
Correções menores no objeto de arquivo JS.
Mesclado o pull request #2 de TASEmulators/master.
Mudada a função toUtf8() para toLocal8Bit().
Removido arquivo .orig.
Corrigido o build no Linux.
Correções para construção no Linux.
Para a interface Qt GUI, realizada sondagem imediata de eventos SDL após a inicialização do subsistema de joystick para processar todos os eventos de adição de dispositivo de entrada. Adicionado log de inicialização de gamepad.
Mesclado o pull request #3 de TASEmulators/master.
Adicionada opção de como lidar com a detecção de novos dispositivos de gamepad. Agora é possível escolher fazer nada, solicitar ao usuário ou reconfigurar automaticamente os mapeamentos de botões quando um novo dispositivo for detectado.
Mesclado o pull request #709 de andyvand/master.
Adicionados mais funções para o objeto de arquivo JS.
Adicionado framework inicial para NetPlay na interface Qt GUI. Ainda há muito a ser feito.
Mais atualizações no NetPlay para Qt.
Melhorias menores de configuração. Menu de ROMs recentes no Qt modificado para descartar entradas de arquivos que não existem mais no disco.
Adicionado item de menu para limpar a lista de ROMs recentes na interface Qt GUI.
Melhorias na configuração e interface do NetPlay.
Adicionada função global de importação de módulo para o motor JS da interface Qt GUI.
Otimizações e correções no log de rastreamento.
Commit dummy para revalidar PR.
Mesclado o pull request #714 de TheRealQuantam/tracefix2.
Mais correções nos mapeadores. Fixado o mapeador 97, removido o mapeador 101 e 151 obsoletos e adicionados nomes aos mapeadores.
Mesclado o pull request #718 de TheRealQuantam/tracefix4.
Mais limpeza do uso de sprintf em favor de snprintf. Isso resolve avisos de descontinuação no MacOSX.
Mais correções de construção e otimizações específicas de plataforma, incluindo para Windows, Linux e macOS.
Implementação do mapeador 92 corretamente (não é um mapeador de latch de endereço, mas uma variante do mapeador 72).
Correções em vários mapeadores.
Mesclado o pull request #778 de awjackson/mapper97.
Comentários