Skip to content

Releases: X16Community/x16-emulator

Release 47 ("Roswell")

30 Mar 05:37
5427d47
Compare
Choose a tag to compare

Release 47 ("Roswell")

This is a major release with numerous bugfixes, as well as introducing 65C816 support.

  • Known bugs

    • in BASIC, pointer expressions in the third argument of VPOKE will cause the system to write to the wrong VRAM address. For example: VPOKE 1,$B000,PEEK($400). The workaround is to use a variable assignment, such as N=PEEK($400):VPOKE 1,$B000,N. - Fixed in git master.
  • Features/Fixes.

    • Optionally emulate a 65C816 CPU, selectable via a new command line switch -c816. There is also a -c02 command line switch to explicitly select 65C02 mode. [Fulgen301]
    • In order to make room for the full 65C816 vector table, the R47 ROM relocates the "MIST" KERNAL signature from 0xFFF6 to 0xC008. Emulator has been updated to check for the signature in the newer location. [Fulgen301]
    • Made IEC device addressing more flexible by preventing the HostFS from consuming every device number [DragWx]
    • Improved timing calculations for HostFS operations to translate wall clock time to elapsed CPU ticks
    • If HostFS is in use, the default -abufs audio buffer count is 32, otherwise 8. This should reduce audio stuttering for games which load assets from disk while sound is playing.
    • HostFS can be changed to respond to a non-default device number. New command line option -hostfsdev. Using this option in conjunction with -sdcard allows both devices to appear on the system.
    • Matching the VERA hardware feature, the layer config T256 bit can be used as a palette switch in tile and bitmap modes. Most useful in 2bpp and 4bpp depths, setting this bit on the layer forces the resolved high bit of the palette entry index to 1. For instance, in 4bpp mode, a tile pixel with index 1, on a tile configured with palette offset 6 would normally resolve to palette entry 0x61 (or 97 decimal), having this layer bit set will cause this pixel to resolve to palette entry 0xE1 (or 225 decmial).
    • Copying VERA hardware behavior, the LINE IRQ can happen in the non-visible vertical blanking area.
    • HostFS: empty filename now returns an error as appropriate
    • IO2, the YM2151 range, is partially decoded on hardware. Emulator behavior now matches this so that the YM2151 is mirrored throughout the $9F42-$9F5F range.
    • New command line switch -nokeyboardcapture causes capture mode to operate without intercepting OS-level keystrokes such as Alt+Tab.
    • Improvements to -wuninit warnings to show the appropriate opcode and location of uninitialized accesses.
    • Recognize the INTL1 key code, which exists on some keyboard layouts such as pt-BR.
    • Update the 65C02 opcode table to properly handle multi-byte NOPs and update cycle counts.
    • -trace output has been updated and enhanced, showing banks for effective addresses. Add listings for new banks.
    • new -longpwron option to match SMC 47 long power button press behavior at power on.
    • VERA FX: fix address resolution bug with 4bpp unaligned cache filling.
    • VERA: DC_VSTOP was taking effect one scanline too late.
    • SMC: update activity light logic. Hardware was mistakenly documented as allowing 255 PWM intensity levels, while in fact it is binary on/off.
    • VERA PSG: update PSG volume table from VERA 47.0.0. Prior to this change, there were multiple PSG volume values at the low end that resulted in the same output level.
    • SDL2: Set the application name to "Commander X16 Emulator", which shows up in the audio mixer, and in the screensaver inhibit application list on Linux desktop environments. This should be a bit more informative than "My SDL application".
    • New -pastewarp command line switch that warps the emulator when receiving paste data either from the clipboard or from the -bas command line switch.
    • HostFS: improve path parsing with both CMD and unix path syntax, particularly with absolute path names. DOS"MD//:TEST" now creates the directory in the FS root rather than erroneously in the current directory.
    • VERA: DC_HSCALE and DC_VSCALE values > 0x80 now render as they do on hardware.
    • SMC 47.0.0 fast PS/2 read support
    • Now with native build for Apple Silicon (built on the GitHub MacOS ARM runner)
    • More changes in the ROM.

Release 46 ("Winnipeg")

06 Nov 03:40
bf28f8d
Compare
Choose a tag to compare

Release 46 ("Winnipeg")

