Skip to content

Releases: X16Community/x16-rom

Release 47 ("Roswell")

30 Mar 05:12
6473744
Compare
Choose a tag to compare

Release 47 ("Roswell")

This is a major update with new features and bug fixes. This ROM requires a matching emulator version.

For hardware compatibilty, the following firmware versions are supported by this ROM release:

  • VERA:
    • Recommended: 47.0.2
    • Also supported: 0.3.1, 0.3.2
    • Functional but with known problems: 0.3.3
    • Unsupported: 0.1.1 or older
  • SMC:
    • Recommended: 47.0.0
    • Also supported: 43.0.0
    • Unsupported: 42.0.0 or older

Known bugs:

  • 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.

Changelog:

  • BUILD
    • Removed all 6502/65C02 define switches in the source. [Fulgen301]
    • Removed CODEX.
    • Removed open-roms and related define switches. [Fulgen301]
    • New DIAG memory diagnostics. With support in the SMC (version 47 or higher), a long power button press to turn the system on will memory diagnostics rather than booting the ROM.
  • KERNAL
    • 65C816 CPU support: new indirect vectors, interrupt-handling code, and API. The bulk of the legwork for this support was done by [Fulgen301].
      • The KERNAL's 65C816 support is only active when a 65C816 CPU is detected. On a 65C02, it will still continue to operate as before.
      • The KERNAL still by and large operates as on a 65C02. The BASIC interpreter still runs as if it were on a 65C02 and is unaware of 65C816 code.
      • The indirect vector table at $03xx has been extended to include native mode interrupts, as well as emulation mode COP and ABORT. The KERNAL populates these with native and emulation mode interrupt handlers. When in native mode, the default native ISR handler chains to the emulation mode handler, so native 65C816 applications can still benefit from ISRs that are only aware of 65C02 instructions.
      • With very limited exceptions, the traditional KERNAL API must still be called with 8 bit memory/index registers, and with the stack pointer at $01xx.
      • The jsrfar API call has been made fully 16-bit native capable.
      • A new extapi16 API call at $FEA8 was created for additional 65C816-specific calls, which include informing the KERNAL of stack relocations.
      • Relocated the "MIST" signature due to the overlap with the 65C816 ROM vectors. This is a breaking change for the emulator, so an update to emulator R47 is required.
    • Change timing to improve SNES controller compatibilty. [jburks]
    • When attempting to open IEC device 1 (not implemented on X16), the logical file was erroneously left half-open.
    • When calling monitor via the kernal API ($FECC), exiting the monitor via the run command (G) should now work. [irmen]
    • Rearranged low RAM to free up space for new 65C816 trampolines. The row continuation table (62 bytes) has been transformed into a bitmap (8 bytes). Relocated VARFONTS to bank 0 RAM.
    • The day of week in the RTC was not being set correctly in the rtc_set_date_time function.
    • When opening a file, the KERNAL uploads the current time to DOS/FAT32 in case updating the timestamp on a file when opening for write is needed. With the RTC date functions using an extra byte of ZP now that they pass the day of week, this ZP location was not being properly preserved around the call to DOS.
    • Support for faster/shorter PS/2 I2C transactions if the SMC version is >= 47.x.x. [stefan-b-jakobsson]
    • New extapi KERNAL API call at $FEAB (unrelated to the 65C816 call extapi16) implements an additional API table for miscellaneous kernal calls. The specific call is selected via the .A register, and the rest of the registers can be used for parameters to the call.
      1. clear_status resets the IEC status byte
      2. getlfs useful for getting the last device used
      3. mouse_sprite_offset good for custom mouse cursors where the locus is at a position in the sprite other than x=0, y=0
      4. joystick_ps2_keycodes can remap the keyboard joystick
      5. iso_cursor_char sets the blinking cursor screen code to a character other than $9F while in ISO mode.
      6. ps2kbd_typematic sets the keyboard repeat delay and repeat rate.
      7. pfkey, similar to the C128 PFKEY API call. Within the KERNAL screen editor, the actions of the function keys F1-F8, as well as the SHIFT+RUN action can be changed.
      8. ps2data_fetch is part of the default ISR, and necessary for populating the data for ps2data_mouse_raw, mouse_scan, and kbd_scan.
      9. ps2data_raw returns 0-4 bytes of PS/2 mouse data in r0L-r1H, useful when overriding mouse_scan for handling raw PS/2 mouse events, such as implementing non-traditional mouse controls or relative mouse games. Also returns the last scanned key code.
      10. cursor_blink is part of the default ISR, and handles blinking the cursor in the KERNAL screen editor if appropriate.
      11. led_update is part of the default ISR, and illuminates the SMC activity light based on disk activity.
      12. mouse_set_position sets the mouse cursor X/Y to an absolute position.
    • Solved a race in kbd_scan if a KERNAL call was in progress was interrupted by the default ISR.
    • Removed support for preserving state in the KERNAL ISR for VERA 0.1.1. VERA 0.3.1 is the new minimum version.
    • The LOAD API call halts loading at $9F00 with an out of memory error if the load started in low RAM. This prevents accidentally clobbering the I/O range and crashing the system through loading an excessively large file.
  • DOS
    • Implemented turning on experimental fast reads (auto_tx) and writes for SD card accesses. There are no known problems with this mode, but out of an abundance of caution, the feature is disabled by default. This is implemented via the channel 15 command "U0>Bn" where n is a value from 0 to 3:
      • 0 = Turn off fast reads/writes
      • 1 = Fast reads (auto_tx)
      • 2 = Fast writes
      • 3 = Both
  • FAT32
    • Implemented renaming across directories (file move).
    • Prevent clobbering a directory upon file overwrite. [stefan-b-jakobsson]
  • KEYMAP
    • The PS/2 "MENU" key is now recognized and returns a petscii $06. [stefan-b-jakobsson]
    • The PS/2 "INT'L 1" key is now recognized and can be used in layouts that support it, such as pt-BR. [stefan-b-jakobsson]
  • BASIC
    • Quoted numerics for changing the default device number, such as with DOS"9" should now work. [irmen]
    • LIST output can be paused and unpaused with the space bar. While paused, PgDn and Down will advance the listing by a page and by a line respectively. [zpc0070]
    • Prevent the OLD command from hanging if there is no valid program listing to restore. [JimmyDansbo]
    • The butterfly on the splash screen is now symmetrical. [stefanoborini]
    • New TDATA() and TATTR() functions to return the screen code at specific tile addresses on VERA layer 1. [JimmyDansbo]
    • Calling POKE with pointer functions such as POKE <address>,POINTER(<var>) should now work properly inline. Prior to this change, the expression in the second argument could corrupt the POKE pointer.
    • The splash screen warns if you're using known buggy VERA version 0.3.3.
    • BASIC can now tokenize keywords with lowercase letters in ISO mode.
    • The detected CPU type is now shown in the output of the HELP command.
  • MATH:
    • Implement VAL_1 in the FP library. This singular routine requires all of BASIC zeropage to be intact ($A9-$FF), not just shared BASIC/MATH zeropage ($A9-$D3). [irmen]
  • GRAPH
    • Fix FB_get_pixels and FB_set_pixels overflow when the number of pixels is a multiple of 256. [irmen]
    • GRAPH_put_image is now RAM bank-wrap aware.
  • CHARSET
    • Improve the appearance of some glyphs in the ISO character sets. [akumanatt]
    • Add ANSI character set [tomxp411]
    • Add Cyrillic (ISO-8859-5) character sets. [adiee5]
    • Add Eastern European (ISO-8859-16) character sets. [adiee5]
  • AUDIO
    • Change initialization order to avoid reading uninitialized memory during init.
  • UTILITIES
    • Control Panel: When modifying the vertical scaling, clear the 240p flag if set.
    • Control Panel: Fix date setting bug when the current year is set to a leap year.
    • Control Panel: VERA version is now properly displayed in decimal.
    • Stefan B. Jakobsson's X16-Edit has been updated to fix a few minor bugs.
    • Stefan B. Jakobsson's BASLOAD has been included in the ROM and can be called via X16-Edit.

