Changes in this release:
========================

BASIC Engine buildroot changes since v0.91-jh-30-g58b20:

- package/util-linux: add option to include fdisk tools
- configs/basicengine_h3_defconfig: include fdisk tools from util-linux
- board/basicengine: use sfdisk for partitioning
  Fixes (hopefully) random partitioning failures on first boot.
- board/basicengine: wait for FS to be populated before starting BASIC
  Fixes SD partitioning screen showing up a second time.

Changes in previous releases:
=============================

Engine BASIC changes since v0.91-81-gf657:

- sdl: do not create/destroy windows in main thread on Linux
  Fixes crash and/or lack of video output on Linux.
- Revert "eb_bg: fix numerous off-by-ones in parameter validation"
  Fixes hang in shmup demo.

allwinner-bare-metal changes since v0.91-jh-46-gbfe9:

- libc_server: make 32-bit safe again
  Fixes hang on boot with black screen on H3.
- display: de2_init(): reset and turn off device before configuring it only on H616
  Fixes display corruption on H3.

Engine BASIC changes since v0.91-58-ge6a59d:

- configure.sh: support SDL/Win32 build
- drop "SDL2/" prefix from include paths
- basic_sys: fix prototype for shell_list() fallback
- compat: add memmem() and memrchr()
- export_syms: handle Win32 target
- basic_math: use isfinite() instead of finite()
- configure.sh, dyncall: support cross-ar
- export_syms: handle Apple target
- ttconfig.h: disable section stuff for OSX
- sdl: Arduino.cpp: no malloc.h on OSX
- sdl: sdlgfx.h: appease Clang
- configure.sh: support OSX build
- sdl: create/destroy windows in main thread
  Fixes hangs on startup on OSX and Win32.
- configure.sh: shut up clang about deprecated declarations
- mml: remove obsolete optimization attributes
- utf8.h: compile once
- all: remove obsolete unifile stdio redirection
- sdl, basic: use rand() instead of random()
- sdl: Arduino.h: do not define INPUT, conflict with Win32 headers
- rename TOKEN_TYPE to EB_TOKEN_TYPE
- win32: handle Win32 version of mkdir()
- basic_sys: add system IDs for Win32, OSX
- configure.sh: osx: link SDL statically

Engine BASIC changes since v0.91-54-g40656:

- h3audio: disable call into libh3 on non-H3 platforms
- eb_io: use AWBM_PLATFORM_h3 macro instead of H3
- h3: net_tftp: disable LWIP-based implementations on Jailhouse or non-H3
- basic: define H616 RX edition string

allwinner-bare-metal changes since v0.91-jh-7-gf97f:

- uart: add H616 support
- configure.sh: add PLATFORM option
- configure.sh: link libh3 on H3 only
- configure.sh: don't link network/USB drivers, file system on Jailhouse
- ccu.h: add minimal H616 support
- display.h: define register addresses for H616/DE3.3
- interrupts.h: define GIC address for H616
- ports.h: define PIO address for H616 (untested)
- audio_i2s: disable bits that are unimplemented on !H3
- dma: disable on Jailhouse or !H3
- interrupts: use LCD?_IRQ defines
- interrupts: only enable analog audio, RT-WB interrupts on H3
- libc_server: make 64-bit safe
- tve: use LCD1_IRQ define
- ports: no need for clock ungating on H616 (untested)
- display: disable RT-WB bits on !H3
- display: de2_init(): reset and turn off device before configuring it
  Fixes scaling artifacts on H616 platforms.
- display: display_init(): use LCD0_IRQ define
- display: remove misleading comment
- display: display_init(): skip display initialization on H616
- startup: startup(): disable H3-specific initialization on !H3
- tve: add dummy implementation for !H3
- system: sys_reset(), sys_set_cpu_multiplier(): disable for !H3
- audio_hdmi: audio_hdmi_init(): disable on !H3
- dw_hdmi.h: add DW HDMI register header
- util.h: add MMIO macros
- audio_hdmi.c, display.h: use DW HDMI header definitions
- audio_hdmi: enable initialization on !H3
- display.h: use MEM() macro
- ccu.h: use MEM() macro
- startup: intitialize newlib earlier
- audio_hdmi: audio_hdmi_init(): disable on !H3
- ccu.h: add various H616 clock registers
- audio, interrupts: define HDMI audio interrupt macro
- h616: audio_i2s: implement AHUB audio
- audio.h: add H616 audio codec registers
- audio_i2s: audio_ahub_init(): find and pause all audio DMA streams
- audio_i2s: audio_queue_samples(): feed data to the analog codec
- h3: move libh3_coherent_region to system.c