This is mainly a bugfix release.

  • Features/Fixes
    • A change in the ROM caused controllers to have their buttons offset due to how the emulated VIA responds to polling. The issue was fixed in the ROM and while it was not technically an emulator bug and no changes were made to the emulator's joystick routines, it gets a mention here.
    • HostFS: UNLSN was incorrectly setting the KERNAL status byte based on whether a file existed upon open. It has been changed to behave like CMDR-DOS. (discovered by [voidstar78])
    • HostFS: Opening a file in Modify mode now properly creates file if it doesn't yet exist (discovered by [m00dawg])
    • Audio: prevent -sound none from trying to use the uninitialized ymfm YM2151 library. The YM status register was also modified to always return 0 in this case. (discovered by [jestin])
    • WebAssembly: improve handling of zip files without manifest.json [Cyber-Ex]
    • GUI: If emulator launches in a window with the titlebar offscreen, move the window so that it is visible. (with help from [irmen])
    • GUI: Mouse movement now uses relative motion in capture mode, which makes the position of the host mouse irrelevant while in capture mode.
    • GUI: new -capture command line option to start emulator with mouse captured
    • Testbench: miscellaneous fixes [irmen]
    • More changes in the ROM.

Release 45 ("Nuuk")

17 Oct 05:46
bf15b1e
Compare
Choose a tag to compare

Release 45 ("Nuuk")

This is a minor release with respect to the emulator. The bulk of the changes are in the ROM.

  • Features/Fixes
    • Revert VERA PSG amplitude resolution back to 6 bits. This was upped previously to match VERA firmware. It was subsequently reverted in VERA to make room for the FX feature. [akumanatt]
    • Intellimouse support added to the emulated SMC, partially implementing the new feature in hardware SMC firmware 45.1.0. [stefan-b-jakobsson]
      • Scroll wheel is supported (mouse device ID 3)
      • Not implemented: Extra buttons (mouse device ID 4)
    • New emulator debug register behaviors
      • Reading from $9FB8-$9FBB in this order returns the 32-bit CPU clock counter, snapshotted at the time $9FB8 is read. Previously the clock counter would remain in motion and the upper counter bits could roll over unpredictably.
      • Writing to $9FB8-$9FBB has new behaviors:
        • $9FB8: resets the cpu clock counter to 0.
        • $9FB9: prints a debug message to the console User debug 1: $xx.
        • $9FBA: prints a debug message to the console User debug 2: $xx.
        • $9FBB: prints the UTF-8 representation of the ISO character to the console. This can be treated like a debug STDOUT.
      • Before using any of these emulator debug registers, it's recommended to test for emulator presence first.
        • Read from $9FBE and $9FBF. When running under the emulator, the returned values should be $31 and $36 respectively. If any other values are returned, you can usually assume to be running on real hardware. While the stock machine doesn't have any I/O devices that listen to the emulator I/O range, an add-on card could choose to use that same address space in the future for its own functions.
    • New MCIOUT (blockwise write) implementation for HostFS, mirroring the feature in the kernal for use on SD card.
    • New command key and capture behavior:
      • Ctrl+M/⇧⌘M is always processed by the emulator to toggle (mouse/keyboard) capture, regardless of the state of the "Disable Emulator Keys" flag.
      • Turning capture mode on disables all other emulator keys until capture mode is toggled off. While capture is on, the emulator also routes most OS shortcut key combos to the X16: for instance, Alt+Tab.

Release 44 ("Milan")

14 Aug 06:55
af2467c
Compare
Choose a tag to compare

Release 44 ("Milan")

