Skip to content

Releases: commanderx16/x16-emulator

x16-emulator-r41 ("Marrakech")

16 May 05:36
Compare
Choose a tag to compare

Main differences:

  • New BASIC BLOAD, BVLOAD and BVERIFY commands for header-less loading
  • Improved default keyboard

Emulator:

  • allow apps to intercept Cmd/Win, Menu and Caps-Lock keys
  • fixed -prg with -sdcard
  • fixed loading from host filesystem (length reporting by MACPTR on EOI)
  • macOS: support for older versions like Catalina (10.15)

ROM:

  • KERNAL
    • keyboard
      • added 16 more keyboard layouts (28 total)
      • default layout ("ABC/X16") is now based on Macintosh "ABC - Extended" (full ISO-8859-15, no dead keys)
      • "keymap" API to activate a built-in keyboard layout
      • custom keyboard layouts can be loaded from disk (to $0:$A000)
      • Caps key behaves as expected
      • support for Shift+AltGr combinations
      • support for dead keys (e.g. ^ + e = ê)
      • PgUp/PgDown, End, Menu and Del generate PETSCII codes
      • Numpad support
      • Shift+Alt toggles between charsets (like C64)
      • Editor: "End" will position cursor on last line
    • VERA source/target support for memory_fill, memory_copy, memory_crc, memory_decompress [with PG Lewis]
    • fixed headerless load for verify/VRAM cases [Mike Ketchen]
    • don't reset screen colors on mode switch
  • BASIC:
    • BLOAD, BVLOAD and BVERIFY commands for header-less loading [ZeroByteOrg]
    • KEYMAP command to change keyboard layout
    • support DOS8..DOS31 (and A=9:DOSA etc.) to switch default device
    • MOUSE and SCREEN accept -1 as argument (was: $FF)
    • Changed auto-boot filename from AUTOBOOT.X16* to AUTOBOOT.X16
  • Monitor:
    • fixed RMB/SMB disassembly
  • Charset:
    • X16 logo included in ISO charset, code $AD, Shift+Alt+k in ISO mode

x16-emulator-r40 ("Bonn")

29 Apr 14:12
Compare
Choose a tag to compare

Main differences:

  • behavior of host filesystem and SD card is almost identical now
  • fixed monitor scrolling and disk commands
  • fixed RTC
  • fixed CodeX

Emulator:

  • Features
    • improved VERA video timings [Natt Akuma]
    • added Host FS bridging using IEEE API
    • added Serial Bus emulation [experimental]
  • Other
    • Fixed I2C (RTC, SMC)
    • LST support for -trace

ROM:

  • KERNAL
    • Features
      • NMI & BRK will enter monitor
      • added ':' to some F-key replacements
      • allow scrolling screen DOWN: PRINTCHR$($13)CHR$($91)
      • Serial Bus works on hardware
    • Bugs
      • fixed SA during LOAD
      • fixed joystick routine messing with PS/2 keyboard [Natt Akuma]
    • API
      • keyhandler vector ($032E/$032F) doesn't need to return Z
      • PLOT API will clear cursor
  • DOS
    • better detection of volume label
    • fixed $=P (list partitions), $*=P/D (dir filtering), hidden files
  • MONITOR
    • fixed F3/F5 and CSR UP/DOWN auto-scrolling
    • fixed LOAD, SAVE, @
  • CodeX
    • works this time! [mjallison42]

x16-emulator-r39 ("Buenos Aires")

29 Mar 21:05
Compare
Choose a tag to compare

Known issues (fixed in repo):

  • CodeX does not work
  • RTC does not work
  • Emulator reports r38 (ROM correctly reports r39)

Main differences:

  • Switch to Proto2 Hardware
    • banking through zp addresses 0 and 1
    • modified I/O layout
    • modified VIA GPIO layout
    • support for 4 controllers
    • I2C bus with SMC and RTC/NVRAM
  • ROM Changes:
    • SD card and banked LOAD fixes
    • 320x240 framebuffer (mode $80/128)
    • 80x30,40x60,40x30,40x15,20x30,20x15 text modes
    • more powerful keyboard APIs
    • full SNES-like keyboard joystick
    • BASIC LOCATE
  • CodeX Interactive Assembly Environment
  • macOS emulator is now universal Intel/ARM, Windows emulator is now 64 bit

