4.10.1 Beta 5 / 19-01-2023
WinUAE is a Commodore emulator for Windows:
High accuracy and compatibility for A500, A500+, A600, A1000, A2000, CDTV
Good compatibility (Cycle-exact chipset emulation, CPU memory accesses are cycle-exact, CPU internal instruction execution speed is not exact) for A1200 and CD32
Fast CPU emulation only (chipset/chip ram CPU accesses optionally cycle-exact) for A3000, A3000T, A4000 and A4000T. To see all features, follow this link.
PPC CPU core plugin, 1.5.1+ Direct3D Pixel Shader filters, Improved drive sounds, Portaudio library
UAEUNP 0.8 to extract Amiga based disk images and archive
Windows: XP SP3 32-bit+
CPU: SSE2 capable
GPU: For Direct3D11 - Windows 7: SP1+
For Direct3D9 - June 2010 DirectX 9 redistributable required
Most Recent Changes
- Fullscreen GUI Misc panel option ticked + D3D 11 mode exclusive fullscreen + enter GUI which drops back to desktop: GUI used full desktop size, when it should have used "work area" ("work area" does not include for example Task bar)
- End directory filesystem threads earlier in shutdown sequence, previously it was too late, after Amiga address space was freed, causing crash if filesystem queue had commands pending and they needed to read or write Amiga side memory.
- Improved Game ports panel Custom mapping autoswitch selection. Select first Custom config that has at least Amiga button fire button or second button mapped to connected input device that initiated autoswitch.
- Added continuous screenshot mode to GUI (Was previously available via input events). When ticked, screenshot is taken automatically every frame.
- Fixed video recording and continuous screenshot including extra blank frame when loading new statefile. (4.9.0)
- Fixed second frame appearing corrupted after loading statefile due to not re-initializing long/short frame internal variables at startup (only visible in video recording or screenshot). (4.9.0)
- If game controller was configured using Game Ports panel (Custom #x setting) and device didn't have any Input panel mappings, config file input device matching with currently installed input devices was not done. This meant if config was moved to other PC, device specific input config was not loaded correctly. Now it also matches devices using only USB VID and PID if better match is not found. (Full match -> Partial match -> VID+PID only if exists -> Device friendly name)
- If config file has input device that is not currently connected, saving the config file didn't save non-connected device's config data. Now it is saved (like it was supposed to already do)
- Game Ports panel custom settings were not corrected automatically if device indexes changed (new input devices connected or removed)
- If Game Ports custom setting has entries that don't map to any currently connected device, show unmapped events as "<event name>=?" instead of showing nothing.
- CALLM disassembly fixed.
- 68030 MMU state was partially reset when loading statefile.
- If fast CPU mode program writes to color registers (usually COLOR0 to create background color rainbows), skip write if previous write already happened in same chipset cycle. This could have overflowed buffer that stores state where and when color change should happen in rendering part of emulation. Fast CPU modes don't slow down CPU by emulating chipset or chip ram delays.
- Reduced size of sprite buffers (which was huge), buffer size was enough to have whole screen filled with sprites in max superhires/800 lines screen mode which can't happen.
- "uae-configuration statefile_save <filename>" can be used to create statefile (note that save happens when vblank starts next, it is not saved immediately but uae-configuration still returns immediately)
- Serial port RI (ring indicator) was inverted. If both printer and serial port was enabled, printer port SEL was pulled down even when RI was inactive.
- DSKBYTR behavior updated after more testing. It is updated all the time normally except if DSKLEN WRITE bit is set without DMA enable. It is even updated (with zeros) when disk write DMA is currently active.
- Dumping CPU state after JIT unhandled exception or program jumping to IO space won't open console window anymore.
- If 2 back to back internal cycle count events had same cycle count value, order of executed events was undefined. Now they are executed in FIFO order. Interrupt clearing and setting at same cycle queued two events, interrupt was lost if they were executed in opposite order. Fixed weird music issue in Jesus on E's / LSD.
- Fixed PCI bridgeboard crash if non-existing PCI board IO or RAM space was accessed.
- FM801 does not seem to have PCI Device control register Interrupt Disable bit (marked as reserved in datasheet). Made it unchangeable (and few other PCI config bits) to fix Mediator FM801 driver audio playback hang. (Possibly this worked with some older Mediator drivers)
- Added command line option "-winekeyboard" to change handling of PAUSE and NUMLOCK keys as a workaround for different (buggy?) Wine RawInput key codes and flags. (falcon35180)
- Bitplane DMA stealing sprite DMA off by one fix (b1)
- Platform specific hardware specific config entries didn't parse correctly and were ignored (b1)
- B1 sprite/blitter conflict was unreliable (not accurate side-effects in some situations, probably no one really cares as usual..)
- DSKBYTR WORDSYNC bit was previously autocleared after short delay. Now it stays on as long as DSKSYNC matches. Was very old workaround for old and wrong WORDSYNC behavior. Load DSKBYTR only when valid data is available. Real HW does not seem to load DSKBYTR when only zeros are read. (Most likely DSKBYTR is not loaded if PLL is not locked?)
- Fixed possible single scan line graphics corruption if BPLCON0 was changed when horizontal sync started (Caused by last minute 4.10.0 bug fix).
- Interlace config scaling mode was saved as RTG scaling mode which could write incorrect config entry or cause a crash.
- When saving config, check index values of array type config entries, preventing possible out of bounds memory access if entry is invalid (negative or too large) for some reason, like above bug. Config entry is internally index number, index is used to select config file entry value. If invalid value is detected, message is logged and config entry write is skipped.
- Removed useless "Scanlines" option under PAL filter extra settings.
- GDI mode RTG hardware cursor was not fully disabled when emulated Amiga was reset.
- GDI cursor leaved garbage on screen if hardware sprite coordinates were negative.
- Taking screenshot, DF0: is enabled but empty and CD drive is enabled but not empty: select CD image name.
- Disabled move left/right joystick autoswitching mode (was too easy to do it accidentally without noticing what happened). Only buttons are supported now. Improved popup description text of autoswitch option.
- Vblank interrupt trigger was 2 cycles too late. (Cracked The deep hang). This was supposed to be correct but probably some test results were misunderstood. Or something.
- Copper write to DMACON that disables copper DMA: copper stopped 1 cycle too early. (Following copper instruction's first instruction word is still fetched)
- DMACON write that switches blitter DMA on or off when blitter is running was not fully cycle-accurate. Now it is. (Blitter nasty was already correct)
- Yet another sprite DMA conflict found (Thanks ross again ) and emulated. If sprite DMA is switched on exactly 3 cycles before sprite's DMA slot, DMA decision is done and sprite pointer is increased but slot is not allocated, DMA transfer does not happen and RGA bus appears in idle state (0x01FE). If some other DMA channel allocates same slot, it conflicts and usual RGA bus AND and DMA pointer OR operations happens. Bitplane or blitter seems to be only channels that can conflict in this situation. CPU also can use this cycle safely. (Why do sprites have 2 different kinds of undocumented and weird conflicts?)
- Disk DSKSYNC interrupt behavior adjusted (not done any proper tests yet to fully confirm it), INTREQ DSKSYN bit only seems to get set when internal DSKBYTR WORDEQUAL bit changes from 0 to 1 because without drives selected (internal buffer value is static) and causing DSKSYNC match: DSKBYTR WORDEQUAL is one but interrupt only happens once (for example setting DSKSYNC to non-matching value and back to matching will generate single interrupt. Only writing same matching value again won't generate new interrupt). This behavior was never accurate and some versions had different hacks. Hopefully this is more correct behavior. (Retrovision / Insane and others I don't remember)
- Some timing operations still used old 32-bit wrap around timer checks that can return bad results with new 64-bit internal cycle counter. Affected standard vsync mode.
- Clear Harddrives panel list when loading hardware-only config.
- Platform specific config entries ("win32.???") were host only. Separated to host and hardware config entries. Moved win32.rtg_vblank to hardware config (Also this shouldn't be in platform specific anymore..)
None to be added...