4.10.2 beta13 / 24-05-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.
Extension packages & Miscellaneous utilities
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
- Sprite buffer overflow was still possible. Adjusted buffer size again and added limit check, if it is still going to overflow, sprite emulation is skipped until next frame. Problem with this buffer is that it is static, it needs to be as big as max supported programmed display mode which is waste of memory when emulating normal PAL/NTSC modes. It needs to be dynamically allocated. But it is too late now. ("Green" Big Time Sensuality / Axis)
- Game ports panel autofire options didn't do anything (b8)
- b8 "Allow moving vertical position backwards (VPOSW/VHPOSW writes) if current vpos is out of range" only handled VHPOSW writes. Agony interlace title screen swapped odd/even fields if accurate A500 ECS 68000 mode (CLR.W $DFF02A..)
- Added Striker Manager dongle emulation.
- Integer scale in high overscan modes (Overscan+, Extreme and larger) used default native mode width/height, not selected overscan mode width/height.
- OCS Denise earliest allowed BPL1DAT access check (which was updated in b5) didn't disable border even if horizontal DIW was already open, previously earliest allowed was small enough to not cause this side-effect. (For example Seven Seas / Andromeda)
- Check that prevented unnecessary writes to same color register in same cycle (can happen in fast CPU modes) was not correct and in some situations triggered even in cycle exact modes (Hotbleeps / Loonies)
- Off by one in bitplane sequencer stopping due to DMA being disabled. (Denise test case)
- If bitplane DMA was disabled when it was in "ddfstop passed" condition and DMA was re-enabled in later line (which finishes "ddfstop passed" condition, stopping bitplane sequencer after single "block"): lower priority DMA channels lost cycles because they incorrectly saw bitplane DMA being enabled and active normally during whole scanline.
- Debugger sprite "sp" option now uses ECS height bits when outputting sprite pattern if mode is ECS or AGA.
- Blitter internal state after line mode had ended was not correct since 4.9.2+ (Cemetery Of Silence / Possessed)
- Loading new statefile when emulation was running and blitter was active: it was possible blitter got stuck in active state. I have noticed this many times randomly but I finally found repeateable test case.
- FloppyBridge write protection status in GUI is now mirroring drive floppy protection status. Previously it was always shown as write protected (checkbox disabled and ticked). This didn't affect floppy drive writing, it was only visual problem. Note that GUI write protection status is not updated in real time, it is only updated when selecting floppy drives GUI panel.
- b10 automatic scaling fix fixed. Last line was off by one if bitplane ended normally (vertical diw end matched), wrong check was changed (plane count become zero or DMA was disabled). Interlace mode had one extra line at the bottom.
- Autoscale filter modes horizontal positioning was randomly unreliable or jittery if switched from programmed mode (or Picasso96 with "hidden" 31KHz mode) to native mode.
- About, contributors and error log window DPI/GUI font scaling support.
- CPU panel slider refresh update, previously any slider move caused slider update which could have caused side-effects.
- jit_blacklist config entry parsing out of bounds array access fix.
- Sprite buffer size was reduced too much (4.10.1), Big time sensuality / Axis buffer overflow.
- Debugger H history with DMA debugger data improved formatting. DMA debugger data was from previous field in some situations. (Wrong frame counter variable used to keep track of current and previous field)
- Systray icon -> Floppy drives: DF1, DF2 and DF3 selected image from DF0:. Probably has been broken since it was introduced..
- RC tag is back, easier to keep track of versions. Beta tag is removed because it makes some functional differences (beta dialog etc..).
- On the fly gameports panel autofire mode setting change (for example using uae-configuration or executing custom event) was not supported.
- Fixed memory double free in b9 calculator update.
- Debugger ? binary output grouped to 4*8 bits.
- Cached bitplane DMA cycle sequence could have used wrong odd/even line mode if programmed mode was enabled when PAL/NTSC bitplane was active.
- If active bitplane was "behind" left horizontal blank (usually only if mode is "weird"), bitplane had extra horizontal offset.
- Some re-recorder fixes but it still loses sync randomly. Not required to work in 5.0 (it has never worked) but I'll try to debug this before final 5.0.
- Automatic scaling missed one line at the bottom and in certain situations top had one empty line. (Probably side-effect of 4.9.x display emulation rewrite)
- RTC address space memwatch points didn't work correctly.
- Beta tag removed.
- Debugger calculator (also used by custom input events) >> and << shift operators added. Negative hex and binary value support (?-$xx now works as expected). Ternary operator support ("condition_formula ? formula_calculated_if_true : formula_calculated_if false"). String parameters and string comparisons supported. Can be useful in custom input events. (for example "gfx_resolution=[\'gfx_linemode\'=='double2'?'hires':'lores']")
- Serial port GUI now have separate options to enable handshake/status pin emulation (RTS/CTS/DTR/DTE/CD) and Ring Indicator. RI is off by default because it is shared with printer port SEL which broke parallel port joystick if serial port was also enabled after RI update. "RTS/CTS" renamed to more correct "Host RTS/CTS" (Host serial port hardware handles RTS/CTS automatically, Amiga side does not need to care)
- Sound GUI panel slider flickering fixed when modifying (almost) any other sound configuration setting.
- Added v2.01 ICD AdSCSI 2000 ROM (v32.1 icddisk.device). Renamed v2.x (v33.0) to v2.1 because now it is almost certain it is v2.1.
- Only disk insert cleared forced floppy drive turbo mode (enabled when executable is inserted in disk drive). Now it is also cleared when "disk" is ejected, allowing floppy sounds (if enabled) to play normally. Floppy sounds are not played in turbo mode.
- input.advancedmultiinput=true now also enables GUI "multiple input devices connected to same joystick port" Game Ports panel support. It is hidden because it is not complete yet and it is too late to do any possible breaking changes.
- Allow moving vertical position backwards (VPOSW/VHPOSW writes) if current vpos is out of range (vpos was previously in same frame moved past max vertical). Currently free backwards vertical position move is not allowed because it can cause bad side-effects and it can't be used for anything useful.
- Inter-process serial port emulation was unreliable (4.9.0+)
- Added inter-process serial port emulation RTS, CTS, DSR, DTE, CD and serial break support. (CTS->RTS, DTE->DSR/CD, both directions).
- Debugger breakpoints can now be chained, breakpoint chain breaks to debugger only when all chained breakpoints' condition matches. (for example: "wo 0 a0===0 s1" and "wo 1 a1==0" breaks when both A0 and A1 is zero. s1 = this breakpoint (#0) is chained to breakpoint #1)
- Extra breakpoint parameters (N: count N times before breaking and S: chained) are now only accepted at the end of command.
- Breakpoint N parameter counting down is now logged.
- Input panel mode("Configuration #1-3" selected) and mouse inserted using Game ports panel to any port and then later removed: [PORTS] events that used more than 1 slot were not removed. ([PORTS] label was removed but event was not). This caused mouse autoswitch only work once in input panel mode.
- Paths panel string "Configuration files" had disappeared (b6)
- GDI mode, possibly also D3D11 mode had wrong screen positioning/size after mode change in some situations.
- Switching HW RTG modes with scaling enabled: new mode was not always using correct size (b5)
- Input panel "Device enabled" checkbox state was not refreshed when Input mode was changed (Game Ports Panel, Configuration #1-#3).
- Saving config after GUI was opened for the first time without default.uae, then loading it and saving it again: second saved config file was not identical.
- Adjusted "VGA mode resolution autoswitch" switch range, some OS 3.2 native display monitors have been changed and it triggered autoswitch incorrectly.
- Native mode integer scale behavior adjusted. Removed some earlier beta auto-adjustments because they would break programmed modes in integer scaling.
- RTG integer scale didn't support scaling multiplers smaller than 1x. 1/2x and 1/4x is now supported.
- Changed uaegfx Picasso96 BoardName field to "UAE" (was "uaegfx.card"). Now P96Prefs created modes have same prefix as UAE internally generated modes.
- Fixed disassembler FMOVE.L/FMOVEM.L to/from control registers register order (FPCR and FPIAR was swapped)
- Bumped version to 5.0. No more 4.10.x versions.
- Input left/right joystick autoswitching mode is back, disabled by default, add input.autoswitchleftright=true to enable.
- Added input.advancedmultiinput config entry which currently enables inserting same input device in multiple ports (game ports panel) and in future enables multiple input devices in same game port GUI support.
- Enable also JIT FPU when JIT checkbox is getting ticked and FPU emulation (with host CPU mode) is already enabled.
- Fixed possible crash when quitting emulation when RTG mode with hardware sprite is active (b5)
- Inserting supported non-Amiga formatted disk image (for example PC DOS formatted image) in standard Amiga 3.5" DD drive was rejected, drive compatibility check didn't accept standard 3.5" DD drive. Image was accepted if drive was 3.5" HD drive. (Was probably broken when bridgeboard drive support was improved)
- Initial ROM scan window was invisible. (Not sure when it got broken or if it depends on Windows version)
- Added custom data path configuration to Paths panel. Data path = default path where config files, logs, statefiles etc are loaded and saved. This was supposed to have been added ages ago.. (previously available via command line -datapath parameter). Paths panel also now shows currently active data path.
- uaegfx internally generated modes didn't have active flag set and display parameters (total vertical/horizontal and sync lengths, values that are ignored by uaegfx) were technically invalid. Set active flag and made hor/ver totals slightly larger than visible resolution and adjusted sync values. Board type was not set to uaegfx (it was set correctly, then overwritten by wrong value) Some Picasso96 tools might have gotten confused.
- RTG hardware sprite update in b5 added caching that was not properly flushed when cursor shape was updated.
Some new "ross test" edge case chipset fixes:
- If chipset timing event was queued in same cycle as hsync event, hsync event was executed last. Hsync event should always have priority. This was "optimized" some time ago but it was wrong. (BPL1DAT write during same cycle didn't enable sprites in ECS Denise config)
- Very early BPL1DAT write didn't update sprite minimum visible horizontal position correctly, in some situations sprite that was "hidden" behind border didn't become fully visible.
- If BPL1DAT enables sprite(s) and "bordersprite" condition was possible (ECS Denise or AGA), enabled sprites activated border sprite state even if new visible sprite pixel would have been hidden by HDIW start. AGA 0.5 pixel lores "bordersprite" condition + borderblank enabled: "bordersprite's" complete pixel (1 lores) become visible.
- Bitplane DMA BPL1DAT access does not anymore open border if OCS Denise and BPL1DAT position was before HBLANK end. (OCS Denise undocumented feature, does not exist in ECS Denise or AGA which allows border open after HSYNC start). Manual BPL1DAT write already did this. ECS Denise earliest possible BPL1DAT access that opens border was 2 cycles too late.
- ECS Denise superhires sprite more accurate color selection emulation ("scrambled" odd/even palette access). Attached sprites are not yet correct (it does something in this mode but it can't be what normally working attachment does). Also it appears first pixel column of ECS superhires sprite is invisible (not transparent, appears as COLOR0, not background bitplane), this is not yet emulated. Sprites 4 to 7 are not working (nothing appears on screen) when in ECS superhires mode. (Agnus still does normal SPRxPOS/CTL and SPRxDATA/B writes)
- Programmed mode aspect ratio correction ("VGA mode resolution autoswitch") improved. Programmed modes should now always have correct aspect (no more halved horizontal size)
- Integer scaling now automatically doubles width of display if original width is smaller than height and doubled width still fits.
- GDI mode display position might have been wrong in some situations after switching modes.
- Direct3D 11 mode world matrix coordinate handling fixed (finally, has been wrong since D3D11 mode was introduced). Scanlines etc are not anymore affected by scaling settings. Rotation (gfx_rotation) also now works correctly.
- RTG hardware sprite (mouse cursor) is now properly clipped when near edges of screen.
- VHPOSW updates, copper special odd/even last cycle condition used original maxhpos value, not VHPOSW write "faked" hpos value. Do not do horizontal adjustments if CPU speed is fastest possible and/or JIT is enabled and VHPOSW access was CPU. Copper VHPOSW write is always accepted (which can only work if ECS or AGA).
- ROM rescan in ini mode didn't clear previously detected ROMs. Ini file whole section delete only deleted first entry in section.
- Added new KS ROMs to ROM scanner.
- uaegfx and hardware emulated RTG board and emulation window smaller than RTG resolution: part of right or bottom of display was clipped. (Used window size to check limits instead of internal surface size)
- Statefile restore fixes, 68020+ blitter wait hang after loading statefile, "cpu trace" error dialog shown even when there was nothing wrong.
- If reset was requested, it wasn't processed until next vsync. Between reset request and reset process CPU might have executed random data, temporarily flooding log with invalid access errors, exceptions etc.
- CIA synchronize clock drift bug fix (4.10.0)
- Changed keyboard reset warning again: when reset keys are pressed, reset warning starts, when reset warning ends, system is reset but reset is kept active until at least one key is released. Keeping reset keys pressed more than 5 seconds force hard reset like non-reset warning config already did. Both keyboard reset modes now work identically.
- Programmed mode "do not include hidden lines" (b1) removed one too many line, breaking some programmed modes interlace field order.
- Interlace automatic LOF toggle cycle was still using pre-4.9 horizontal position origin. (Toggled 3 cycles too early, correct position is cycle 1 of line 0)
- LOL (NTSC long line) was toggled 1 cycle too early. Both LOF and LOL toggle when HPOS=1.
- COPJMP1+COPJMP2 strobe when Copper DMA is off stops the copper: this was not correct, if both strobes are generated, Copper instruction pointer is loaded with COP1PT OR'd with COP2PT. This usually indirectly stops the copper because it will sooner or later does MOVE to "dangerous" register. This is same address OR behavior as any other DMA pointer if more than one gets activated in same cycle (for example refresh + bitplane conflict). This was done before logic analyzer checks and was forgotten..
- HAM5/HAM7 was incorrectly allowed in AGA mode (broken probably in 4.9?). AGA only enables HAM if 6 or 8 planes.
- Disk image was accidentally opened twice, preventing disk image deletion/editing without closing WinUAE (b1)
- When disk image is ejected using GUI, close image file handle immediately (previously it was closed after returning back to emulation)
- Mounting exe as HD floppy image created broken disk structure if file was larger than 1329664 bytes. Bitmap block used original DD block location but was allocated after HD root block.
- Filter mode "default" now always scales if programmed chipset display mode.
- Debugger breakpoints are now also reported when single stepping (f and fo etc), previously trace override other breakpoint detection.
- Debugger wf didn't fill in binary mode.
- GVP 2040 original ROM image added (No 68060 support). "tekscsi2.device 1.1 (17.4.95)". Filesystem loader has serial debugging enabled. Updated 68060 variant is "tekscsi2.device 1.0 (27.8.95)". For some reason newer version has 1.0 in version string but device internal version is still 1.1.
- Changed new Agnus Chip RAM max addressing advanced chipset option: default equals Chip RAM size. Forcing 512k when OCS can break old configs and cause confusion and result will look like new emulation bug.
- Some VHPOSW horizontal change support improvements. It is still a hack but it is simpler hack and generic, required changes are now dynamically calculated. It is not anymore hardwired to Smooth Copper / Up Front specific VHPOSW horizontal position changes. Demo specific hacks removed. Also now horizontal position moves beyond maxhpos is also emulated, hpos counts until to 0xFF before wrapping around. DMA debugger also updated to support skipped or doubled cycles. VHSPOW behavior needs future undocumented feature thread post. (Weird test cases by ross)
Probably getting close to final release. Possibly. I did promise to have OCS lores/hires mid screen changes fully emulated in 5.0 but does look like it is not going to happen, it needs major changes that I am not sure I want to change, at least until much later.
- There is no undocumented HAM behavior, it was bug in emulation, in certain situations HAM decoding incorrectly started before border and fix only accidentally worked in test case. (b1)
- Hardware info panel now shows complete memory map when emulation has been started. Before starting emulation it works like previously (adjustable, lists expansion devices only). Added address space end column. (TODO: more info, perhaps also include PCI devices)
- Added backslash/F11 swap key option to Input panel. This is global option (registry/ini) and swap is done after input mapping. Reverts b1 key swap.
- Enabling Copper DMA didn't wake up Copper immediately but when next line started. (4.9.something probably)
- Added inverted lightpen/gun input events. (ALG Fast Draw Showdown)
- If any debugger memory search command (s, fa, etc) have start address parameter that points to any ROM address, search runs normally until last ROM address. Previously searching from ROM addresses was not possible.
- If keyboard reset warning was enabled, releasing reset keys caused second reset if they were kept pressed until reset warning had internally generated reset. (4.10.0)
- If keyboard reset warning is enabled, keyboard reset does not start (and reset warning key code is not sent) until at least one key is released and if keys are kept more than 5 seconds, hard reset is forced. Previously if keyboard reset warning was enabled, reset always started immediately and forced hard reset was not possible.
- 1.5M Chip RAM size is now working correctly in all configurations. (Except JIT which does not like non-power of two RAM sizes)
- Added Agnus chip ram max size option to advanced chipset. Can be used to configure larger Chip RAM size than Agnus DMA supported size.
- Added A1000 Denise model selection to advanced chipset (A1000 Denise without EHB and A1000 Denise with EHB). Previously Agnus type was used to select if A1000 Denise features/bugs were emulated. Autoselect = Chipset type selected from chipset panel.
- Removed Agnus blitter busy bug and No-EHB Denise Advanced chipset options. Above Agnus and Denise model selection replaces them.
- If CPU was waiting for chip bus read or write (At least one cycle was stolen from CPU) when debugger was exited or GUI was entered, next CPU chip bus wait cycle was not counted.
- Blitter state is now fully saved even if blitter is in mid-operation. (cycle-accurate modes only). Previously blitter was force-finished if blitter was active when state was saved.
- Copper "overflow" to beginning of next field is now statefile supported.
- Chipset internal delay events are now accurately saved with state files. (Test cases by ross as usual)
- Statefile save exactly when CPU was about to do memory chip bus read or write: restore skipped this pending read or write.
- Updates to CPU state save support. In some situations state save/restore support was not correct and/or not cycle accurate.
- CD32 state was always saved, even when no CD32 features were enabled.
- Fixed LPSTOP instruction (68060 only, Low Power STOP). Broke when STOP instruction emulation was rewritten to match real 68000 behavior. No known Amiga programs use LPSTOP. (4.10.0)
- Level 7 interrupt input event now keeps NMI active until CPU detects it. Previously it only made a short pulse that was unreliable.
- If VPOSW has been written to more than once during single field and writes only modified LOF-bit and later write(s) during same field restored original LOF value: don't recalculate display settings when next field starts. LOF state only affects display during vertical sync and few lines before and after, it can be "safely" modified mid screen (with side-effects in some situations..)
- HAM previously unknown (?) and undocumented feature emulated. If bitplane is active earlier than horizontal border ends, last pixel under the border is HAM decoded normally using bitplane pixel value, it is not decoded using border color.
- In some situations when emulator config was changed on the fly (for example 68000 CE to 68020 non-CE), CPU emulator and other parts of emulator was not configured for new configuration.
- Prometheus PCI bridge PCI config space byte wide access endian swap fix.
- Picasso IV flash rom support. Not very useful because it can't be used to fully "generate" Picasso IV flash ROM image file (like you can do with PPC boards). Official flasher does not update first 16k of flash that contains autoconfig nybbles and loader code and Picasso IV and official updater can't work if it is missing.
- Serial port SERDATR TBE bit was was unreliable in accurate modes. (4.10.0)
- Fixed floppy related bug where initial bit offset becomes negative, causing out of bounds array access (that may or may not cause a random crash).
- Fixed Input panel custom event string to GUI temporary config and from GUI temporary config to active config copying that caused double memory free. (Very old bug).
- On the fly disk check from GUI (for example ? in Quickstart panel), which reads boot and root block and shows disk information, which changed disk rotational position but it wasn't restored.
- Disabled strange ages old german keyboard layout only "#" key hack and changed 2 very rarely, if ever, used, default keys: Amiga key left of backspace which does not exist on any PC keyboards is now mapped to F11. Key left of enter (which only exists on european PC keyboards) is now mapped to correct matching Amiga key. (was previously key left of backspace for some reason). Hack can be optionally restored if there really was some reason for this hack. (I suspect original reason was pre-RawInput Windows 9x/ME DirectInput limit that possibly didn't allow all keys to be read normally).
- Ultra extreme overscan mode now includes blanking regions drawn using grid pattern. Added new HV ultra extreme overscan mode that shows HSYNC, VSYNC, Blank and Borderblank regions. Can be useful when creating/debugging programmed display modes. C mode shows CSYNC pattern, which is accurate enough to correctly handle at least some weird modes by ross
- Added reset warp mode Misc panel option. Reset automatically enables warp mode, first copper DMA activation (KS ROM sets it just before disk/HD boot starts) starts warp mode auto disable countdown. Default is 1 second delay before warp mode disables. warpboot_delay config file entry can be used to change delay value (value in frames). Makes KS ROM hardware initializations almost immediate without affecting compatibility.
- Bring GUI window on top if emulation window gets left mouse button double click or F12 (or configured GUI key) key press and GUI is open. Close GUI if ESC is pressed when GUI is open and emulation window has focus.
- SCSI CD command READ TOC, format type 0 returned invalid data (4.10.1)
- Added button toggle mode (press and release: button gets pressed, press and release again: button gets released) to Game Ports panel autofire mode select menu.
- A600 non-expanded Quickstart RTC selection fixed. RTC should not be selected unless RAM expansion is configured.
- Added missing Picmatic ROMs (European American Laser Games variant). Zorton Brothers and Marbella Vice.
- Added Disable keyboard and Disable game controllers when mouse not captured options to Pri & Extensions panel.
- Game port setting now accepts joyportnameX and/or joyportfriendlynameX=<name> + joyportX=customY simultaneously. This forces custom config Y to be mapped to named controller, ignoring device index value in custom config. Makes it easier to create config files with custom game port settings programmatically.
- Added possibility to have same Game ports panel joystick in more than one joystick port. Config file only currently. Use same config file entries with index number (for example "joyportfriendlyname1_1=<controller name>")
- Added screen rotation support, to fully support Fast Draw Showdown (American Laser games) game that had 90 degree rotated display.. Direct3D9 mode only so far. Config file only: gfx_rotation=<rotation angle in degrees>, gfx_rotation=-90 for Fast Draw Showdown.
- Removed Expansion panel CD32 FMV checkbox. It is available via expansion list and needs ROM selection.
- Integer scaling now has 5% (width and height) safety margin before switching to smaller multiplier.
- If programmed mode: do not include scanlines hidden in vertical blank when calculating display size (for integer scaling/autoscale etc)
None to be added...