-------------------------------------------------------------------------------------------- PICOTRON VERSION HISTORY -------------------------------------------------------------------------------------------- 0.1.0g Added: pause menu for fullscreen programs (ENTER -> continue, toggle sound, reset cartridge, exit) Added: file extension associations. To specify a default app: default_app vgfx /apps/tools/veditor.p64 Added: shortcuts: ctrl-home, ctrl-end in code/text editor; ctrl-a (home) and ctrl-d (delete) in terminal Changed: .sfx format and resource loader now stores 256k by default (space for 398 SFX; is backwards compatible) Changed: Open File and New File (via app menu) always open in the program that requested it (ref: VisiTrack, VGFX) Changed: Can not rename a file over an existing filename in filenav Fixed: sometimes boot into an invalid workspace and need to switch back and forth to mend Fixed: web player: audio, key(), touch controls (but only P8 buttons for now) Fixed: the first file change logged by anywhen each day is stored as the newly written version instead of the old version Fixed: stray globals in terminal: k, res, cproj_draw, cproj_update Fixed: node output missing in instrument designer Fixed: crash when blit()ing from outside of source bitmap // was happan when using magnifying glass at bottom right Fixed: magnifying glass drawing black as transparent Fixed: btn(), btnp() when no _update() callback exists only works via ctrl-r and not when run directly from desktop / terminal Fixed: several types of crackles / discontinuities in audio mixer, mostly relating to echo nodes Fixed: SFXs 64 and above are not initialised to "empty" (instead, zeroed data that shows up as C0's) Fixed: some ctrl- combinations produce a textinput event. e.g. ctrl-1 // explicitly blocked in events.lua Fixed: (Mac) icon is slightly too big Fixed: (Mac) Option key not mapped to "alt" Fixed: cursor in terminal doesn't wrap with command string Fixed: Locked mouse speed is different along X & Y (partial fix) Fixed: Moving a folder inside itself causes folder to be deleted Fixed: crash if call clip() in _init (before a display is created) 0.1.0f Added: reboot Added: logged disk writes for backups / versioning ("anywhen" in settings) Added: load cart.p64@2024-04-06_14:00:00 to load a cart from the past (or just @14:00 for short if same day -- local time) Added: date() can take a time to convert (string or epoch time) and a delta: date(nil, "2024-02-01_15:00:00", delta_secs) Added: stat(87) for timezone delta in seconds (add to local time to get UTC) Added: drag and drop host files into picotron (copied to /ram/drop -- not mounted) -> generates a "drop_items" message Added: drop a png into gfx editor to load it (colour fits to current display palette) Added: filenav: open files or folder on host via app menu ("View in Host OS") Added: can fetch .p64 host files directly as binary strings // same semantics as fetching "https://...foo.p64" Added: PICO-8 style string indexing; ?("abcde")[4] --> "d" ?("abcde")[02] --> nil Added: btnp() repeat rates (follows PICO-8: initial repeat delay: @5f5c, subsequent delays at @5f5d specified at 30fps) Added: >>, << operators for integer userdata Added: Row markers in tracker pattern view + Added: mouselock(true, event_sensitivity, movement_sensitivity) -- mouselock(false) to disable; dx,dy = mouselock() Added: tline3d dev flags (last param): 0x100 skip last pixel; 0x200 apply sub-pixel adjustment // see: /bbs/?tid=141647 Added: music() fade in and out Changed: increased userdata ops per cycle (2x for mul,div,mod; 4x for others) Changed: ls() sorts results with (non-cart) folders first by default Changed: renamed create_diff / apply_diff -> create_delta / apply_delta Changed: timestamps shown by about.p64 and default tooltray clock show local times Changed: when pixel_perfect is off, blitter prescales to 960x540 (still quite blurry though) Changed: screenshots stored to /desktop/host -- a folder automatically mounted on host at {Desktop}/picotron_desktop Changed: cp, mv take -f flags (required if copying over an existing folder / cartridge) Fixed: trailing slash for folders on tab complete in filenav, terminal Fixed: delete key + AltGr not working in terminal Fixed: tracker note keys using mapped key names -- should be raw scancode layout Fixed: tracker knobs hard to use when close to edge of the screen (now using mouselock and finer sensitivity) Fixed: using keyboard controls while a game controller is plugged in causes ghost button presses Fixed: ceil(1.0) returns 2 ._. Fixed: crash on multiplying userdata by scalar on LHS // ?(tostring (1 * vec(1, 1, 1))) Fixed: redundant cartridge file flushing (writes that happen within 300ms are now batched) Fixed: search for an empty spot on desktop to create dropped files Fixed: key() / keyp() returns false when received keyup and keydown messages in same frame (should be true for 1 frame) Fixed: keyboard btn() responds to keypress one frame late Fixed: memmap(0x8000) crashes // update: can't unmap pages like this, can only unmap by userdata: unmap(ud) Fixed: high dpi display modes blurry [not sure if will be fixed in 0.1.0f] Fixed: fetching https:// forces url to be lowercase Fixed: LFO phase knob ignored 0.1.0e Added: sfx tracker: undo / selections / copy + paste single instruments / track data / patterns Added: gfx bank selection in map editor Added: pixel_perfect x stretch: each axis separately uses largest integer multiple that fits Added: hold down ctrl x 2 to boot into terminal (useful for recovering from borked configurations) Added: create new tab flow: guess file extension from other files in the target folder when none is given Added: home/end/ctrl+e in terminal to control cursor position Changed: palt(1) sets colour 0 as transparent, not 63 (departure from P8 style) Fixed: double listings of .p64 files in / Fixed: host folders called foo.p64 collapse back into .p64 files on save (but still happens on mv / cp) Fixed: flip bits not observed when drawing with map() Fixed: map editor draws an out of bounds row and column at bottom and right Fixed: workspace icons lose transparency after using magnifying glass Fixed: \n\r pasted from windows creates overlapping lines in code editor (now filtered out) Fixed: host keypresses getting through to Picotron (alt+tab, ctrl+alt+left/right) Fixed: filenav crashes when actioning intention with a filename that can not be resolved Fixed: can not use AltGR during text entry Fixed: default key mappings: command keys & delete were missing in 0.1.0d Fixed: bad keycodes.pod / scancodes.pod format causes wm crash on boot 0.1.0d Added: default keyboard mapping for key()/keyp() uses host OS layout by default Added: can map multiple physical keys to a single virtual key Added: sfx len (becomes loop0 when loop1 > len) Added: warning on startup when the /system version does not match the build version Changed: about.p64 now shows/edits the metadata of /ram/cart by default (i.e. just type: about) Changed: rename triplane.p64 to biplane.p64 (need to re-select it again from wallpapers) Fixed: /system rom in 0.1.0c was the wrong version! (caused map drawing and other things to break) Fixed: (Windows) rm does not delete host folders Fixed: (Mac) crashes after ~13.5 minutes Fixed: host system user data paths are clipped at non-ascii characters 0.1.0c Added: custom map tile sizes (taken from sprite 0) Added: layer naming and ordering (the first layer in the list is now drawn on top) Added: mget(), mset(), ceil() Added: async remote fetch (put it in a coroutine) Added: /system/util: shutdown pwd info Added: right click on desktop to create new file / get file info Added: /appdata/system/keycodes.pod to map virtual key (to a raw name or directly to scancode) // store("/appdata/system/keycodes.pod", {a="q",z="w",q="a",w="z",m=51}) Added: future version checking; a separate runtime version number is stored with each cart. Added: delete file menu item in filenav (moves a single file to /ram/compost) Added: send_message(pid, {msg=..., _delay = 2}) to send a delayed message (_delay is in seconds) Changed: filenames can contain hyphens Changed: terminal searches for commands in current path /after/ standard paths (/system/util, ..) Changed: added more undo checkpoints to the text editor Changed: gui elements must explicitly :set_keyboard_focus(true) on click to consume textinput events Changed: screenshots and untitled cart filenames are given an integer suffix to reduce collisions Changed: when saving a file with no extension, wrangler automatically adds the default filename extension Changed: track (sfx) length can be specified pico-8 style by increasing loop0 (memory layout doesn't change) Fixed: load #bbs_id twice over the same local file -> fails to unmount the first cartridge Fixed: audio lock causing random crashes on Mac (tentative ~ not sure if that was the cause or the only cause) Fixed: cp allows copying to inside self (-> crash; e.g. when save cart to /ram/cart) Fixed: reset() does not reset scanline palette selection bits at 0x5400 Fixed: (Mac) vertical red line junk on letterboxed area in fullscreen mode Fixed: (Windows) printh doesn't send anything to terminal Fixed: drop file into a folder exactly when it opens --> hard freeze (wm crashes) Fixed: when dragging files and move mouse quickly, offset from mouse doesn't match original position Fixed: flr("garbage") causes runtime error (should return 0 to match PICO-8 behaviour) Fixed: text editor operations (undo, indent, double click select) stop working after using search Fixed: width/height fields dump earlier keypress junk + no way to delete characters Fixed: msg.has_pointer not always set when it should be (--> cursor not changing on window title) Fixed: msg.mx, msg.my absolute values for draw callbacks; should be relative to gui element Fixed: no printh output under Windows (switched to using SDL_Log) Fixed: ctrl+6 screenshot while in video mode 3 or 4 is not scaled to cover the 480x270 output Fixed: flashing when windowed cartridge runs at < 60fps with a custom display palette (e.g. inst editor) Fixed: flashing when video mode 3 or 4 running at < 60fps Fixed: filenav selects .loc files (drive.loc) as target to save over instead of opening it like a folder Fixed: corrupted /desktop/drive.loc due to aforementioned bug -- now automatically mended on startup Fixed: run bells.p64 and then enter tracker -> audio is mixed from left over junk state Fixed: note entry sometimes does not play in pattern editing mode Fixed: can edit track that is not currently visible Fixed: ASDR release is calculated incorrectly (is way too long) when played in track view Fixed: clipping: tline3d (w is wrong), spr() when flipped 0.1.0b Added: system event logging in log.txt (same folder as picotron_config.txt) Added: /appdata/system/scancodes.pod to remap physical key scancode // e.g. store("/appdata/system/scancodes.pod", {lctrl=57}) Changed: apple option / windows menu keys are mapped to "ctrl" Fixed: Default mapping of lctrl is wrong Fixed: Windows file saving generating corrupt data (opened in text instead of binary mode) Fixed: Crash when reading corrupted lz4 pods -- now returns a nil object // (& deals with existing corrupt settings.pod) Fixed: Windows BSOD on boot Fixed: Button mappings wrong for controller index 1 and above 0.1.0 First release of binaries