Releases: commanderx16/x16-emulator
x16-emulator-r41 ("Marrakech")
Main differences:
- New BASIC
BLOAD
,BVLOAD
andBVERIFY
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
- keyboard
- BASIC:
BLOAD
,BVLOAD
andBVERIFY
commands for header-less loading [ZeroByteOrg]KEYMAP
command to change keyboard layout- support
DOS8
..DOS31
(andA=9:DOSA
etc.) to switch default device MOUSE
andSCREEN
accept -1 as argument (was: $FF)- Changed auto-boot filename from
AUTOBOOT.X16*
toAUTOBOOT.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")
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
- Features
- 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")
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
orJOY
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
- Adaptation to match Proto 2 Hardware
- 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
- Features
- 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")
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]
- added warp mode (Ctrl+'+'/Cmd+'+' to toggle, or
ROM:
- KERNAL
- new
macptr
API to receive multiple bytes from an IEEE device load
usesmacptr
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
- new
- 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")
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
- console
- 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")
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
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
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
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
- additional LOAD syntax to load to a specific address
- 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
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