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
Atualizações:
Corrigido o erro de vazamento de memória onde as funções FCEU_LoadGameSave e FCEU_SaveGameSave não estavam fechando seus manipuladores de arquivos corretamente.
Corrigidos erros de compilação relacionados ao rdtsc (resolve #663).
Adicionada a macro de recurso __FCEU_X86_TSC_ENABLE para habilitar o uso do X86TSC.
Máscaras de CHR e PRG para o Mapper 134.
Correções para o Mapper 134.
Correção para o problema #654.
Correções adicionais para o Mapper 45.
Atualização do ambiente de construção do AppVeyor para macOS Monterey e compilação automática do app para macOS com Qt6.
Comentada a mensagem de aviso sobre o arquivo de depuração não poder ser aberto para leitura, pois é normal o arquivo não existir, tornando desnecessário o aviso.
Para a interface Qt GUI, adicionadas teclas de atalho para determinados presets de velocidade de emulação. Os presets são: 1/4x, 1/2x, Normal 1x, 2x, 4x, 8x e 16x. Essas teclas de atalho podem ser mapeadas para gamepads usando mapeamentos avançados de teclas.
Correção no tratamento de ROMs com tamanho PRG abaixo de 16K (resolve #675).
Corrigido erro relacionado ao tratamento de ROMs com tamanho PRG abaixo de 16K (Merge do pull request #676 de negativeExponent).
Alterado o borda de janela fullscreen de 1px para uma opção de configuração para Qt Win64, pois não parece ser necessário para todos os usuários e talvez nem mesmo para todos os casos. O objetivo é ver se o problema com QOpenGLWidget ressurge com essa configuração desativada (resolve #514).
Adicionada a capacidade de suportar áreas ROMs diversas.
Adicionado suporte ao Mapper 413.
Correção para variantes de CHR-ROM de 128K para VRC5.
Para a interface Qt GUI, foi adicionado o framework inicial para usar o motor ECMAScript (baseado em JavaScript) integrado ao Qt. Isso permitirá aos usuários carregar suas próprias janelas de interface personalizadas (criadas com a ferramenta Qt Creator) na GUI. Esta é uma funcionalidade em andamento, destinada a substituir a criação de elementos de interface usando IUP em scripts LUA.
O motor Qt JS está em desenvolvimento.
Corrigido problema de construção no Qt6.
Refatoração minoritária na interface do hook de memória do script para garantir que tanto os scripts LUA quanto JS coexistam adequadamente. Agora, os motores de script se registram no módulo CPU para suas funções serem chamadas.
Interface do motor Qt JS ainda em desenvolvimento.
Correção de compilação para sistemas que não possuem o Qt QML instalado.
Adicionada uma árvore de propriedades JS global para permitir a exploração dos dados do motor.
Melhorias no visualizador de variáveis globais JS.
Adicionada lógica para atualizar em tempo real o visualizador de variáveis globais JS.
Funções de acesso à memória para a interface de script JS.
A opção de clipe dos lados esquerdo/direito agora é levada em conta ao usar o escalador NTSC.
Ajuste de pequeno deslocamento usando macro e ajuste.
Adicionado script de depuração para ajudar a obter pilhas de chamadas de falhas de usuários.
Adicionada listagem de código-fonte na saída de depuração do gdb.
Para a interface Qt GUI, foi adicionada uma trava de buffer de vídeo para garantir uma transferência limpa entre os threads de emulação e da GUI. Utiliza o wrapper FCEU::mutex para um código mais limpo.
Mudanças na lógica do temporizador de quadro para melhor alinhamento com o próximo vsync na interface de vídeo OpenGL para Qt.
Corrigido o ajuste de volume do APU na interface Qt: os ajustes de volume para o canal APU agora têm um intervalo de 0 a 256, sendo 256 um bypass (desliga o cálculo), o que resolve problemas quando o sinal original é muito baixo.
Adicionada uma classe wrapper QJSEngine para manter o link para o script e a janela de diálogo com os novos objetos de script.
Melhorias no registro de logs do JS.
Adicionada a capacidade de passar argumentos de linha de comando para os scripts JS.
Adicionada funcionalidade para o objeto JS joypad.
Melhorias na API JS para o joypad.
Adicionada funcionalidade de substituição de botões do joypad na API JS.
Implementação inicial da API de filmes em JS. Funcionalidades adicionais estão por vir.
Mais funções de interface de filme em JS. Funcionalidade de remapeamento de funções de filme no JS.
Correção de timestamp para arm64.
Adicionada funcionalidade de arquivo JS de log.
Modificada a função de salvar arquivo de log JS para evitar truncamento do arquivo temporário atual.
Correção para o build para alvos mais recentes.
Removidos os arquivos .orig e outros resíduos de patch.
Adicionada opção para como lidar com a detecção de novos dispositivos de gamepad na interface Qt GUI: agora é possível escolher entre não fazer nada, solicitar ao usuário ou reconfigurar automaticamente os mapeamentos de botões quando um novo dispositivo for detectado.
Melhorias na interface Qt NetPlay, incluindo a adição de uma lógica para solicitar ROMs do cliente.
Aprimoramentos de interface e status para o NetPlay.
Correção de falhas e aumento de buffers para transmissão de dados no NetPlay.
Implementação de sincronização de cheats entre servidor e clientes no NetPlay.
Melhorias na interface de depuração do NetPlay.
Melhorias na construção e na execução do NetPlay em Qt, incluindo a adição de código para lidar com ROMs extraídas de arquivos compactados sem enviá-los como arquivos zip completos.
Comentários