Długo nam przyszło czekać na kolejną serię testowych wersji WinUAE - najbardziej dopieszczonego emulatora całej rodziny komputerów Commodore Amiga i pokaźnej ilości różnych dostawek do tego komputera.
Ostatnia pełna wersja emulatora to WinUAE 4.2.1
Winuae 4.3.0 Beta II 27/10/2019
- 68060 PCR FPU disabled bit was not set when 68060 model didn't have FPU (b1).
- PCMCIA slot (if card configured) was not enabled at reset. Small change to attribute from image file: extra attribute data must be at least 512 bytes (b1).
- CALLM disassembler support
- FSAVE/FRESTORE and PSAVE/PRESTORE (if 020/030) generate privilege violation exception (if run in user mode) even if FPU/MMU is not installed.
- When editing Display panel width/height boxes, don't validate the value immediately to prevent useless "must be at least" messages in the log window/error log.
- List font selection removed, may come back if fix for some side-effects is found.
- GUI scaling partially rewritten yet again. Now uses ReactOS/Wine CreateDialogIndirectParam() reimplementation with some customization which enables resize code to find out exactly which elements are part of GUI, final screen coordinates, types etc. Remaining high DPI related glitches should be fixed.
- GUI panel change redraw flicker is gone.
- Fixed double free and buffer overflow in GUI code (b1)
- Copper COPJMP cycle sequence order was wrong, first cycle does not need free cycle, second cycle requires free cycle, logic analyzer rechecked. (vAmiga test case)
- Using SPRxPOs to move DMA mode sprite horizontally towards right very little so that "both" sprites still have overlapping pixels: old sprite was still drawn fully. (vAmiga test case)
→ NOWSZY [AMIGA] Winuae 4.3.0 beta IV 09/11/19
Winuae 4.3.0 Beta III 09/11/2019
- AGA border sprites enabled: sprite was still clipped to horizontal display window end. (b3)
- Fastlane SCSI DMA controller address configuration emulation was incomplete. (Address bus is used for bits 0 to 23, upper 8 data bits for 24 to 31)
- A2024 monitor didn't show full viewable area. (4.0) It still won't work correctly if multimonitor mode is enabled. A2024 is a special case, it is basically display port adapter but it is not hardwired to chipset timing/display size/position like all other display port adapters.
- Remaining (?) GUI update glitch fixed. (b2)
- Added Trojan light gun preset to Game ports panel. Trojan fire button is joystick left. Standard light pen/gun fire button is 3rd mouse/joystick button.
- PPC board without ROM or zero size ROM and 68060 CPU with FPU: Generated fake boot ROM didn't include FPU disable boot code. Since 4.1.0 68060 FPU is not disabled when emulated accelerator board is configured.
→ NOWSZY [AMIGA] Winuae 4.3.0 beta III 30/10/19
Winuae 4.3.0 Beta III 30/10/2019
- Subpixel emulation + borderblank: sprite end was 1 hires pixel before bitplane end, leaving 1 hires pixel gap in right border.
- On the fly chipset change support improved. (More OCS/ECS/AGA custom registers differences supported)
- ECS Denise + Subpixel emulation mode + Superhires Display panel setting + not Superhires mode: do not enable ECS Superhires (max 4 colors) emulation mode.
- GUI corruption in some theme modes fixed (b2).
Dracula (Psygnosis Limited, 1994)
Winuae 4.3.0 Beta I 19/10/2019
- Trumpcard A500AT v1.2 ROM dump found, compared to v1.1 (extracted from driver disk .driver file), main difference seems to be use of interrupts. Emulation updated. Both ROM versions have same version/date string "AT 1.1 (06 NOV 1991)", I guess they forgot to update it..
- Disk index pulses were not being generated when disk was being written (Broke Cadaver v0.1 save disk writing, has been broken at least since 3.0)
- Restoring CD32 or CDTV statefile with CD audio playing: start playing immediately, do not emulate CD audio start delays.
- Added statefile generic partial IO autoconfig board support, board is mapped in address space and visible in Hardware Info panel after restore. Each board still needs separate statefile implementation.
- CDTV audio CD playing state restore fixed.
- Don't save AGA colors chunk to statefile if config is not AGA and all AGA colors are uninitialized (if initialized: config was changed on the fly and AGA palette should be saved)
- Archos Overdrive HD (PCMCIA IDE adapter) emulation added.
- Generic PCMCIA hotswap support, each PCMCIA expansion has "PCMCIA inserted" checkbox, if ticked, card is inserted and if any other card was inserted, it gets removed first. If unticked, card is removed. Checkbox can be changed on the fly. Reason for this change is to have hotswap support that is not device type specific.
- PCMCIA SRAM and PCMCIA IDE are now expansion devices. Old PCMCIA SRAM/IDE configs need to be manually updated.
- PCMCIA conflict check was incorrect, it detected 4M Fast RAM as conflicting.
- PCMCIA SRAM: if SRAM image size is larger than 4M but less than 5M, extra data is used to replaced autogenerated attribute data (0xa00000-0xa1ffff)
- Expansion panel selected device was unexpectedly cleared when clicking GUI elements.
- CIA overlay is unused only in Gayle based Amigas (A600, A1200) and also CD32. A4000 and A4000T models had incorrectly disabled CIA overlay emulation.
- Internal CD mount audio playback handled pregap incorrectly if previous track was in different file than current audio track and pregap was between tracks (cue/iso/wav, first audio track), it caused first 2 seconds (or length of pregap) of audio to be played with zero volume.
- High DPI support rewritten, now requires "Per Monitor DPI Aware V2" feature which was introduced in Windows 10 1703. 8.1 introduced original "V1" version which is not supported anymore. Manual GUI size/font adjustments are still supported in older Windows versions.
- GUI high DPI problems fixed, for example when moving GUI window from monitor to another monitor with different DPI usually worked very badly.
- Windowed mode bottom status bar is now high DPI compatible.
- Direct3D11 mode + Windows 10 with DXGI HDR support + HDR enabled GPU and display: use HDR compatible back buffer (DXGI_FORMAT_R16G16B16A16_FLOAT)
- Disk swapper path modifications did nothing while emulation was running.
- When overwriting configuration.backup, don't move old file to recycle bin. Backup of a backup is not that useful.
- CD32 pad emulation didn't handle weird pad reading code where pad mode selection Paula pin was in input mode and code set POTGO START bit which discharges POT caps = CD32 pad will see 0v in 3rd button line and activates CD32 pad mode.
- Enabled CD32 pad mode and normal second fire button (not CD32 blue) is pressed: override CD32 pad mode and use normal joystick mode. (This is basically same as having joystick port splitter that allows to connect both CD32 pad and normal joystick at the same time)
- CIA odd address word or long read/write access returned upper and lower byte swapped.
- Switching chipset on the fly (OCS<>ECS/AGA using uae-configuration) didn't reset BEAMCON0, some other AGA only registers and sprite widths.
- Removed all 68020 cycle-exact CPU mode internal idle cycles. It wasn't good enough design (as expected), need to start from scratch later.. again.. It made real 68020 best case results too slow. (and worst case was still too fast..)
- uae-configuration didn't work in indirect UAE boot ROM mode. (uae-configuration uses C-style stack parameters and trap code didn't preserve SP)
- Added separate CPU tester project that generates test data file for configured CPU (cputestgen.ini) and Amiga program that uses generated data.
- Fixed E-Matrix 530/Typhoon MK2 RAM mapping. Now all supported memory sizes work and is detected correctly.
- Modularized expansions device handling more, each device now dynamically adds hsync, vsync, interrupt check etc... callbacks when initialized. Report if some expansion device/device combination stopped working.
- Sprite to bitplane collisions didn't set all CLXDAT bits with certain CLXCON combinations (bad early exit optimization added long time ago)
- Scala MM "green" and "red" dongles emulated and confirmed working.
- Emulate HHPOS "UHRES" hsync counter read-only and write-only registers (ECS/AGA) and BEAMCON0 DUAL bit. If BEAMCON0 DUAL=0: HHPOS counts to normal max horizontal position, if DUAL=1: It counts to HTOTAL.
- Host directory/archive drag and drop to WinUAE window now supports mounting multiple items simultaneously.
- First pixel(s) of sprite was not drawn in certain situations when sprite start position was just before border and distance was less than 1 lores pixel. (Marvins Marvellous Adventure)
- SPTI CD/DVD access mode now internally emulates all CD audio commands (CD/DVD/BD drive analog CD audio support was obsoleted long, long time ago). All other commands are forwarded to the drive like previously.
- uaegfx RTG mode was unnecessarily initialized twice in some situations.
- When selecting accelerator board using GUI, matching CPU model is also set and 24-bit addressing is cleared. Manual adjustment is still possible after autoselect. Note: when CPU model gets lowered from 68030 to 68020 compatible board or from 68060 to 68040 compatible board, CPU is not changed automatically.
- Debugger "Scanning.." memory selection worked strangely or badly when system had 32-bit RAM.
- Debugger memwatch bus error option ("B"), generates bus error when triggered.
- nrg CD images didn't load correctly in relative path mode.
- 24-bit uaegfx RTG mode had random wrong color pixels in some situations (Elastic Dreams)
Fixed CPU tester detected differences between UAE and real CPUs. Mainly undocumented/undefined features, 68020+ T0 trace etc..
UAE = emulation bug fixed, not undocumented feature. No UAE = Undocumented CPU feature (that also needed UAE update)
- LINK stacked value is saved before SP is decreased by 4. Only affects pointless LINK A7,#x variant. (All models except 68040)
- CHK.W undefined flags fully emulated.
- DIVU and DIVS divide by zero condition codes are now 100% correct: DIVS always set Z-flag, DIVU sets Z-flag if dividend upper word is zero, N-flag if dividend upper word is negative.
- CPU bug found and emulated, MOVE.W <EA>,-(An) causing bus or address error: stack frame's opcode field contains following instruction's opcode and "IN" (Instruction/Not) field is set to one! ("Not instruction").
- All instruction address errors should be 100% correct now. An contents are updated (or not updated) if -(an) or (an)+. Condition codes are also correct.
- MOVEM to <EA> with zero register mask: possible odd EA does not cause address error exception. (NOTE: MOVEM from <EA> with zero mask does generate address error exception even if mask is zero because MOVEM that reads from memory always does extra word read)
- BSR.B/W stores old PC to stack and decreases SP before checking if PC is odd.
- DBcc and odd offset: Does not generate address error if condition is true. Count does not affect address error. UAE: Address error stacked PC was wrong.
- UAE: MOVE to SR address error fixed.
- Many instructions update condition codes only partially if it generates address error exception. This is now 100% correctly emulated.
- UAE: TAS cycle sequence was wrong. (read-write-prefetch but for some reason used obviously wrong read-prefetch-write)
68000 but not directly Amiga related: Accurate bus error emulation.
- Bus errors emulated, condition codes, stack frame, register contents are 100% correct.
- Bus error during second word of full prefetch (branch taken) is unexpected: exception stack frame opcode field is zero.
- RTE with unknown frame type (=generates exception 14) modifies flags: N is set if stack frame/vector offset field is negative, Z is cleared (I assume zero frame field would set Z but zero frame id is always valid). V is always cleared.
- DIVU and DIVS undefined flags have different behavior compared to 68000. Other undefined flags work identically.
- Bus error/address error stack frame documented fields now contain mostly correct data. (RTE from bus/address error is not supported)
- MOVE SR,<memory> (like CLR <memory>) don't do extra dummy read.
- UAE: More compatible CPU mode didn't split CPU read/write access if it would cross memory banks or wrap around (no normal program is supposed to do this but tester does)
- DIVS.W and divide by zero: undefined V flag is "unstable", when same test is repeated (with V having static value before executing DIWS.W), sometimes it is set, sometimes it is cleared after div by zero. This is not emulated (I have no idea why it works this way. So far this is the only instruction that has this kind of really weird behavior. It does sound like CPU forgets to either copy V to some internal state variables or back when DIVS.W generates div by zero)
- UAE: PACK instruction incorrectly used stack byte decrement behavior (-2) when source parameter was A7.
- UAE: UNPK instruction incorrectly used stack byte decrement behavior (-2) when destination parameter was A7.
- ABCD, NBCD and SBCD always clears undefined V flag.
- MOVES An,(An)+ and MOVES An,-(An) stores incremented/decremented An to memory. (Also 68040)
- CHK.W, CHK.L undocumented flags fully emulated.
- CHK2/CMP2: comparison was not correct when lower bound was larger than upper bound (Documented fully in "M68000 Family Programmer's Reference Manual" "Integer Unit Condition Code Computations" table. Other documentation only mentions inaccurate "If Rn<LB or Rn>UB" formula). Undefined N and V flags emulated (This was really complex..).
- DIVS.L undefined flags are not fully emulated. (Other DIV variants: fully emulated)
- UAE: BSR and JSR address error fix.
- Both T0 and T1 trace bits set (Documented as "undefined/reserved") is same as T1 only set, normal trace mode (also 68040).
- UAE: MOVE to SR is considered change of flow instruction because it does full pipeline reload (T0 trace, also 68040).
- 64-bit MUL.L: Dh is updated before Dl.
- CAS2 updates Dc2 first, 68020/030 updates Dc1 first. (Only makes a difference if Dc1 and Dc2 is same register)
- LINK stacked value is saved after SP was decreased by 4.
- MOVES An,(An)+ and MOVES An,-(An) stores incremented/decremented An to memory (same as 68020/030)
- 64-bit MUL.L: Dl is updated before Dh.
- DIVU.W and DIVS.W: does not modify undefined N and Z flags if overflow. All other CPU models will modify N and Z flags.
- UAE: Missing 68040-only T0 trace trapping instructions emulated (MOVE to USP, MOVEC, CAS, FSAVE, etc..)
- CHK2/CMP2 undefined N and V flags emulated (Very simple: N is set if source value is negative, V is always zeroed)
- STOP parameter can have S-bit zeroed without privilege violation exception. Only 68060 requires parameter's S-bit being set.
- DBcc generates address error even if odd branch is not taken. (68000-68030 won't)
- Registers are always original unmodified if address error (jump to odd address) is generated.
- DIV.L divide by zero: C flag is cleared. Other flags are not modified.
- CHK clears N-flag if not exception.
- Unaligned MOVE16 works very strangely, need more testing with different accelerator boards.
- UAE: if DIV.L or MUL.L generated exception (unimplemented or div by zero) and addressing mode was -(an) or (an)+: an was not restored.
- MOVES An,(An)+ and MOVES An,-(An) stores non-modified An to memory.
- UAE: Added "Debug Pipe Control Modes" debug instructions HALT and PULSE: HALT = $4ac8 ("TAS A0") and PULSE = $4acc ("TAS A4"). HALT halts the CPU (requires supervisor mode, privilege violation if not in supervisor mode), PULSE does nothing ("toggle non-pipelined mode" says documentation). Other $4ac8-$4acf ("TAS An") instructions generate normal illegal instruction exception.
- UAE: LPSTOP fixed. First it checks if instruction's second word is correct (0x01c0), if not: F-line. Then it checks for supervisor mode, if not: privilege violation. Order was previously swapped.
- UAE: RTE accepted stack frame type 7 which is 68040 only.
- MOVEC with invalid control register in user mode generates illegal instruction exception. Previous CPU models generate privilege violation exception in this situation.
- UAE: BUSCR was not fully implemented.
- 68020+ instructions that have extra opword field with zero bit followed by 3-bit REG (data register 0 to 7) field: If zero bit is set to one, REG field becomes address register field! Unfortunately it also seems to make instruction to return incorrect results, it looks like some internal operations use it as DREG and some as AREG. "Zero" bit appears to be not fully supported A/D select bit. (For example MUL.L, DIV.L, CAS2)
- 68060 + DIV.L with second opword zero bits set to one: some combinations seems to hang the CPU! (Internal divide algoritm stuck in infinite loop?)
- UAE: Prefetch mode locked RMW instructions (TAS, CAS, CAS2) did prefetch between read and write. I haven't found any differences in condition code undefined behavior between 68020 and 68030.
- UAE: Some branch instructions generated wrong stacked trace exception Instruction Address field. (Was branch target, not address of branch instruction)
- UAE: 68000/010 JSR, BSR and RTS didn't check and generate address error if stack pointer was odd. (RTE and RTR did check it)
- UAE: Partially emulate 68010-only bus/address error stack frame. Bus/address error recovery is not emulated, it would be really complex. It is similar to 68030 MMU bus error retry. Most likely no Amiga (or Atari ST) program has ever required 68010 and expected and handled/emulated address errors. Previously 68000 address error stack frame was created
- UAE: 68010 in non-prefetch mode generated and accepted 68020+ stack frame types 1 and 2. 68010 only supports stack frame types 0 and 8.
- Stack pointer was modified before RTE detected format error (unsupported stack frame id), overwriting part of unsupported stack frame. (as usual, probably no program should care)
- Blizzard 1260: BKPT always hangs the system. Warp Engine: randomly hangs. CSPPC: does not hang.
- Blizzard 1260 (rev 1 68060): RESET instruction resets the system even in user mode! CSPPC, rev 1 68060: generates expected privilege violation exception. I don't see how this can be board specific (CPU interrnally generates RESET signal) so perhaps there are different rev 1 68060s?
- 68040: CHK.L #$40000000,D1 (D1=0) is buggy. Execution continues from PC+8, not PC+6! But for example if constant is #$50000000 or D1 is replaced with D0, it works correctly.
Disassembler updates (CPU tester uses disassembler to calculate instruction's source and target EA and length of instruction)
- FDBcc fixed.
- FTRAPcc support added.
- Some variants of MOVE16 didn't disassemble correctly.
- PACK and UNPK support added.
- MUL.L disassembles as MULS.L or MULU.L
- DIV.L disassembles as DIVS.L, DIVU.L, DIVSL.L or DIVUL.L
- CAS fixed.
- LPSTOP fixed.
Undefined flag status:
- ABCD, SBCD, NBCD: complete (implemented 10+ years ago)
- CHK: complete
- CHK2, CMP2: complete
- DIVU.W, DIVS.W: complete (overflow and div by zero). Except 68020-68030 DIVS.W div by zero "unstable" V flag.
- DIVSL.L DIVUL.L, DIVU.L: complete (overflow and div by zero)
- DIVS.L: not fully emulated
- A500 SCSI and IDE controller (LX), IDE only (EC)
- SCSI is true DMA! IDE is usual boring PIO.
- Only supports FFS in RDB. If it is the only RDB installed filesystem... Any other filesystem installed: all filesystems gets skipped!
Archos Overdrive HD:
- PCMCIA IDE controller, PIO.
- PCMCIA card appears as a read-only SRAM disk (CC0:, including startup-sequence and everything), data is stored in onboard 32k boot ROM, which loads the IDE driver, mounts the HD, changes assigns and finally executes HD s/startup-sequence.
- "amiquest.device (IDE 5.0 10/02/94)"
- NC53F94 based SCSI controller for M-Tec T1230 A1200 accelerator.
- Fake DMA (long word data port)
- E-Matrix 530 and Typhoon MK2 has same (or almost same) hardware. Driver is also almost identical.
- Emulated as a separate expansion board (not CPU board) because logically it is standard Z2 autoconfig board and it does not depend on accelerator board features in any way and boot rom is located on Mastercard expansion board. Main accelerator board does not have boot rom.
Tagi: Winuae, Amiga, Beta, 4.3.0, Ii, 271019
Inne treści związane z tematem
[AMIGA] Winuae 4.0.0 beta XV
Następna seria testowych wersji WinUAE. Nowa pełna wersja WinUAE na dniach.
Ostatnia pełna wersja emulatora to WinUAE 3.6.1
[AMIGA] Winuae 4.0.0 beta XVI
Następna seria testowych wersji WinUAE. Nowa pełna wersja WinUAE na dniach.
Ostatnia pełna wersja emulatora to WinUAE 3.6.1
[AMIGA] Winuae 4.0.0 Final
Kto czekał to się doczekał, kto śledzi zmiany w betach - będzie to podsumowanie kolejnego etapu pracy nad emulacją maszynek ze znaczkiem Amigi - WinUAE 4.0.0.