Release 46 ("Winnipeg")

06 Nov 03:37
c8a4ff1
Compare
Choose a tag to compare

Release 46 ("Winnipeg")

This is mainly a minor bugfix release.

  • KERNAL
    • Changes to the joystick polling routine released with R45 had a bad interaction with the emulator, causing the emulated buttons to shift by one bit. This affects the emulator but not real hardware. The polling sequence and timing were changed to be in line with how it was done in R44. [stefan-b-jakobsson]
    • Caps Lock incorrectly shifted the ' key to " in the ABC/X16 keyboard layout. [stefan-b-jakobsson]
    • mouse_scan had a race against mouse_get, specifically if the KERNAL interrupt service routine happend in the middle of reading out one of the 16-bit values of X/Y, the high and low values could be returned out of sync. [stefan-b-jakobsson]
  • UTILITIES
    • Stefan B. Jakobsson's X16-Edit has been updated to fix a hang that happens if it is launched without an SD card present.

Release 45 ("Nuuk")

17 Oct 05:39
f36deac
Compare
Choose a tag to compare

Release Notes

Release 45 ("Nuuk")

  • META
    • The meaning of the version byte at bank 0 $FF80 has been updated to comport with the original intent of having prereleases as a negative number and releases as a positive number. Release R45 will have 45/$2D in this spot, while later builds should show as -46/$D2 to indicate R46 prerelease. This should make minimum version checking in applications a lot easier for custom builds and for in-between updates.
    • Dependency improvements in the Makefile.
    • lzsa is now a build dependency as it compresses X16-Edit's help text.
    • VERA firmware versions earlier than 0.3.x will display a deprecation warning on the splash screen.
  • KERNAL
    • Paired with updates in SMC firmware 45.1.0, Intellimouse support has been added. This allows for reading the scroll wheel and potentially buttons higher than 3, depending on the mouse type.
    • clock_get_date_time and clock_set_date_time can now return and set the RTC's day of week field. [markjreed]
    • New block-wise write call MCIOUT to complement the block-wise read call MACPTR. This seems to accelerate save type calls by about 5x.
    • CINT call now uploads the default X16 palette to the VERA.
    • New I2C batch read and write commands i2c_batch_read and i2c_batch_write.
  • DOS/FAT32
    • Fully split DOS and FAT32 into two separate banks, freeing up ample space for fixes and enhancements.
    • MCIOUT call implementation for FAT32
  • BASIC
    • new EXEC command plays back scripted input from a RAM location.
    • MENU now produces a menu of built-in applications.
    • Improvements to the layout of the second BASIC bank (annex) allowing for more functions to be moved to this area, making room for new features.
    • new system variable MWHEEL returns the mouse wheel delta since the last call as a signed 8-bit value.
    • new TILE comamnd, making pokes to layer 1 screen memory easier.
    • new EDIT command, invoking the built-in text editor X16-Edit.
    • new sprite-handling commands MOVSPR, SPRITE, and SPRMEM. The first two have parameters which are inspired by the Commodore 128 version of the commands, but their usage is not exactly the same.
    • VPOKE and VPEEK can now be used to reach add-on VERA cards. VRAM banks 2-3 point to a VERA at $9F60 and VRAM banks 4-5 point to a VERA at $9F80.
    • DOS wedge emulation. @, /, and friends can be used in BASIC immediate mode.
    • Chain-LOADing another BASIC program from within a BASIC program was problematic when the second program used variables, as the variable table pointer was not updated after the load. This was a deficiency in BASIC V2, and is now fixed for the Commander X16.
    • A bug has been fixed affecting LINPUT, LINPUT#, and BINPUT#. These statements would spuriously return a STRING TOO LONG error whenever BASIC needed to garbage-collect the string memory before allocating string space to these functions.
    • After a LOAD or BLOAD into banked RAM, the RAM bank that the load ended at is saved as if the user called the BANK command with this value. Prior to this release, the end bank could be immediately read with PEEK(0) after loading, but would be clobbered later on as BASIC would reset the RAM bank to the one set by BANK.
  • MONITOR
    • Improvements related to unwinding the stack to make the PC and register values useful and continuation possible. Making the BRK instruction as a breakpoint useful in some situations.
    • The MONITOR now reuses BASIC's zeropage space, no longer clobbering user ZP $22-$2F
    • New J command for JSR into memory, complementing the G command to continue execution.
  • UTILITIES
    • The 8-Bit Guy's hex editor has been added to the MENU
    • Stefan B. Jakobsson's X16-Edit has been added to the MENU, and is also callable from BASIC's EDIT command, or via an API call in bank 13, making it useful as an editor spawned by other applications.

