Pubblicato un nuovo aggiornamento per ares, l’emulatore multisistema discendente di higan e bsnes si concentra principalmente sull’accuratezza e la conservazione.
Questo nuovo aggiornamento presenta una build di Windows ARM64, mentre il core 32X non viene più contrassegnato come sperimentale, avendo raggiunto il 95% di compatibilità.
Certo sono ancora presenti alcuni piccoli bug sparsi qua e là, ma la maggior parte dei giochi ora può essere eseguita senza particolari problemi.
Come di consueto sono stati apportati miglioramenti significativi anche a molti altri core.
L’emulatore ares attualmente emula ben 27 dispositivi hardware:
- Famicom + Famicom Disk System.
- Super Famicom + Super Game Boy.
- Nintendo 64 (in fase di sviluppo).
- Game Boy + Game Boy Color.
- Game Boy Advance + Game Boy Player.
- SG-1000 + SC-3000.
- Master System + Game Gear.
- Mega Drive + Mega CD.
- PC Engine + PC Engine CD + SuperGrafx.
- MSX + MSX2.
- ColecoVision.
- Neo Geo Pocket + Neo Geo Pocket Color.
- WonderSwan + WonderSwan Color + SwanCrystal + Pocket Challenge V2.
Pixel Accuracy Mode
Allo stato attuale ares contiene due implementazioni di alcuni degli hardware emulati; uno ottimizzato per le prestazioni e un altro ottimizzato per la precisione.
Higan ha sempre utilizzato i profili “accurate”, con ares che ha sempre optato per i profili “performance”; qualsiasi utente che desideri modificare questo sarebbe tenuto a compilare ares dal codice sorgente.
Ora è presente anche una nuova opzione nelle impostazioni dell’emulatore conosciuto come “Pixel Accuracy” che se abilitato andrà ad utilizzare tale modalità all’interno dei core supportati.
Per il 99% dei giochi, i profili veloci predefiniti saranno più che sufficienti, ma abilitare “Pixel Accuracy” consente ai giochi che richiedono effetti di scansione media, come il famigerato “Air Strike Patrol” di funzionare correttamente.
I seguenti sistemi supportano attualmente l’impostazione Pixel Accuracy:
- NEC – PC-Engine / TurboGrafx.
- Nintendo – Super Famicom / SNES.
Changelog
Interfaccia utente
- Debugger: Imposta la profondità della cronologia della traccia per processore. [invertego]
- Debugger: Memorizza gli indirizzi a 64 bit nella cronologia delle tracce. [invertego]
- Debugger: Utilizza un hashset per tenere traccia degli indirizzi visitati. [invertego]
- Spostate le impostazioni del driver audio su una nuova riga, per evitare che nomi di dispositivi di grandi dimensioni trabocchino nel contenitore. [LukeUsher]
- Implementata l’opzione di scelta rapida/menu “Ricarica partita corrente”. [LukeUsher]
- Controller: Associa gli ingressi analogici solo al movimento lontano dal centro. [invertego]
Build System
- Evita la firma del codice quando crei da PR. [rasky]
- Utilizza widnres dall’ambiente di compilazione se definito. [invertego]
- Aggiunto il supporto per Windows AArch64. [invertego]
- Utilizzo di Guard SSE con un pre-processore. [invertego]
- Aggiunte mame RGB utils per tutte le architetture. [invertego]
- Abilitato il debug delle build autofirmate su macOS. [invertego]
- Rimosso libgtksourceview2.0-dev dalle dipendenze. [LukeUsher]
- Reso LTO l’opzione predefinita di nuovo, l’aumento delle prestazioni vale il tempo di costruzione aggiuntivo. [LukeUsher]
- Supporta la compilazione con MSVC/microsoft clang. (richiede ancora GNU make per ora) [invertego]
- Definisci
_WIN32_WINNT
nel makefile piuttosto che nelle intestazioni. [invertego] - Preferito clang su tutte le piattaforme. [invertego]
Nall (libreria standard / runtime)
- Rileva e supporta PowerPC64. [invertego]
- Correzione LTO con PowerPC64. [invertego]
- Recompilatore: semplifica l’uso del carry flag. [invertego]
- Impedisci ad AppKit di gestire le aperture dei file. [LIJI32]
- Recompilatore: implementato bit ruota. [invertego]
- Ricompilatore: implementati turni mascherati. [invertego]
- Utilizza snprintf per evitare avvisi di compilazione. [rasky]
- Dividi le implementazioni in file
.cpp
. [invertego]
Hiro (GUI Framework)
- Memorizza le impostazioni di Windows nella directory dell’applicazione, rendendo ares veramente portatile. [LukeUsher]
Atari 2600
- Corrette le proporzioni dei pixel a 12:7. [LukeUsher]
Bandai WonderSwan
- Correzione della gestione errata del bit della modalità colore. [asiekierka]
- Corretto l’indirizzamento PPU di 1024 riquadri in modalità colore 2bpp. [asiekierka]
- Aggiornati i metodi PPU Planer, Packed, Depth e Grayscale per essere corretti con l’hardware reale. [asiekierka]
- Codice APU ottimizzato per trattarlo correttamente come un chip digitale a 24000 Hz, al contrario di un chip analogico a 3072000 Hz. [asiekierka]
- Corretti i bit di “mezzo volume” del canale 2 dell’APU che venivano ignorati. [asiekierka]
- Valore del filtro passa-basso provvisoriamente ottimizzato in base alla ricerca di GuyPerfect. [asiekierka]
- Implementato uno stub di I/O seriale meno tozzo. Questo emette correttamente interruzioni TX/RX. [asiekierka]
- Aggiunto il supporto per le porte bancarie a 16 bit di Bandai 2003. [asiekierka]
- Aggiunto il supporto stubby per il registro NMI 0xB7, come trovato e documentato da FluBBa nell’emulatore NitroSwan. [asiekierka]
- Separa in modo appropriato le porte I/O in modalità WSC dalla modalità Mono. [asiekierka]
- Corretto il comportamento dei timer PPU HBlank/VBlank quando il valore di ricarica è 1, ma il timer non è abilitato. [asiekierka]
- Corretto il problema con la logica di uscita dell’altoparlante interno dell’APU. [asiekierka]
- Aggiunto il supporto per l’interruttore Pixel Accuracy; aumento significativo delle prestazioni quando la precisione dei pixel è disattivata. [asiekierka]
- Corretto il problema con l’emulazione dell’interruzione della tastiera per adattarsi alle stranezze dell’hardware. [asiekierka]
- Corretto il problema con la gestione della porta base di interrupt su WSC. [asiekierka]
- Aggiunti PPU SCREEN1, SCREEN2 e riquadri alla vista di debug della grafica. [asiekierka]
- Aggiunte porte I/O PPU, APU, cartucce, seriali e SoC alla vista di debug delle proprietà. [asiekierka]
- Esposta la possibilità di utilizzare l’uscita dell’altoparlante interno nell’interfaccia utente. [asiekierka]
ColecoVision
- Corrette le proporzioni dei pixel a 8:7. [PikaSamus]
MSX / MSX2
- Corrette le proporzioni dei pixel a 8:7. [PikaSamus]
Nintendo NES / Famicom
- Miglioramento del rilevamento dei frame MMC5. [byte codificato]
- Migliorata la gestione della RAM MMC5. [byte codificato]
- Corretto il problema con il ram banking su MMC5. [encoded-byte]
- Corretto l’audio di espansione MMC5. [byte codificato]
- Correzione del ripristino errato del registro della linea di scansione MMC5 su NMI. [byte codificato]
- Correzione del rilevamento della linea di scansione MMC5. [byte codificato]
- Incrementate le linee di scansione prima del confronto su MMC5. [encoded-byte]
- Implementato l’audio di espansione namco163. [encoded-byte]
- Potenziata l’uscita audio per essere in linea con altri core. [LukeUsher, byte codificato]
- Unita l’emulazione di APU, cartuccia e CPU in un singolo co-thread; migliora le prestazioni senza alcun impatto sulla precisione. [LukeUsher]
Nintendo SNES / Super Famicom
- Aggiunto Star Fox EX al database del gioco. [DerekTurtleRoe]
Nintendo Game Boy
- Corretta l’emulazione RTC. [invertego]
- Correzione dell’implementazione del mapper MBC1 per le cartucce da 8/16 Mbit. [asiekierka]
Nintendo Game Boy Color
- Corretto il problema con le pallette di oggetti secondari durante l’esecuzione in modalità DMG. [LukeUsher]
Nintendo 64
- Corretti gli errori di precisione a 1 bit in mame RDP. [rasky]
- Emula guardband VI. [rasky]
- Migliorata la generazione di flag ed eccezioni FPU. [rasky]
- Attiva eccezioni FPU anche tramite CTC1. [rasky]
- Implementa flag ed eccezioni FPU per FCVT_x. [rasky]
- Corrett arrotondamenti e flag per le funzioni di conversione. [rasky]
- Corretto il problema con FPU round-to-even usando gli intrinseci. [rasky]
- Aggiunto DCTC1 e DCTFC1. [rasky]
- Ripristina i bit di causa FPU per ogni operazione FPU. [rasky]
- Corretto bandling denormale in FCTV_S_D. [rasky]
- Implementa il flush denormal corretto per ogni modalità di arrotondamento. [rasky]
- Impedisci al compilatore di riordinare il codice in modo errato usando noinline. [invertego]
- Sostituite le funzioni cmath con le funzioni intrinseche. [invertego]
- Migliorate le eccezioni non implementate in caso di underflow. [invertego]
- Rimossa la modifica della modalità round spuria nell’implementazione FPU su aarch64. [rasky]
- Corretti i problemi relativi ai limiti di conversione off-by-one in FPU. [rasky]
- Non cancella le bandiere su FMOV. [rasky]
- Genera eccezioni non implementate invece di eccezioni non valide per le conversioni FPU. [invertego]
- Sostituito lround con round, lrint con rint. [invertego]
- Non cancella i flag FPU su LWC1/LDC1/SWC1/SDC1. [rasky]
- Corretti gli input della levetta analogica su Aarch64. [invertego]
- Aggiunta dell’indirizzo del PC ai registri delle eccezioni FPU. [rasky]
- Implementato il corretto comportamento del bus aperto PI. [rasky]
- Migliorato il comportamento in caso di crash RDP. [rasky]
- Implementato il limite hardware del comando LOAD_BLOCK RDP. [rasky]
- Corretta la confusione dello spazio degli indirizzi a 32 bit / 64 bit. [rasky]
Sega Game Gear
- Corrette le proporzioni dei pixel a 6:5. [PikaSamus]
Sega Master System / Mark III
- Serializza la RAM della cartuccia. [invertego]
Sega Mega Drive / Genesis
- Corretto il problema con il rom banking della cartuccia per ROM fino a 32 MB. [TascoDLX]
- Corretto un problema di build in cui le funzioni del bus non erano integrate come previsto. [LukeUsher]
- Ridotta la sincronizzazione tra i componenti, aumentando le prestazioni senza alcuna perdita osservabile di precisione. [LukeUsher]
- Rifattorizzato VDP per utilizzare i modelli per ridurre i confronti nei cicli interni stretti. [LukeUsher]
Sega 32X
- Correzione PWM fifo. [TascoDLX]
- Implementato DREQ1 e corretto l’IRQ PWM. [TascoDLX]
- Corretto il rendering RLE. [TascoDLX]
Sony PlayStation
- Ridotta la durata del comando di pausa, risolvendo una race condition all’avvio iniziale del gioco. [LukeUsher]
Miglioramenti dei componenti
- Le modifiche a questi componenti non sono specifiche di core/sistemi, ma hanno un impatto su tutti i sistemi che utilizzano il componente aggiornato.
CPU: MOS 6502
- Corretti i flag adc/sbc in modalità decimale. [invertego]
CPU: NEC HuC6280
- Corretti i flag adc/sbc in modalità decimale. [invertego]
CPU: NEC V30MZ
- Non ignora l’operando immediato nelle chiamate AAD/AAM. [asiekierka]
- Corretto il problema con il timing della CPU basso, basato su WSTimingTest. Ci sono ancora alcuni test che non vengono superati, in particolare i salti. [asiekierka]
- Corretta la decodifica del codice operativo IN/OUT nel tracciante della CPU. [asiekierka]
- Corretta l’emulazione del codice operativo non documentato 0xD6 e 0xF7 subop 1. [asiekierka]
Download: Ares v131 [MacOS]
Download: Ares v131 [Windows AMD64]
Download: Ares v131 [Windows ARM64]
Download: Ares v131 [Linux Flatpack – AMD64]
Download: Ares v131 [Linux AUR – Generic]
Download: Source code Ares v131
Fonte: ares-emulator.github.io