ref: 669a392fcd02d7544b2ab70ad6d835c15301c458
parent: 51ce0b038a160db54a5ddb1bb782fdd28c02c8ce
author: Rangi <[email protected]>
date: Fri Jan 1 20:52:43 EST 2021
Revise the rgbasm(5) docs
--- a/src/asm/rgbasm.5
+++ b/src/asm/rgbasm.5
@@ -38,7 +38,8 @@
John: ld a,87 ;Weee
.Ed
.Pp
-All reserved keywords (pseudo‐ops, mnemonics, registers etc.) are case‐insensitive, all identifiers (symbol names) are case-sensitive.
+All reserved keywords (pseudo‐ops, mnemonics, registers, etc.) are case‐insensitive;
+all identifiers (symbol names) are case-sensitive.
.Pp
Comments are used to give humans information about the code, such as explanations.
The assembler
@@ -204,18 +205,22 @@
delim off
.EN
.Pp
+The trigonometry functions (
+.Ic SIN ,
+.Ic COS ,
+.Ic TAN ,
+etc) are defined in terms of a circle divided into 65535.0 degrees.
+.Pp
These functions are useful for automatic generation of various tables.
-Example: assuming a circle has 65536.0 degrees, and sine values are in range
-.Bq -1.0 ;\ 1.0 :
+For example:
.Bd -literal -offset indent
-;\ --
-;\ -- Generate a 256-byte sine table with values between 0 and 128
-;\ --
+; Generate a 256-byte sine table with values in the range [0, 128]
+; (shifted and scaled from the range [-1.0, 1.0])
ANGLE = 0.0
- REPT 256
- db MUL(64.0, SIN(ANGLE) + 1.0) >> 16
-ANGLE = ANGLE + 256.0 ; 256 = 65536 / table_len, with table_len = 256
- ENDR
+ REPT 256
+ db (MUL(64.0, SIN(ANGLE)) + 64.0) >> 16
+ANGLE = ANGLE + 256.0 ; 256.0 = 65536 degrees / 256 entries
+ ENDR
.Ed
.Ss String Expressions
The most basic string expression is any number of characters contained in double quotes
@@ -238,7 +243,7 @@
.It Ql \[rs]t Ta Tab ($09)
.It Qo \[rs]1 Qc \[en] Qo \[rs]9 Qc Ta Macro argument (Only in the body of a macro; see Sx Invoking macros )
.It Ql \[rs]# Ta All Dv _NARG No macro arguments, separated by commas (Only in the body of a macro)
-.It Ql \[rs]@ Ta Label name suffix (Only in the body of macros and REPTs)
+.It Ql \[rs]@ Ta Label name suffix (Only in the body of a macro or a Ic REPT No block)
.El
(Note that some of those can be used outside of strings, when noted further in this document.)
.Pp
@@ -362,13 +367,13 @@
.Bl -column "STRSUB(str, pos, len)"
.It Sy Name Ta Sy Operation
.It Fn STRLEN str Ta Returns the number of characters in Ar str .
-.It Fn STRCAT str1 str2 Ta Appends Ar str2 No to Ar str1 .
+.It Fn STRCAT strs... Ta Concatenates Ar strs .
.It Fn STRCMP str1 str2 Ta Returns -1 if Ar str1 No is alphabetically lower than Ar str2 No , zero if they match, 1 if Ar str1 No is greater than Ar str2 .
.It Fn STRIN str1 str2 Ta Returns the first position of Ar str2 No in Ar str1 No or zero if it's not present Pq first character is position 1 .
.It Fn STRRIN str1 str2 Ta Returns the last position of Ar str2 No in Ar str1 No or zero if it's not present Pq first character is position 1 .
.It Fn STRSUB str pos len Ta Returns a substring from Ar str No starting at Ar pos Po first character is position 1 Pc and Ar len No characters long.
-.It Fn STRUPR str Ta Converts all characters in Ar str No to capitals and returns the new string.
-.It Fn STRLWR str Ta Converts all characters in Ar str No to lower case and returns the new string.
+.It Fn STRUPR str Ta Returns Ar str No with all letters in uppercase.
+.It Fn STRLWR str Ta Returns Ar str No with all letters in lowercase.
.It Fn STRFMT fmt args... Ta Returns the string Ar fmt No with each
.Ql %spec
pattern replaced by interpolating the format
@@ -1530,11 +1535,12 @@
.Ic REPT
to generate tables on the fly:
.Bd -literal -offset indent
-; Generate a 256-byte sine table with values between 0 and 128
+; Generate a 256-byte sine table with values in the range [0, 128]
+; (shifted and scaled from the range [-1.0, 1.0])
ANGLE = 0.0
REPT 256
db (MUL(64.0, SIN(ANGLE)) + 64.0) >> 16
-ANGLE = ANGLE + 256.0
+ANGLE = ANGLE + 256.0 ; 256.0 = 65536 degrees / 256 entries
ENDR
.Ed
.Pp