BASIC Engine buildroot changes since v0.91-jh-6-g7980e0:

- package/rtl8723as: disable on ARM64
- HACK: package/gdb: force ARM32 build
- package/jailhouse: build inmates as ARM32
- board/basicengine: move uboot-extras.config from board/orangepi
- package/allwinner-bare-metal: add platform config option
- package/allwinner-bare-metal: use platform config option, enable GDB stub
- package/urandom-scripts: increase script priority
- board/basicengine: mount debugfs in fstab
- package/jailhouse: do not build inmates with the other stuff
- configs/basicengine_h616_defconfig: add
- board/basicengine: boot_be_early.sh: allow for platform-specific init
- board/basicengine/h616: add platform-specific initialization script
- configs/basicengine_h616_defconfig: add platform-specific rootfs overlay
- board/basicengine/h616/arm64_defconfig: add moderately minimized kernel config
- package/urandom-scripts: save seed to /sd/sys/etc
- package/enginebasic: add /sd/sys/etc/seedrng directory
- board/basicengine/h616: add H616 u-boot patches
- board/basicengine/h616: add preliminary boot.cmd and genimage.cfg
- board/basicengine/h616/boot.cmd: remove dead code
- basicengine: add H616 build script
- package/python-polib: new package
- package/enginebasic: depend on python-polib
- board/basicengine/h616: add H616 zombie patches
- board/basicengine/h616: add build fix for Orange Pi 3 dts

Jailhouse hypervisor changes since v0.91-basic-1-gc9e81:

- hypervisor: handle SMC32 PSCI call on ARM64
- configs: arm64: add configuration for Orange Pi Zero 2
- configs: arm64: add BASIC Engine configuration for Orange Pi Zero 2
- inmates: beload: map H616 I/O regions
- HACK(ish): driver: pci: add missing parameter to of_overlay_fdt_apply() call
- configs: arm64: forward IRQ 56 (AHUB) on Orange Pi Zero 2/H616

allwinner-bare-metal changes since v0.91-jh-6-g084c9:

- jailhouse: add comms area initialization program

BASIC Engine buildroot changes since v0.91-jh-4-g73b41:

- package/allwinner-bare-metal: install init_comms
- board/basicengine: run init_comms at boot

Engine BASIC changes since v0.91-53-g44b7:

- basic: allow '#<cmd>' as an alias for 'SHELL "<cmd>"'

Engine BASIC changes since v0.91-46-gb89b:

- basic_sys: SYSTEM: use _exit() instead of exit() on POSIX
  Fixes SYSTEM command causing a freeze instead of quitting.
- basic.h: warn about ignored errors from parameter parsing
- basic_video: LINE: handle parameter parsing error
  Fixes undefined behavior when passing invalid color indices.
- basic.h: increase maximum number of user files to 256
- basic_file: add CMD() function
- basic_file: CMD: allow -1 as an alias for OFF
- tests: runtests.bas: restore screen I/O redirection after each test case

Engine BASIC changes since v0.91-28-gc070:

- basic_config: CONFIG: consume comma after option string (untested)
- Squashed 'libraries/libsoc/' content from commit 545b35496
- Merge commit 'e9b0100ed974b4e9fa24eebe018bbf2952acb715' as 'libraries/libsoc'
- sdl: re-add missing run_list() method
- sdl: platform_process_events(): use _exit() instead of exit()
  Fixes window close button causing a freeze instead of quitting.
- basic: make get_name(), get_symbol() static and public
- eb_sys: eb_load_module(): run module __initcall if present (untested)
- eb_sys: eb_load_module(): allow using an explicit module path
- basic: putlist(): increase temporary UTF-8 buffer size
  Fixes warning when compiling for SDL using gcc 12.
