This document aims to both describe the versioning system to be used for the BSP specification, and to act as a changelog that briefly describes all past versions and points to them.
Any version listed in this document is considered immutable; the version and revision number shall be a persistent identifier for that specific version.
Version numbers for the specification consist of three numbers separated by dots followed by a single revision number. The version numbers are respectively called the major, minor and patch version numbers. For instance, a version number of 23.45.67, rev. 8901 has a major version number of 23, minor version 45, patch version 67, revision 8901.
The meaning of the numbers is as follows:
- The major version number indicates that the specification is not compatible with prior versions. As of the time of writing, this number is 0, meaning that the specification is not yet considered stable; major version 1 will be the first stable version, and any further major versions may be completely incompatible with prior ones.
- The minor version number increases when additional features are added to the specification, without breaking already existing ones. For as long as the specification remains in major version 0, this will also be incremented for breaking changes; however, such changes should be rare and clearly indicated in the changelog.
- The patch version number increases when the specification is updated to fix corner cases, undefined behavior, or other updates that do not constitute new features and should not alter the behavior of strictly conforming code.
- The revision number is merely an update counter, and increases with every change to the specification. The revision number may be changed on its own, without modifying the version numbers, if the change is completely trivial (for instance, spelling fixes) or if it only changes the way in which already-present information is shown. Any implementations written to conform to a specific version number should not be affected by an update that only increments the revision number.
Note that, since the revision number is never reset, it may be used by itself to identify a single version of the specification. However, this does not convey as much information as the full version number.
Adds a section about characters and strings (referenced from all instructions that handle text data), including changes such as:
- Forbidding the use of invalid UTF-8 strings, requiring a fatal error in all cases
- Actually pointing to the UTF-8 spec (i.e., the RFC) instead of leaving it implied
- Specifying the acceptable behaviors of valid UTF-8 strings: what characters must be supported by the engine, and which ones can be substituted
- Requiring that any valid UTF-8 string is accepted, including those containing control characters (despite those control characters need not be actually displayed)
- Elaborating on character/byte limits for strings, detailing how an engine that imposes such limits must behave
- Adding a few notes that address corner cases regarding invalid UTF-8 strings
- Indicating that arguments to bufchar above
0x1fffff
are reserved and may actually have some purpose in future versions of the spec (since they are completely outside the range of Unicode)
- Adds a version number to the specification and a link to the (newly-written) changelog
- Adds an index to the specification
- Adds a note that mandates overflows in the calculation of the effective address for
jumptable
to result in fatal errors
- Fixes various writing errors (grammar mistakes, unclear sentences, etc.) throughout the specification
- Fixes a formatting error in the description of
longmulacum
- Adds a note specifying the behavior of the
getbyteinc
,getbytedec
,gethalfwordinc
,gethalfworddec
,getwordinc
andgetworddec
instructions when both of their arguments point to the same variable
- Adds 64-bit arithmetic instructions
- Fixes another grammatical mistake in the description of instructions that read from the file buffer
- Fixes a grammatical mistake in the description of instructions that read from the file buffer
- Adds the
getfilebyte
,getfilehalfword
,getfileword
andgetvariable
instructions
- Fixes several grammatical errors in the description of
checksha1
- Fixes formatting errors in the description of the bit-shifting instructions
- Fixes a formatting error in the description of
getstacksize
- Improves the formatting of the table listing the bit-shifting instructions
- Fixes a grammatical error in the description of
rotateleft
- Adds the
setstacksize
andgetstacksize
instructions, and the bit-shifting instructions
- Fixes a few typos and similar errors
- Adds notes clarifying the interaction of
poppos
and theseek
family of instructions with a locked current file pointer
- Updates
stackread
andstackwrite
to accept negative stack positions
- Amends the description of
bufchar
to require engines to accept spaces
- Adds a message buffer to the execution environment of the patch
- Adds the
bufstring
,bufnumber
,bufchar
,printbuf
andclearbuf
instructions - Updates the description of the
bsppatch
instruction regarding behavior of the newly-introduced message buffer
- Fixes an error in the argument lists for the
truncate
instruction
- Fixes a formatting error in the description of the
bsppatch
instruction
First complete version of the specification.
- Adds a description for the
bsppatch
instruction
- Further improves the wording in the description of the
ipspatch
instruction
- Fixes the wording in the description of the
ipspatch
instruction
- Updates the argument lists for the
ipspatch
instruction - Adds descriptions for
ipspatch
andchecksha1
- Fixes grammatical mistakes in the descriptions of the
pushpos
andpoppos
instructions
- Specifies the behavior of the
print
instruction when an invalid string is encountered - Adds a note mandating that one-option menus must be shown to the user
- Adds descriptions for the
writedata
,xordata
,length
,truncate
andtruncatepos
instructions, and for the instructions dealing with manipulating or retrieving the current file pointer
- Adds descriptions for instructions that read from and write to the file buffer
- Fixes the formatting of a section header
- Fixes the writing in the description of instructions that read values from patch space
- Adds a note in that section regarding compiler behavior
- Adds descriptions for advanced stack operations and instructions that read values from patch space
- Updates the argument lists for
menu
andjumptable
- Adds descriptions for conditional jumps,
menu
,print
,exit
andjumptable
- Adds descriptions for arithmetic instructions, basic control flow,
push
andpop
- Adds a list of all instruction names and describes the
nop
instruction
- Initial draft version of the specification; contains an introduction and the initial instruction list