Repository navigation
UltimateBasic 64 1.6.2
Ultimate Basic v1.6.2 – Release Notes
2026-10-04 – Release 1.6.2: tracker instruments
New (tune ... end)
- imod id, vibdelay, vibspeed, vibdepth, pwmspeed, pwmmin, pwmmax:
instrument vibrato (triangle LFO after a delay, depth scaled to the
note's semitone) and pulse width modulation between min and max. - ifilt id, cutend, sweep, pingpong: filter cutoff sweep from the inst
cutoff toward cutend, sweep per frame, optionally back and forth. - igate id, gatetimer, hardrestart, firstwave: gate released gatetimer
frames before the next note, hard restart also zeroes ADSR, firstwave
is written on a note's first frame ($09 = test + gate). - itab id, speed, loop, "WW +n" / ".. -n" / "WW =n": wave / arpeggio
table (up to 32 steps), one step every speed frames, loop step or 255. - inst ctrl may carry ring modulation ($04) / sync ($02); modevol bit 7
= voice 3 off.
Changed - The player now works every frame (tables, vibrato, PWM, gate timer,
filter sweep). Filter routing is per voice: the voice that starts a
filter-routed instrument owns cutoff / resonance / mode, $D417 routes
every voice whose instrument is filter-routed. A tune blob is about
2.5 KB of player code plus its data. - Same algorithm as the Visual Assembler SID editor's player; the new
tests/tune_player.rs compares the SID registers frame by frame with
a trace of the editor's engine.
2026-10-03 – Release 1.6.1: smooth scrolling maps
New
- map view px, py: shows the loaded map at a pixel position, once per
frame (instead of wait raster). XSCROLL / YSCROLL with 38 columns /
24 rows, two screen buffers ($0400 / $3C00) swapped at char steps,
the next char cell built two frames ahead, color RAM copied in two
halves behind / ahead of the raster beam: smooth and tear-free in
every direction. Sprite pointers are copied to both buffers. - map load reads a VisualAssembler Level Editor project (.bin) and
composes its screens into one map (max 6x10 screens, 255x255 cells). - map load "file", addr: the map data goes to a fixed address (like
incbin "file", addr) instead of inline in the code. - Compile errors: map view without map load, maps smaller than 40x25,
program code reaching into $3C00-$3FFF. - Example: examples/level_scroll_demo.ub.
Fixes
- A byte product or shift assigned to a word variable inside a sum
was truncated to 8 bits (py = cy * 8 + fy gave 67 instead of 323
for cy = 40, fy = 3); it is now computed in 16 bits, like a lone
product. w = b shl n keeps 16 bits too. - A constant multiplier above 255 was cut to 8 bits (cy * 300); the
16-bit operand now always takes the multiplicand side.