- eb_io: spi: return errors
  Fixes scary build warnings.
- bgengine: increase various type sizes to overcome legacy limitations
- gfx: drawSprite(): fix signedness for off-screen sprite test
- bgengine: struct sprite_pattern: remove unused member "ref"
- bgengine: increase sprite limits
  Fixes legacy limits on sprites inherited from ESP8266/VS23S010 version.
- bgengine: increase limit on number of backgrounds
  Fixes legacy limit on BG layers inherited from ESP8266/VS23010.
- eb_bg: fix numerous off-by-ones in parameter validation
  Fixes incorrect parameter checking in many BG/sprite-related commands.
- eb_bg: increase limit for BG size and tile size
- basic_bg: update limits in basicdoc

allwinner-bare-metal changes since v0.91-jh-5-g9e91:

- h264enc: fix mic channel count
  Fixes Darth Vader effect.

BASIC Engine buildroot changes since v0.91-jh-3-ga9072:

- package/enginebasic: fix version.h generation

Engine BASIC changes since v0.91-25-g4a67e:

- manual.adoc: rebrand, update links to legacy manuals
- manual.adoc: terminology: do not refer to video chip memory
- manual.adoc: _really_ update links to legacy manuals...

allwinner-bare-metal changes since v0.91-jh-1-gad3a:

- h264enc, video_encoder.h: move audio parameters to header file
- h264enc: support ALSA audio input recording
- smp: add debug output (disabled)
- sdl_server: add debug output for controller axis events

BASIC Engine buildroot changes since v0.91-jh-1-g15bbc:

- board/basicengine/h3/armhf_defconfig_5.10: enable USB audio
- package/enginebasic: install gdb init script

Engine BASIC changes since v0.91-8-g99713:

- configure.sh: catch more system messages
- scripts/trans.py: do a better job stripping whitespace before translation
- po: helptext_*.po: strip leading/trailing whitespace
- po: system_*.po: strip leading/trailing whitespace
- po: helptext_*.po: specify encoding
- po: helptext_*.po: remove duplicates
- po: helptext_de.po: reformat with msgcat
- po: helptext_de.po: update translations
- po: helptext_es.po: reformat with msgcat
- po: helptext_es.po: update translations
- po: helptext_fr.po: reformat with msgcat
- po: helptext_ja.po: reformat with msgcat
- po: helptext_fr.po: update translations
- po: helptext_ja.po: update translations
- scripts/help.py: handle continuation character-only lines properly
- scripts/help.py: collapse runs of spaces into a single space
- basic: ASC(): make documentation slightly less unclear

Engine BASIC changes since v0.91-1-gfdf1:

- h3joy_sdl_client: handle axis 0/1 motion as directional input
  Fixes non-working d-pads on some mixed analog/digital controllers.
- basic_video: screen_putch(): delete any key prompt correctly (tested)
- errdef.h, po/system_*.po: remove unnecessary quote escaping
- po: update system_de.po
- po: update system_es.po
- po: update system_fr.po
- po: update system_ja.po

allwinner-bare-metal changes since v0.91-jh:

- libc_io_jh: remove excessive debug output

Engine BASIC changes since pre-jh:

- dump mcurses
- h3gfx: use core 3 when in Jailhouse
- h3gfx: cleanCache(): use mmu_flush_dcache_range()
- h3: add Jailhouse SDL client
- h3: sdl_client_task: replace magic address with define
- basic_file: basic_init_file_early(): no sd_detect() in Jailhouse
- h3: use SDL event stream for keyboard input in Jailhouse
- configure.sh: simplify directory layout
- h3: sdl_client_internal.h: use provided system header file
- eb_input: support more than one game controller
- h3/jailhouse: add controller support
- basic_io, basic_sys: fix misspelled error code
- basic_native, basic_sys: disable shell_list(), exec_list() on non-POSIX
- export_syms: remove mcurses exports
- export_syms: add missing utf8.h include
- basic_sys: implement SHELL for Jailhouse
- tTVscreen: get_ch(): implement non-blocking support
- tscreenBase_ansi: term_getch(): use get_ch() non-blocking support
- basic: handle data abort exception
  Fixes crashes when poking/peeking unmapped memory.