Compatibility notes: You'll need to update your code if you

  • changed ROM or RAM banks by writing VIA registers (it's $00/$01 now)
  • accessed VIAs directly (different location)
  • used SCREEN or JOY in BASIC, the API has changed
  • used screen_set_mode, the API has changed
  • used the floating point Math library, the API has changed

See the Programmer's Reference Guide for details.

Emulator:

  • Features
    • implemented VIA timers [Natt Akuma]
    • added option to disable sound [Jimmy Dansbo]
    • added support for Delete, Insert, End, PgUp and PgDn keys [Stefan B Jakobsson]
    • debugger scroll up & down description [Matas Lesinskas]
    • added anti-aliasing to VERA PSG waveforms [TaleTN]
  • Bugs
    • fixed sending only one mouse update per frame [Elektron72]
    • fixed VSYNC timing [Elektron72]
    • switched front and back porches [Elektron72]
    • fixed LOAD/SAVE hypercall so debugger doesn't break [Stephen Horn]
    • fixed YM2151 frequency from 4MHz ->3.579545MHz [Stephen Horn]
    • do not set compositor bypass hint for SDL Window [Stephen Horn]
    • reset timing after exiting debugger [Elektron72]
    • don't write nvram after every frame
    • fixed write outside of line buffer [Stephen Horn]
    • fixed BRA extra CPU cycle [LRFLEW]
    • fix: clear layer line once layer is disabled
    • fixed BBSx/BBRx timing [Natt Akuma]
  • Other
    • misc speed optimizations [Stephen Horn]

ROM:

  • KERNAL
    • Adaptation to match Proto 2 Hardware
      • support for 4 SNES controllers
      • 512 KB ROM instead of 128 KB
      • new I/O layout
      • PS/2 and SNES controller GPIOs layout
      • banking through $00 and $01
    • Proto 2 Hardware Features
      • I2C bus (driver by Dieter Hauer, 2-clause BSD)
      • SMC: reset and shutdown support
      • RTC: DA$/TI$ and KERNAL APIs bridge to real-time-clock
    • Screen Features
      • New screen_mode API allows setting and getting current mode and resolution
      • support for 320x240 framebuffer (mode $80/128) [with gaekwad]
      • added 80x30,40x60,40x30,40x15,20x30,20x15 text modes (note new numbers!)
    • Keyboard Features
      • added KERNAL vector to allow intercepting PS/2 codes [Stefan B Jakobsson]
      • added kbdbuf_peek, kbdbuf_get_modifiers, kbdbuf_put API
    • Other Features
      • support for LOADing files without 2-byte PRG header [Elektron72]
      • support for LOAD into banked RAM (acptr and macptr)
      • support BEL code (PRINT CHR$(7))
      • keyboard joystick (joystick 0) supports all SNES buttons
      • support for 4 SNES controllers (joystick 1-4) [John J Bliss]
    • Bugs
      • fixed crash in FB_set_pixels for count>255 [Irmen de Jong]
      • fixed bank switching macros [Stephen Horn]
      • fixed preserving P in JSRFAR [CasaDeRobison]
      • fixed race condition in joystick_get [Elektron72]
      • removed ROM banking limitations from JSRFAR and FETVEC [Elektron72, Stefan B Jakobsson]
      • fixed disabling graphics layer when returning to text mode [Jaxartes]
      • fixed default cursor color when switching to text mode
      • reliable mouse_config support for screen sizes
  • Math
    • renamed "fplib" to "math"
    • made Math package compatible with C128/C65, but fixing FADDT, FMULTT, FDIVT, FPWRT
  • BASIC
    • Features
      • added BIN$ & HEX$ functions [Jimmy Dansbo]
      • added LOCATE statement
    • Bugs/Optimizations
      • removed extra space from BASIC error messages [Elektron72]
      • fixed DA$ and TI$ when accessed together or with BIN$()/HEX$() [Jaxartes]
      • fixed null handling in GET/READ/INPUT [Jaxartes]
      • fixed bank setting in VPOKE and VPEEK [Jaxartes]
      • fixed optional 'color' argument parsing for LINE, FRAME, RECT
  • DOS
    • reliable memory initialization
    • fixed writing LFN directory entries across sector boundary
    • fixed missing partitions ($=P) if type is $0B
    • fixed loading to the passed-in address when SA is 0 [gaekwad]
    • fixed problem where macptr would always return C=0, masking errors
  • GEOS
    • text input support
  • CodeX
    • integrated CodeX Interactive Assembly Environment into ROM [mjallison42]

x16-emulator-r38 ("Kyoto")

26 Aug 19:23
Compare
Choose a tag to compare

Main differences:

  • faster
  • VERA accuracy improvements
  • better SD card emulation
  • ROM: full-featured DOS implementation (SD card)

You can attach an SD card image with -sdcard; there is a sample image in sdcard.img.zip. See x16-emulator README on how to mount it on Mac/Linux/Windows, and CMDR-DOS README for the supported DOS features.

Emulator:

  • CPU
    • added WAI, BBS, BBR, SMB, and RMB instructions [Stephen Horn]
  • VERA
    • VERA speed optimizations [Stephen Horn]
    • fixed raster line interrupt [Stephen Horn]
    • added sprite collision interrupt [Stephen Horn]
    • fixed sprite wrapping [Stephen Horn]
    • added VERA dump, fill commands to debugger [Stephen Horn]
    • fixed VRAM memory dump [Stephen Horn]
  • SD card
    • SD card write support
    • Ctrl+D/Cmd+D detaches/attaches SD card (for debugging)
    • improved/cleaned up SD card emulation [Frank van den Hoef]
    • SD card activity/error LED support
    • VERA-SPI: support Auto-TX mode
  • misc
    • added warp mode (Ctrl+'+'/Cmd+'+' to toggle, or -warp)
    • added '-version' shell option [Alice Trillian Osako]
    • new app icon [Stephen Horn]
    • expose 32 bit cycle counter (up to 500 sec) in emulator I/O area
    • zero page register display in debugger [Mike Allison]
    • Various WebAssembly improvements and fixes [Sebastian Voges]

ROM:

  • KERNAL
    • new macptr API to receive multiple bytes from an IEEE device
    • load uses macptr for LOAD speeds from SD card of about 140 KB/sec
    • hacked (non-functional) Commodore Serial to not hang
    • LOAD on IEEE without fn defaults to ":*"; changed F5 key to "LOAD"
    • fixed screen_set_charset custom charset [Rebecca G. Bettencourt]
    • fixed stash to preserve A
    • entropy_get: better entropy
  • FPLIB
    • optimized addition, multiplication and SQR [Michael Jørgensen]
    • ported over INT(.9+.1) = 0 fix from C128
  • BASIC
    • updated power-on logo to match the real X16 logo better
    • like LOAD/SAVE, OPEN now also defaults to last IEEE device (or 8)
    • fixed STOP key when showing directory listing (DOS"$")
  • CHARSET
    • changed PETSCII screen codes $65/$67 to PET 1/8th blocks
  • DOS
    • switched to FAT32 library by Frank van den Hoef
    • rewrote most of DOS ("CMDR-DOS"), almost CMD FD/HD feature parity
      • write support
      • new "modify" mode ("M") that allows reading and writing
      • set-position support in PRG files (like sd2iec)
      • long filenames, full ISO-8859-15 translation
      • wildcards
      • subdirectories
      • partitions
      • timestamps
      • overwriting ("@:")
      • directory listing filter
      • partition listing
      • almost complete set of commands ("scratch", "rename", ...)
      • formatting a new filesystem ("new")
      • activity/error LED
      • detection of SD card presence, fallback to Commodore Serial
      • support for switching SD cards
      • details in the CMDR-DOS README
    • misc fixes [Mike Ketchen]

x16-emulator-r37 ("Geneva")

22 Mar 16:14
Compare
Choose a tag to compare

Main differences:

  • Emulator support for VERA PCM and PSG audio
  • YM audio enabled by default in the emulator
  • BREAKING CHANGE: The register layout of the VERA graphics chip has changed significantly. See the VERA Programmer's Reference for details: https://github.com/commanderx16/x16-docs
  • The VERA UART has been removed from the emulator (FPGA constraints).

Emulator:

  • VERA 0.9 register layout [Frank van den Hoef]
  • audio [Frank van den Hoef]
    • VERA PCM and PSG audio support
    • YM2151 support is now enabled by default
    • added -abufs to specify number of audio buffers
  • removed UART [Frank van den Hoef]
  • added window icon [Nigel Stewart]
  • fixed access to paths with non-ASCII characters on Windows [Serentty]
  • SDL HiDPI hint to fix mouse scaling [Edward Kmett]

ROM:

  • API features
    • console
      • new: console_put_image (inline images)
      • new: console_set_paging_message (to pause after a full screen)
      • now respects window insets
      • try "TEST1" and "TEST2" in BASIC!
    • new entropy_get API to get randomness, used by FPLIB/BASIC RND function
  • KERNAL
    • support for VERA 0.9 register layout (Frank van den Hoef)
  • BASIC
    • TI$ and DA$ (DATE$) are now connected to the new date/time API
    • TI is independent of TI$ and can be assigned
  • DOS
    • enabled partition types 0x0b and 0x0c, should accept more image types
  • Build
    • separated KERNAL code into core code and drivers
    • support for building KERNAL for C64
    • ROM banks are built independently
    • support to replace CBM channel and editor code with GPLed "open-roms" code by the MEGA65 project
  • bug fixes
    • LOAD respects target address
    • FAT32 code no longer overwrites RAM
    • monitor is not as broken any more

x16-emulator-r36 ("Berlin")

03 Jan 23:56
Compare
Choose a tag to compare

Main differences:

BREAKING CHANGES:

  • The host filesystem interface is now on device 8, also, device 8 is the default for LOAD and SAVE. So if you don't specify a device number, LOAD and SAVE behave as before. If an SD card is attached (-sdcard), the host filesystem interface is disabled, and the SD card is used instead.
  • GRAPH_init needs to be called with r0 = 0 for the r35 behavior.
  • GRAPH_get_char_size behaves differently for control characters. See documentation for details.

A lot of new APIs have been added:

  • sprites
  • console
  • memory

See the Programmer's Reference Guide for details on the new and changed APIs:

https://github.com/commanderx16/x16-docs

Emulator:

  • added VERA UART emulation (-uart-in, -uart-out)
  • correctly emulate missing SD card
  • moved host filesystem interface from device 1 to device 8, only available if no SD card is attached
  • require numeric argument for -test to auto-run test
  • fixed JMP (a,x) for 65c02
  • Fixed ESC as RUN/STOP [Ingo Hinterding]

ROM:

  • API Features

    • added console API for text-based interfaces with proportional font and styles support: console_init, console_put_char, console_get_char
    • added memory API:
      • memory_fill
      • memory_copy
      • memory_crc
      • memory_decompress (LZSA2)
    • added sprite API: sprite_set_image, sprite_set_position
    • renamed GRAPH_LL to FB (framebuffer)
    • GRAPH_init takes an FB graphics driver as an argument
  • KERNAL features

    • detect SD card on TALK and LISTEN, properly fall back to serial
    • joystick scanning is done automatically in VBLANK IRQ; no need to call it manually any more
    • added VERA UART driver (device 2)
    • bank 1 is now the default after startup; KERNAL won't touch it
    • sprites and layer 0 are cleared on RESET
    • changed F5 to LOAD":* (filename required for IEEE devices)
    • GRAPH_move_rect supports overlapping [gaekwad]
  • BASIC

    • default LOAD/SAVE device is now 8
    • added RESET statement [Ingo Hinterding]
    • added CLS statement [Ingo Hinterding]
  • CHARSET

    • fixed capital Ö [Ingo Hinterding]
    • Changed Û, î, ã to be more consistent [Ingo Hinterding]
  • bug fixes

    • COLOR statement with two arguments
    • PEEK for ROM addresses
    • keyboard code no longer changes RAM bank
    • fixed clock update
    • fixed side effects of Ctrl+A and color control codes [codewar65]
  • misc

    • added 3 more tests, start with "TEST1"/"TEST2"/"TEST3" in BASIC:
    • TEST0: existing misc graphics test
    • TEST1: console text rendering, character wrapping
    • TEST2: console text rendering, word wrapping
    • TEST3: console text input, echo

x16-emulator-r35

20 Dec 15:53
Compare
Choose a tag to compare

Main differences:

BREAKING CHANGES:

  • The zero page and $0200+ layouts have changed once again. From now on, they will not remain stable. New KERNAL APIs will be added to replace direct variable access.
  • RAM bank 0 ($A000-$BFFF) is now used for KERNAL variables. Applications should use banks 1 and above.

A lot of new APIs were added to the KERNAL. You can now draw to the 320x200@256c screen from assembly without touching VERA registers. The graphics API can also draw proportional text (using the built-in font, or a user-supplied font in GEOS format), and supports most PETSCII control codes.

The Programmer's Reference Guide describes all new KERNAL calls:

https://github.com/commanderx16/x16-docs

Known Issues:
The built-in monitor has several regressions.

Emulator:

  • video optimization [Neil Forbes-Richardson]
  • added '-geos' to launch GEOS on startup
  • added '-test' to launch (graphics) unit test on startup
  • debugger
    • switch viewed RAM/ROM bank with numpad + and numpad - [Kobrasadetin]
    • optimized character printing [Kobrasadetin]
  • trace mode:
    • prepend ROM bank to address in trace
    • also prints 16 bit virtual regs (graph/GEOS)
  • fixes
    • initialize memory to 0 [Kobrasadetin]
    • fixed SYS hex argument
    • disabled "buffer full, skipping" and SD card debug text, it was too noisy

ROM:

  • API Fetures

    • new KERNAL API: low-level and high-level 320x200@256c bitmap graphics
    • new KERNAL API: get mouse state
    • new KERNAL API: get joystick state
    • new KERNAL API: get/set date and time (old RDTIM call is now a 24 bit timer)
    • new floating point API, jump table at $FC00 on ROM bank 4 (BASIC)
  • KERNAL Features

    • invert fg/bg color control code (Ctrl+A) [Daniel Mecklenburg Jr]
  • BASIC

    • added COLOR <fg, bg> statement to set text color
    • added JOY(n) function (arg 1 for joy1, arg 2 for joy2)
    • added TEST statement to start graphics API unit test
    • CHAR statement supports PETSCII control codes (instead of GEOS control codes), including color codes
  • misc

    • KERNAL variables for keyboard/mouse/clock drivers were moved from $0200-$02FF to RAM bank #0
    • $8F (set PETSCII-UC even if ISO) printed first after reset [Mikael O. Bonnier]
  • bug fixes:

    • got rid of $2c partial instruction skip [Joshua Scholar]
    • fixed TI/TI$
    • fixed CDBOS infinite loop
    • zp address 0 is no longer overwritten by mouse code
    • mouse scanning is disabled if mouse is off
    • VERA state is correctly saved/restored by IRQ code

x16-emulator-r34

03 Nov 09:26
Compare
Choose a tag to compare

Main differences:

BREAKING CHANGE: The zero page and $0200+ layout has changed completely and is now incompatible with the C64.

Emulator:

  • PS/2 mouse
  • support for text mode with tiles other than 8x8 [Serentty]
  • fix: programmatic echo mode control [Mikael O. Bonnier]

ROM:

  • new layout for zero page and KERNAL/BASIC variables:
    • $00-$7F available to the user
    • ($02-$52 are used if using BASIC graphics commands)
    • $80-$A3 used by KERNAL and DOS
    • $A4-$A8 reserved for KERNAL/DOS/BASIC
    • $A9-$FF used by BASIC
  • new BASIC statements:
    • SCREEN <mode> (0: 40x30, 2: 80x60, 128: graphics)
    • PSET <x>, <y>, <color>
    • LINE <x1>, <y1>, <x2>, <y2>, <color>
    • FRAME <x1>, <y1>, <x2>, <y2>, <color>
    • RECT <x1>, <y1>, <x2>, <y2>, <color>
    • CHAR <x>, <y>, <color>, <string>
    • MOUSE <n> (0: off, 1: on)
  • new BASIC functions:
    • MX (mouse X coordinate)
    • MY (mouse Y coordinate)
    • MB (mouse button; 1: left, 2: right, 4: third)
  • new KERNAL calls:
    • MOUSE: configure mouse
    • SCRMOD: set screen mode
  • new PS/2 mouse driver
  • charsets are uploaded to VERA on demand
  • GEOS font rendering uses less slant for faux italics characters
  • misc GEOS KERNAL improvements and optimizations

x16-emulator-r33

12 Oct 01:04
Compare
Choose a tag to compare

Main differences:

BREAKING CHANGE: The contents of the ROM banks have changed: KERNAL: 0, KEYBD: 1, CBDOS: 2, GEOS: 3, BASIC: 4.

Emulator:

  • significant performance optimizations
  • VERA
    • enabled all 128 sprites
    • correct sprite zdepth
    • support for raster IRQs
  • SDL controller support using -joy1 and -joy2 [John J Bliss]
  • 65C02 BSD fixes [Norman B. Lancaster]
  • feature parity with new LOAD/VLOAD features [John-Paul Gignac]
  • default RAM and ROM banks are now 0, matching the hardware
  • GIF recording can now be controlled from inside the machine [Randall Bohn]
  • Debugging
    • Major enhancements to the debugger [kktos]
    • -echo will now encode non-printable characters like this: \X93 for CHR$(93), -bas as well as pasting accepts this convention again
    • -echo raw for the original behavior
    • -echo iso to for correct character encoding in ISO mode
    • -ram to specify RAM size; now defaults to 512

ROM:

  • BASIC
    • additional LOAD syntax to load to a specific address LOAD [filename[,device[,bank,address]]]
    • LOAD into banked RAM will auto-wrap into successive banks
    • LOAD allows trailing gargabe; great to just type "LOAD" into a directory line [John-Paul Gignac]
    • new BASIC statement: VLOAD to load into video RAM: VLOAD [filename[,device[,bank,address]]] [John-Paul Gignac]
    • complete jump table bridge
  • KERNAL: memory size detection
  • KERNAL: faster IRQ entry
  • GEOS: converted graphics library to VERA 320x200@256c

Known Issues:

  • Emulator: LOAD"$ (and LOAD"$",1) will show host uppercase filenames as garbage. Use Ctrl+o to switch to ISO mode for a workaround.
  • Shift+AltGr keyboard combinations don't work

x16-emulator-r32

27 Sep 11:27
Compare
Choose a tag to compare

Main differences:

BREAKING CHANGE: ROM banking now follows the updated specification: All of $C000-$FFFF is bankable ROM (8 banks, 16 KB each, for a total of 128 KB), and there is no more fixed ROM. Machine language programs started with "SYS" will have the BASIC ROM mapped at $C000-$FFFF and have to write #7 to $9F61 to switch to the KERNAL ROM. The KERNAL API $FF81+ is supported both from the BASIC ROM and the KERNAL ROM, but it's faster from the KERNAL ROM, and the extended API is only available from the KERNAL ROM.

Emulator:

  • correct ROM banking
  • VERA emulation optimizations [Stephen Horn]
  • added -dump option to allow writing RAM, CPU state or VERA state to disk [Nils Hasenbanck]
  • added -quality option to change scaling algorithm; now defaults to "best" [Maurizio Porrato]
  • output of -echo can now be fed into UNIX pipes [Anonymous Maarten]
  • relative speed of emulator is shown in the title if host can't keep up [Rien]
  • fix: 6502 BCD arithmetic [Rien]
  • fix: colors (white is now white) [Rien]
  • fix: sprite flipping [jjbliss]

ROM:

  • correct ROM banking:
    • BASIC and KERNAL now live on separate 16 KB banks ($C000-$FFFF)
    • BASIC "PEEK" will always access KERNAL ROM
    • BASIC "SYS" will have BASIC ROM enabled
  • added GEOS statement
  • added OLD statement to recover deleted BASIC program after NEW or RESET
  • removed software RS-232, will be replaced by VERA UART later
  • Full ISO mode support in Monitor

Known Issues:

  • F4 to switch between 40 and 80 column has no effect
  • Emulator: LOAD"$ (and LOAD"$",1) will show host uppercase filenames as garbage. Use Ctrl+o to switch to ISO mode for a workaround.
  • Shift+AltGr keyboard combinations don't work