Release 44 ("Milan")

14 Aug 06:51
c361bde
Compare
Choose a tag to compare
  • KERNAL
    • BREAKING CHANGE
      • The first batch of X16 developer boards were originally shipped without VPB support. The VPB bodge will need to be done before upgrading to ROM version R44 or later. Most of the board owners have been walked through doing the bodge. If you have such an early board (DEV0004-DEV0014) and have not performed the modification, please reach out on the Commander X16 forums or on Discord.
    • Implement a custom callback from the screen editor to intercept, suppress, or remap key events. This is used by the MONITOR to handle scrolling off the top and bottom of the screen when viewing disassembly or memory, but it is also available to user programs.
    • Move NMI/IRQ handler entry into low RAM, which now requires hardware or emulator VPB support. Prior to this change, VPB was optional. [akumanatt]
    • Add PS/2 Menu key to keycode.inc [stefan-b-jakobsson]
    • Validate nvram checksum before fetching keyboard layout [stefan-b-jakobsson]
    • Improve bounds checking when loading the keymap from nvram
    • In the screen editor, pressing Shift+40/80 (Shift+ScrLock) to change outputs now emits a beep code to indicate which output is selected. (Low=VGA, Mid=NTSC, High=RGB)
    • Depending on VERA version, kernal ISR now preserves the FX_CTRL register when doing screen updates (cursor blink, mouse sprite).
    • VERA firmwares without a version number or those older than v0.1.1 will display a deprecation warning at boot.
    • Change joystick scan timing to support more third party SNES controllers. [jburks]
    • Prevent the scroll delay when holding Ctrl from clearing the keyboard buffer. This was resulting in dropped characters after pasting code into the emulator on PC.
    • Scale mouse H/V separately based on screen mode.
    • Set mouse pointer to center of display when activating.
    • Preserve L+R outputs for PSG voice 0 around beep function
  • CHARSET
    • revert accidental deletion of the butterfly glyph from the main ISO character set.
  • DOS
    • Fix bug in C copy command [stefan-b-jakobsson]
    • Add $=L long directory output, which includes both a human readable size (e.g. "16 KB") and a machine readable exact file size (e.g. 0003fa30). The line also includes the FAT attribute byte (e.g. 10), and the modified timestamp in ISO format.
    • Treat , comma as an invalid CMDR-DOS filename character, show as ? in listings.
  • BASIC
    • Fix bug with overbroad REN(UMBER) line number parsing
    • new BANNER statement
    • Honor new end-of-basic address after call to MEMTOP
    • Fix old BASIC garbage collect bug [XarkLabs]
    • Change OLD so that it doesn't try to load AUTOBOOT.X16 [stefan-b-jakobsson]
    • Add YM variant field in the output of the HELP command.
    • The DOS directory listing command will now case-fold any filename characters which appear as shifted PETSCII if the screen editor is in PETSCII mode, which should mitigate most of the problems with lowercase filenames.
    • VAL() can now parse hex ($xxxx) and binary (%xxxxxxxx) literals
  • MONITOR
    • When triggering entry into the monitor via BRK, the displayed PC and registers should now reflect the state upon BRK. The PC will be show as one byte after the BRK instruction.
  • GRAPH
    • Accelerate fb_fill_pixels [stople]
    • Fix uninitialized px/py state in console_init
  • AUDIO
    • Fix logic bug in psg_write_fast routine.
    • Add YM chip type detection logic. ym_init can distinguish between a YM2151 and a YM2164.
  • UTIL
    • Always enable nvram battery backup when exiting MENU [stefan-b-jakobsson]
  • BUILD
    • Portability enhancements [dressupgeekout]
    • Drop GEOS bank
    • Remove stale C64 target

