Skip to content
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]
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
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
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
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
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
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
Compare
Choose a tag to compare

Main differences:

  • BREAKING CHANGE: VERA 0.8 register layout. All programs accessing VERA (VPOKE, vera_lo/mid/hi) need to be updated! Check the VERA Reference for more info: https://github.com/commanderx16/x16-docs/blob/master/VERA%20Programmer's%20Reference.md
  • ISO mode: hit Ctrl+o to switch to ISO mode: the character encoding is now ASCII/ISO-8859-15, and you can enter and print the following characters: "¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ". You will need to enter BASIC keywords in upper case!

Emulator:

  • VERA 0.8 register layout
  • removed "-char" (character ROM is now part of rom.bin)
  • GIF recording using -gif [Neil Forbes-Richardson]
  • numpad support [Maurizio Porrato]
  • fake support of VIA timers to work around BASIC RND(0)
  • default ROM is taken from executable's directory [Michael Watters]
  • emulator window has a title [Michael Watters]
  • -debug allows specifying a breakpoint [Frank Buss]
  • package contains the ROM symbols in rom.txt
  • support for VERA SPI

ROM:

  • switched to VERA 0.8 register layout; character ROM is uploaded on startup
  • ISO mode: ISO-8859-15 character set, standard ASCII keyboard
  • keyboard
    • completed US and UK keymaps so all C64 characters are reachable
    • support for AltGr
    • support for F9-F12
  • allow hex and binary numbers in DATA statements [Frank Buss]
  • switched SD card from VIA SPI to VERA SPI (works on real hardware!)
  • fix: VPEEK overwriting POKER ($14/$15)
  • fix: STOP sometimes not registering in BASIC programs

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
Compare
Choose a tag to compare

Emulator:

  • VERA can now generate VSYNC interrupts
  • added -keymap for setting the keyboard layout
  • added -scale for integer scaling of the window [Stephen Horn]
  • added -log to enable various logging features (can also be enabled at runtime (POKE $9FB0+) [Randall Bohn])
  • changed -run to be an option to -prg and -bas
  • emulator detection: read $9FBE/$9FBF, must read 0x31 and 0x36
  • fix: -prg and -run no longer corrupt BASIC programs.
  • fix: LOAD,1 into RAM bank [Stephen Horn]
  • fix: 2bpp and 4bpp drawing [Stephen Horn]
  • fix: 4bpp sprites [MonstersGoBoom]
  • fix: build on Linux/ARM

ROM:

  • support for 13 keyboard layouts; cycle through them using F9
  • GETJOY call will fall back to keyboard (cursor/Ctrl/Alt/Space/Return), see Programmer's Reference Guide on how to use it
  • startup message now shows ROM revision
  • $FF80 contains the prerelease revision (negated)
  • the 60 Hz IRQ is now generated by VERA VSYNC
  • fix: VPEEK tokenization
  • fix: CBDOS was not correctly preserving the RAM bank
  • fix: KERNAL no longer uses zero page $FC-$FE

Known Issues:

  • Emulator: LOAD"$ (and LOAD"$",1) will show host uppercase filenames as garbage. Use Ctrl+N to switch to the X16 upper/lower character set for a workaround.
  • BASIC: $ and % prefixes don't work for DATA entries
  • RND(0) always returns 0
Compare
Choose a tag to compare

Emulator:

  • better keyboard support: if you pretend you have a US keyboard layout when typing, all keys should now be reachable [Paul Robson]
  • -debug will enable the new debugger [Paul Robson]
  • runs at the correct speed (was way too slow on most machines)
  • keyboard shortcuts work on Windows/Linux: Ctrl + F/R/S/V
  • Ctrl + V pastes the clipboard as keypresses
  • -bas file.txt loads a BASIC program in ASCII encoding
  • -echo prints all BASIC/KERNAL output to the terminal, use it with LIST to convert a BASIC program to ASCII
  • -run acts like -prg, but also autostarts the program
  • JMP $FFFF and SYS 65535 exit the emulator and save memory the host's storage
  • the packages now contain the current version of the Programmer's Reference Guide (HTML)
  • fix: on Windows, some file load/saves may be been truncated

ROM:

  • fixed BRK handling in the monitor

Known issues:

  • Emulator: LOAD"$ (and LOAD"$",1) will show host uppercase filenames as garbage. Use Ctrl+N to switch to the X16 upper/lower character set for a workaround.
  • Emulator: -prg and -run may corrupt BASIC programs. Use the LOAD command in BASIC instead.
  • BASIC: $ and % prefixes don't work for DATA entries
  • KERNAL: The LOAD KERNAL API ignores the current RAM bank.
  • VPEEK might print errors in certain cases.