This is the third release of x16-emulator by the X16Community team

  • Features/Fixes
    • Many changes to HostFS, including
      • Fix regression for loading ":*" from HostFS while also using an SD card image
      • Fix -prg and -sdcard options working together, which did not properly handle the case after emulator reset
      • Proper wildcard behavior in dir filters and OPEN string
      • Fix filetype directory filter command parsing
      • Add $=L long mode directory listing to emulate the new feature in the ROM.
      • Speed up directory filetype filter
      • Add CMD/SD2IEC style directory navigation: CD:← to enter parent directory
      • Partial emulation of case-insensitivity in filenames on case-sensitive host filesystems.
        • This works in OPEN strings and directory names in commands (CD:, etc.) which do not contain a / character.
        • It also works on the last path segment in relative or absolute paths in directory names or OPEN strings. In other words, if given a path specification containing one or more / characters, it will do only a case-insensitive search on the part after the final /.
      • Proper translation between UTF-8 filenames and their ISO representations.
    • Implement VPB behavior to match hardware [akumanatt]
      • Fix BRK to have VPB behavior
    • Support for additional keycodes (NumLock, Menu) [stefan-b-jakobsson]
    • Fix debugger to set the correct bank for breakpoints [gaekwad]
    • New -fullscreen CLI option
    • Proper cleanup when the emulator exits when in full screen [irmen]
    • FX emulation, which mirrors the features in the FX enhancement to the VERA firmware. See the VERA FX Reference for details.
    • Writing bit 6 and bit 7 together into VERA_AUDIO_CTRL now enables looping the PCM FIFO (and does not reset the FIFO). Any other write into VERA_AUDIO_CTRL disables looping.
    • New -opacity CLI option for window transparency [tstibor]
    • New support for screenshots (Ctrl+P/⌘P) [dressupgeekout]
    • Fix small memory leak caused by pasting into the emulator
    • Use relative mouse motion while in grabbed mode
    • Remove -geos CLI option [dressupgeekout]
    • New YM2151 audio core: remove old MAME core, replace with ymfm
      • Allows for IRQs from the YM, requires specifying -enable-ym2151-irq on the command line
    • Emulate hardware open bus behavior when reading from a device that doesn't exist in the $9Fxx space
    • Reset via I2C command: defer machine reset to the main loop, which allows the I2C write routine to return cleanly.
    • Fix 65C02 BIT immediate behavior [XarkLabs]
    • New NMI trigger emulator hotkey, emulates Ctrl+Alt+Restore on hardware (Ctrl+Backspace/⌘Delete) [XarkLabs]
    • Fix line artifact in application icon/logo
    • Grabbing the mouse with (Ctrl+M/⇧⌘M) now grabs the keyboard as well. It allows the emulator to receive keystrokes and key combinations which would otherwise be intercepted by the operating system.
    • Fix description of fill value in makecart
    • New features implemented in the ROM
  • Build
    • Link-time optimization is now enabled by default
    • Portability enhancements [dressupgeekout]
    • Suppress clang warnings due to deprecated sprintf usage in ymfm lib [XarkLabs]

Release 43 ("Stockholm")

17 May 06:04
bc68572
Compare
Choose a tag to compare

Release 43 ("Stockholm")

This is the second release of x16-emulator by the X16Community team

  • BREAKING CHANGE
    • The keyboard protocol between the emulated SMC and the KERNAL has changed, thus x16-emulator version R43 requires x16-rom version R43.
    • This change also affects how the custom keyboard handler vector works (keyhdl). For details, see Chapter 2 of the Programmer's Reference Guide
    • Your Keyboard will not work unless you are running
      • R43 of both x16-rom and x16-emulator
  • Features
    • Updates to support translation from SDL scancodes to new keynum encoding supported by KERNAL [stefan-b-jakobsson]
    • More granular support for RAM amount as argument to -ram
    • Minor HostFS bugfixes and enhancements, including tying the activity light to HostFS activity.
    • VERA updates: new support for 240p in NTSC/RGB modes. Chroma disable only works on NTSC.
    • Stepping the debugger now supports stepping over WAI
    • Debugger now shows the correct bank in the disassembly by default. [gaekwad]
    • Debugger breakpoints are now bank-specific [gaekwad]
    • Randomized RAM is now the default. New option: -zeroram [irmen]
    • Host's mouse cursor is now shown unless either the KERNAL mouse is enabled or the mouse cursor is captured (Ctrl+M/⇧⌘M).
    • Esc key is now Esc rather than STOP. Pause key sends STOP. (Ctrl+C is also recognized by the KERNAL as STOP)
    • SD card emulation now responds to CMD9
    • Emulated SMC can now assert NMI.
    • Add -mhz option to select a speed other than 8
    • When built with TRACE, the -trace output now shows the effective address for indirect and indexed opcodes and VERA data0/data1 reads and writes.
    • New comamnd line option -midline-effects that supports mid-line changes to the palette or tile/sprite data. R42 always had this behavior, which results in performance degradation for programs write to VERA heavily if the host CPU is not fast enough. This behavior is now disabled by default. -midline-effects restores this optional behavior.
    • New features implemented in the ROM
  • Other
    • Release builds have link-time optimization enabled which seems to help performance.
    • Add git hash of build to -version string.
    • WebAssembly enhancements in the supporting html/js [Cyber-EX]
    • Fixed potential off-by one row with non-zero DC_VSTART.
    • Prevent laggy hostfs reads from causing the emulator to warp to catch up by translating the wall clock time to elapsed 6502 clocks. This effectively makes HostFS MACPTR behave like a DMA card, including the possibility that it prevents the CPU from executing instructions while interrupt sources may have been waiting for service.
    • Bugfix: Process multiple SDL events per frame. (Fixed choppy mouse movement if there were keystrokes in the keyboard buffer)
    • Audio resampling and ring buffer fixes [DragWx]
    • Build fixes on Mac