- basic_sys: enable DTBLOAD for Jailhouse
- basic_sys: shell_list(): return exit status
- BString: fix off-by-one in lastIndexOf*()
- tTVscreen: ansi: don't warn about unimplemented SGR 10
- tTVscreen: ansi: parse ESC [? sequences
- tTVscreen: ansi: remove bogus cursor show/hide sequences
- tTVscreen: ansi: show the correct parameters for unimplemented sequences
- tscreenBase: locate(): use signed types throughout
  Fixes wraparound bug in ANSI terminal when writing beyond the end of the line.
- tscreenBase: ansi: define End, PageDown, PageUp correctly for ansiw
- tscreenBase: ansi: term_getch(): define Del, Backspace for ansiw
- tTVscreen: ansi: sgr(): don't warn about unimplemented bold/dim/underline/blink
- basic_sys: change TERM back to "ansiw"
- tTVscreen: ansi: properly handle (i.e. ignore) ESC [ ?/= sequences
- basic_video: screen_putch(): imitate ANSI terminal wraparound behavior
- tTVscreen: ansi: implement ESC [ X, ` and x
- tscreenBase: ansi: send correct PgDn, PgUp, Del, BS and Ins for cons25-debian
- basic_sys: set TERM to cons25-debian, HOME to /sd
- mouse.h: add missing #include
- h3: implement mouse handling for Jailhouse
- README.md: explain this branch
- h3: add very basic networking implementation
- tscreenBase: cls(): fix character type size
- export_syms: export mmu_flush_dcache_range()
- h3gfx: add screen recording support
- h3gfx: use cleaned-up system headers for video encoder interface
- h3audio: add recording support
- h3gfx: always start capture at the same time
  This fixes framedrops when using text mode with the BG engine enabled.
- h3gfx: only enable video recording code in Jailhouse
- h3gfx: run on core 2
- basic_sys: BOOT: implement clean reboot in Jailhouse
- tvutil: do not leave junk below the end of the text screen
- basic: putlist(): fix decoding of comment strings
  Fixes garbled listing of comments with multibyte characters.
- basic: basic_init_environment: fix HOME path on Jailhouse
  Fixes module loading.
- basic: icom(): implement GOSUB from direct mode
  Fixes GOSUB doing nothing when run in direct mode.
- export_syms: export SMP functions
- h3audio: use same buffers for output and recording
  Fixes random incorrect results in numerical operations.
- h3gfx: begin(): make sure video recording is disabled on initialization
- h3gfx: allign recording buffers to 16 bytes
  Fixes shifted luma buffer in screen recordings.
- h3/TKeyboard: sdl_process_key_event(): fix Caps Lock handling
  Fixes Caps Lock not having any effect.
- h3/TKeyboard: handle Scroll Lock, Num Lock, add accessors
- h3gfx: toggle recording with Scroll Lock
- h3gfx: startCapture(): allocate zeroed capture buffers
  Fixes flickering line at the bottom of recordings of bright screens.
- ttconfig.h, h3gfx: add HAVE_SCREEN_RECORDING macro and use it
- TKeyboard: add forceScrollLock()
- basic_config: add record at boot option
- h3gfx: implement record at boot config option
- audio.h: remove unsupported platforms
- basic_sound: BEEP: update documentation
- basic_config: CONFIG: remove references to unsupported platforms
- scripts/help.py: handle continuation character properly
  Fixes options in CONFIG help being squashed into a single line each.
- basic_config: actually save and load record_at_boot
- basic_config: CONFIG: accept textual config options (untested)
- basic_config: add editor option (untested)
- export_syms: export open() on H3
- basic: error(): color error messages in direct mode
- basic: refactor program saving code
- basic_video: screen_putch(): translate "any key" prompt
- basic: EDIT: edit program in memory when called without arguments
- h3gfx: always run in double-buffered mode
- tTVscreen: cscroll(): increase row/column type size
  Fixes hangs when scrolling HD text screens.
- tTVscreen: ansi: add debug output
- basic: SAVE: add heuristic to determine if line numbers should be saved
- basic_sys: remove unsupported platforms
- ttconfig.h: remove unsupported platforms
- basic_sys: SET DATE: fix documentation
- basic_sys: replace obsolete wall clock code with time()/gmtime()
- basic_video: screen_putch(): delete any key prompt correctly (untested)
- basic: brand H3/Jailhouse build as "H3 RX"

allwinner-bare-metal changes since pre-jh:

- boot.S: add Jailhouse support
- add linker_jh.ld
- configure.sh: add JAILHOUSE=1 support
- display, tve: fix default FB addresses for Jailhouse
- startup: disable initialization of stuff used by Linux under Jailhouse
- smp: smp_start_secondary_core(): implement for Jailhouse
- jailhouse: use a dummy libc_io implementation for now
- configure.sh: disable a bunch of stuff for Jailhouse
- mmu: disable initialization for Jailhouse
- mmu: add mmu_flush_dcache_range()
- display: display_swap_buffers(): clean cache by address
- interrupts: use loader IRQ handler for Jailhouse
- interrupts: no USB in Jailhouse
- interrupts: irq_enable(): leave some bits alone when running in Jailhouse
- jailhouse: move everything up by 16MB and auto-detect memory size
- dirent.h: instrument so it can be used in foreign (Linux) code
- configure.sh: don't compile MMC driver for Jailhouse
- mmu: limit RAM size detection to 2GB minus 256M
- jailhouse: add SDL input event server
- jailhouse: add libc RPC server
- configure.sh: compile shared memory servers for Jailhouse
- libc_io_jh.c: implement all system calls as libc server RPC.
- add fixed_addr.h as a central location for magic addresses
- display, tve: use AWBM_BASE_ADDR
- libc_io_jh, libc_server: use LIBC_CALL_BUFFER_ADDR
- mmu: use AWBM_BASE_ADDR as DRAM_START for Jailhouse
- sdl_server: use SDL_EVENT_BUFFER_ADDR
- configure.sh: simplify directory layout
- jailhouse: make sdl_server.h usable by bare-metal programs
- sdl_server: handle controller connect/disconnect events
- configure.sh: fix GDB stub
- gdb: gdbstub.c: use correct header file
- gdb: define comms macros instead of using uart directly
- interrupts: add irq_unpend()
- startup: eliminate libc_set_heap() special casing
- gdbstub: add Jailhouse support
- gdbstub: gdbstub_io_handler(): fix warning
- configure.sh: build gdbstub with Jailhouse support
- interrupts: move magic IRQ handler address to fixed_addr.h
- interrupts: install GDB stub IRQ handler for Jailhouse
- uart: uart_init(): no FIQ in Jailhouse
- uart.h: use custom Jailhouse comms functions for GDB stub
- add GDB stub bridge "jailgdb"
- gdb: assembly.h: get registers pushed on the stack by the GCC IRQ handler
- gdbstub: handle breakpoints via SVC for Jailhouse
- boot.S: run in System Mode so we can use SVC calls
- gdbstub: initialize SVC_sp for Jailhouse
- gdbstub: tzvecs.S: explain the link register arithmetics
- libc_io_jh, libc_server: implement wait()
- libc_io_jh, libc_server: implement forkpty/exec helper
- interrupts: install_ivt(): split Jailhouse and raw versions for readability
- add data abort handler hook
- sdl_server: load game controller config from standard paths
- lib-h3: h3_codec.c: do not clean cache
- fixed_addr.h: define communication and coherent buffers areas
- libc_io_jh, libc_server: implement system()
- libc_io*.c: factor out common code
- libc_common.c: implement basename()
- libc_server: set TERM to "ansiw"
- libc_server: set TERM to cons25-debian, HOME to /sd
- libc_server: translate open() flags
- README: explain this branch
- display: add RT-WB (display writeback) support
- tve: mark some suspicious register settings
- add video encoder interface headers
- video_encoder.h: add audio_size
- import Allwinner Linux video recorder sources
- configure.sh: build video recorder for Jailhouse
- boot.S: we now boot on core 1
- h264enc: h264avi: fix type warning
- h264enc: remove commandline argument, auto-generate filename
- h264enc: remove dead code and typos
- h264enc: detect end of recording correctly
- h264enc: start a new file at 2GB minus 32MB
- h264enc: toggle Scroll Lock LED when starting/ending recording
- libc_server: jhlibc_forkptyexec(): reset signal handlers
  Fixes programs run in Engine BASIC shell not being interruptible.
- sdl_server: log controller connect/disconnect events in debug mode
- uart.h: add prototypes for uart_rx/tx_ready()
- h264enc: wait for VE device to show up
- h264enc: handle SIGTERM gracefully (untested)
- libc_io_jh, libc_server: implement gettimeofday() properly

BASIC Engine buildroot changes since pre-jh:

- LOCAL: update jailhouse to next
- LOCAL: board/orangepi/orangepi-lite/boot.cmd: limit memory to 128M
- board/orangepi/orangepi-lite: add uboot-extras.config
- condigs/basicengine_h3_defconfig: add defconfig for jailhouse purposes
- board/basicengine: import common bits from BASIC Engine SDL buildroot
- board/basicengine/h3: add jailhouse kernel and image bits
- package/jailhouse: remove hash file
- package/jailhouse: move stuff out of /usr/local
- package/enginebasic: add Jailhouse build of Engine BASIC
- package/allwinner-bare-metal-toolchain: add
- package/allwinner-bare-metal: add
- configs/basicengine_h3_defconfig: build Engine BASIC
- use /sd as BASIC root directory
- package/allwinner-bare-metal: add dependency on SDL2
- package/atto: new package
- board/basicengine: enable https for busybox wget
- board/orangepi: reduce boot delay to 1s
- package/allwinner-bare-metal: install jailgdb
- package/enginebasic: install ELF file for debugging
- configs/basicengine_h3_defconfig: enable GDB, atto
- package/frotz: just shut up!
- board/basicengine: auto-start Engine BASIC
- configs/basicengine_h3_defconfig: install ansiw, cons25-debian terminfo
- configs/basicengine_h3_defconfig: generate locale, add slang
- board/basicengine/h3: enable brcmfmac, rtl8192cu WiFi drivers
- board/orangepi/orangepi-lite: speed up booting
- board/orangepi/orangepi-lite: add DTB picker menu
- package/rtl8723as: new package
- configs/basicengine_h3_defconfig: enable a bunch of WiFi stuff
- board/basicengine/h3/armhf_defconfig_5.10: enable rtl8723bs driver
- configs/basicengine_h3_defconfig: fix terminfo names
- configs/basicengine_h3_defconfig: enable rtl8723as driver
- configs/basicengine_h3_defconfig: enable usbmount
- board/basicengine: add R69 STB device tree
- board/basicengine/h3/sun8i-h3-r69-rtl8723as.dts: fix LEDs
- board/basicengine/h3/sun8i-h3-r69-rtl8723as.dts: remove junk, enable more USB
- board/basicengine: add gamecontrollerdb.txt
- package/rtl8723as: add module_alias for auto-loading
- package/cedar: add (video encoder driver)
- board/basicengine/h3: enable video encoder in DT
- package/cedrus: add (test programs for sunxi video encoder)
- board/basicengine: fix dropbear config path
- board/basicengine/h3/armhf_defconfig_5.10: enable CMA
- package/allwinner-bare-metal: install video recorder binary
- configs/basicengine_h3_defconfig: enable Allwinner video encoder driver
- configs/basicengine_h3_defconfig: add some useful tools
- package/jailhouse: use customized Engine BASIC version
- package/allwinner-bare-metal-toolchain: fix config directory
- package/enginebasic: fix branch
- package/cedar: reduce memory allocation to 16MB
- board/basicengine: add "please wait" message while user partition is created
- board/basicengine: run video recorder at boot
- configs/basicengine_h3_defconfig: add less, uemacs, vim, full joe
- board/basicengine: enable busybox ntpd, SCSI eject, ns date and stat
- board/basicengine: guess system time on boot
- allwinner-bare-metal-toolchain: use HOST_MAKE_ENV for bootstrap
  Fixes issues with old host tools.