Release 43 ("Stockholm")

17 May 05:58
106489f
Compare
Choose a tag to compare

Release 43 ("Stockholm")

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

  • KERNAL
    • BREAKING CHANGE
      • The keyboard protocol between the SMC and the KERNAL has changed. This release requires a firmware update to the System Management Controller on hardware, or on emulator, release R43 or later.
      • 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 (on emulator)
        • R43 of both x16-rom and x16-smc (on hardware)
    • Build
      • Add git signature to ROM build process
      • Update source to use zp addressing mode where appropriate, which suppresses warnings about using absolute mode for zp addresses.
      • Due to cc65's use of KERNAL RAM locations, .asserts were added to try to stablize RAM locations that are hardcoded in cc65's constants file.
    • Hardware support
      • Additional support for display preferences and keymap stored in nvram
      • Support VPB. Hardware with this design sets the hardware ROM bank to 0 immediately before reading a ROM vector. The previous ROM bank will still be in zp $01 upon interrupt handler entry.
      • Bugfix: fix joysticks always being detected
    • Editor/Display
      • New bordered screen modes to support CRTs
      • New behavior for the END key. END will go to the end of the current line. Shift+END will go to the last line on the screen.
      • PS/2 Delete key now deletes the character underneath the cursor.
      • Blinking cursor should be more visible during movement.
      • Support for automatically setting 240p in NTSC and RGB modes for screen modes that are scaled 2x vertically.
      • New skinny PET style PETSCII and ISO charsets.
      • Replace bold ISO charset [akumanatt]
    • BASIC
      • New logo splash logic for smaller screen modes
      • Show git signature in BASIC splash screen under non-releases
      • REBOOT and RESET behaviors swapped.
      • Add "I" (instrument) to playstring macros for FMPLAY, PSGPLAY, and friends.
      • Bugfix: If unable to read color pref from nvram, use the default white on blue.
      • Show DOS status after SAVE and DOS commands.
      • Modify the output of F-keys in the BASIC editor. Removed F9 for keymap cycling.
      • Bugfix: Better support for reading CBM drives' status with the DOS command.
      • Make FRE(n) always return a positive value.
      • New BANNEX (BASIC annex) for overflow code from BASIC.
      • New commands:
        • MENU - load utility
        • REN - renumber BASIC program
        • LINPUT - Read line from keyboard
        • LINPUT# - Read delimited data from file
        • BINPUT# - Read fixed-length data from file
        • HELP - Show short help blurb and hardware versions.
      • New functions:
        • POINTER() - return pointer to variable structure
        • STRPTR() - return pointer to string variable's data
        • RPT$() - return a string made up of a repeated byte
    • MONITOR
      • Bugfix: Better support for reading CBM drives' status with the @ command
      • Bugfix: Clear bank flags at init [stefan-b-jakobsson]
    • API
      • Allow sprite_set_position to retain existing priority/flip values in attribyte byte 6.
    • GRAPH
      • Fully implement fb_fill_pixels [stople]

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

r42

07 Mar 06:15
f0c27ee
Compare
Choose a tag to compare
r42
Merge pull request #42 from mooinglemur/20230306-r42changelog

[README] R42 Changelog