KNOWN BUGS

In release R43, due to improper parsing of escape tokens, REN will improperly treat arguments to these statements as line numbers:

  • FRAME
  • RECT
  • MOUSE
  • COLOR
  • PSGWAV

x16-emulator-r42 ("Cambridge")

07 Mar 06:22
9565bd8
Compare
Choose a tag to compare

This is the first release of x16-emulator by the X16Community team

  • Features
    • Added testbench mode [stefan-b-jakobsson, indigodarkwolf]
    • Added -noemucmdkeys option [jestin]
    • New FIFO_EMPTY flag in PCM_CTRL to reflect new VERA feature [ZeroByteOrg]
    • Added -widescreen option to simulate stretched 640x480 output at a 16:9 aspect ratio [jestin]
    • New SCANLINE VERA register behavior to reflect updated VERA feature [mooinglemur]
    • Added -randram and -wuninit command line arguments to randomize RAM at boot, and to emit a console warning when uninitialized RAM is read, respectively. [stefan-b-jakobsson]
    • Allow specifying non-power-of-2 argument to -ram, in increments of 8k [JimmyDansbo]
    • Added -via2 option to selectively enable a VIA at $9F10. [akumanatt]
    • Added ROM cart loading with -cart and -cartbin [indigodarkwolf]
    • New makecart utility for building .crt cartridge files [indigodarkwolf]
    • Compressed SD card image support [indigodarkwolf]
    • Mouse grab mode, press Ctrl+M (Mac: ⇧⌘M) to toggle. [mooinglemur]
    • New -fsroot and -startin options to specify the root of the emulated host fs, and the host directory to start in respectively. [mooinglemur]
    • Many, many new features implemented in the ROM
  • Other
    • PS/2 devices now connected via SMC via I2C, I2C pins have moved to match hardware [stefan-b-jakobsson]
    • Recognize middle mouse button [ZeroByteOrg]
    • Synchronized keymaps with ROM [megagrump]
    • Build fixes [irmen]
    • Show dialog when a STP instruction is encountered with debug turned off [akumanatt]
    • Improved emulated behavior of WAI [LRFLEW]
    • Clear D flag on interrupt entry [LRFLEW]
    • Update BRK length in debugger [indigodarkwolf]
    • IRQ/NMI entry clock cycles are now accounted for [mooinglemur]
    • Add reason string to memory dump output [irmen]
    • Clear sprite line buffer when disabling sprite layer [jestin]
    • Improved audio balance between VERA and YM2151. Much improved mixing routines to reduce stutters and clicking. [akumanatt]
    • To match hardware, VERA ISR bits are set at VSYNC, LINE, and SPRCOL regardless of whether their respective IEN bits are set [mooinglemur]
    • Changes to match Proto 4, including moving VIA1 interrupt pin to IRQ [akumanatt]
    • VERA mid-frame raster effects more closely match the timing of real hardware [mooinglemur]
    • Enabled and built out CI/CD build workflows [maxgerhardt, indigodarkwolf, mooinglemur]
    • Many host fs enhancements, bringing host fs very close to feature parity with SD card images [davidgiven, ZeroByteOrg, mooinglemur]
    • Many documentation updates and fixes [veganaize, irmen, tomxp411]