GBA cartridge compatibility greatly improved; several commercial cartridges now run normally
Several commercial hand-written cartridges previously froze when entering a game, failed to display any picture, or crashed the emulator outright. This release identified and fixed three root causes: unimplemented BIOS system calls could leave the CPU spinning forever inside a BIOS routine; two illegal values in sprite attributes could crash the rendering thread, which meant an outright crash in release builds; and the save-chip capacity model was incomplete, so EEPROM cartridges always produced a save file of the wrong size. These are now handled by returning normally and recording the call number, by treating the sprite as not displayed exactly as real hardware does, and by honouring the chip's actual capacity. Pokémon FireRed has been confirmed working by hand; it previously could not load any picture at all. Three further cartridges no longer reproduce the freeze or the black screen under automated checks, but their on-screen appearance still awaits final manual confirmation. GBA overall remains an Alpha feature: this release targets the problem of cartridges not running at all, and does not claim that picture and sound are already fully faithful to real hardware.
FC-side fixes for cartridge loading and mapper registration, removing load failures and grey screens
The iNES loader used to reject outright any cartridge whose main ROM size was not a power of two — a fairly large group of homebrew and modified cartridges, which the user only ever saw as an unknown ROM file format error. Loading now splits the file by its real byte count and only pads when the memory mapping is established. Mappers 191, 199 and 198 had implementations but were never registered in the mapper table, so they necessarily produced a grey screen; registration has been added, and 199 and 198 now run their own initialisation routines, since their extension registers and work-RAM layout differ from the generic one. The lookup key and the write-back logic of the ROM correction table had drifted, which left all 251 corrections ineffective; this is now bit-for-bit identical to upstream FCEUX 2.6.6 / 2.7.0. Measured against upstream, 8 of 9 NES cartridges behave identically, and the Taiwanese cartridge 吞食天地2 now reaches the same title screen as upstream, where it previously showed nothing but a grey screen.
More BIOS system calls implemented, and the test gates upgraded to reproducible and provable
The three diff-unfilter calls that commercial cartridges rely on to load delta-compressed data (system call numbers 16 / 17 / 18) were not implemented at all, so the data the cartridge received was wrong; all three are now implemented field by field against the authoritative GBATEK specification. The same batch adds the sound bias, MIDI pitch conversion, multiboot and custom halt calls, together with the forced blank write that the RegisterRamReset call performs as GBATEK specifies, and fixes the page flipping of mode 5 bitmaps, which previously always showed page 0 only. The test gates were upgraded in step: on the GBA side 14 minimal reproducible fixtures and 3 permanent guards were added, and the red reproducers are now cleared; the F11QA matrix covers 122 cases and treats only the absence of regressions as a red line; every new assertion is mutation-tested by deliberately breaking the implementation to confirm that the matching assertion really fails, which in this round uncovered a class of toothless gates whose expected values were so small that both readings passed.
GBA 卡带兼容性大幅改善,多张商用卡片已可正常运行
此前多张商用手写卡带在模拟器上表现为进入游戏后卡死、画面无法加载或直接闪退退出。本版定位并修复了三类根因:未实现的 BIOS 系统调用会使 CPU 在 BIOS 例程中永久自旋;精灵属性中的两个非法取值会触发渲染线程崩溃,发布版因此直接闪退;存档芯片容量模型不完整,EEPROM 卡片的存档文件尺寸长期错误。三处分别改为调用后正常返回并记录调用号、按真机语义将精灵视为不显示、以及按芯片实际容量读写。《宝可梦 火红》经实测已确认兼容,此前完全无法加载任何画面;另有三张卡片的机器判据已不再复现卡死与黑屏,画面观感仍待人工最终确认。GBA 整体仍处于 Alpha 阶段,本版目标是解决无法运行的问题,不代表画面与音效已完全对齐真机。
FC 侧修复卡片装载与映射问题,消除无法加载与灰屏
iNES 装载器此前会直接拒绝主 ROM 容量非 2 的幂的卡片(相当一部分自制卡与改版卡属于此类,用户侧仅显示为未知 ROM 文件格式),现已改为按文件实际字节切分、仅在建立内存映射时补齐;mapper 191、199、198 虽已有实现却未注册进映射表,必然导致灰屏,现已补齐注册,并让 199 与 198 各跑自己的初始化例程(二者的扩展寄存器与工作内存布局不同于通用例程);ROM 修正表的查表键与写回逻辑存在偏差,致使 251 条修正长期整体失效,现已与上游 FCEUX 2.6.6 / 2.7.0 逐位一致。实测 9 张 NES 卡片中有 8 张与上游行为一致,《吞食天地2》现已运行出与上游一致的画面,此前为全屏灰屏。
补齐 BIOS 系统调用,并将测试门禁升级为可复现、可证伪
商业卡加载差分压缩数据所依赖的三项差分反滤波调用(系统调用号 16 / 17 / 18)此前完全未实现,卡片读到的数据因此错误;现已按 GBATEK 权威格式逐条实现,并同时补齐声音偏置、MIDI 音高换算、合卡与定制停机四项调用,以及寄存器复位调用按 GBATEK 明文规定的强制空白写入,另修复了 mode 5 位图的页面翻转,此前始终只显示第 0 页。测试门禁同步升级:GBA 侧新建 14 条最小可复现夹具与 3 条常驻守卫,红色复现器已清零;F11QA 矩阵共 122 条用例,CI 仅将不允许回归作为红线;每条新增断言均执行变异验证,即有意破坏实现以确认对应断言确实失败,本轮据此发现并修正了断言取值过小、两种实现均可通过的一类无效门禁。