Undocumented 8.1 commands
At the time of this revision for Color 64 v8.1a, several ML-related commands and variables are notably absent from the original 8.0 manuscript. In addition, some BASIC shortcuts appear to have been introduced or expanded as part of the 8.1 upgrade. Much of the information below comes from reverse-engineering performed by comparing 8.1 code to predecessor versions.
Below are notes and observations comparing what the code did in 8.0 or 7.37 with the shortcuts and behaviors observed in 8.1.
Please note that this section is a work in progress and is updated frequently. Some observations may still be incomplete or under active investigation. Even so, understanding some of the modified BASIC can be relatively straightforward.
If the ML is loaded into your system, for example by loading and running +SHELL, you can write your own program to test the modified BASIC by calling the ML routine in the first line:
10 SYS49923 20 #"Test of program" 30 ETC....
Topics:
- General Programming (below)
- ML Commands
- ML Variables
- ML Functions
General Programming
| Topic | Notes |
|---|---|
| Simple Addition | All overlays Color 64 allows simple numeric addition without always using the full:
In some cases, this can instead be written as:
This appears to work only with numeric variables, not strings, and success has not been completely consistent. Use with caution. |
| Topic | Notes | ||||
|---|---|---|---|---|---|
| "THEN" with IF | All Main Overlays
Conclusion:
is legal in most observed uses. |
| Topic | Notes | ||||||
|---|---|---|---|---|---|---|---|
| if...£ | √bbs.msgs
Observation: The 8.1 authors often reversed the comparison order in variable checks while preserving the same end result. Conclusion: This appears to serve as a not function. Example meaning:
Another example: |
| Topic | Notes | ||||||
|---|---|---|---|---|---|---|---|
| @ | √bbs.msgs
Conclusion: This seems to act somewhat like an |
| Topic | Notes | ||||||
|---|---|---|---|---|---|---|---|
| [var$] | √bbs.msgs
Conclusion: This can serve as an empty-variable or null-string check. |
ML Commands
| Topic | Notes | ||||
|---|---|---|---|---|---|
| .8 | All Main Overlays .8 - Session/Input Poll Previously documented in 8.0 as the “equivalent of the
Polls for typed input in a non-blocking manner, whether local or remote, normalizes transient input-status states, and refreshes session status. It is typically used inside scrolling output or file-display loops and before slow operations. Observed side effects include updating
It may also update the same underlying status and character registers used by While further testing is still required, this appears to be the practical replacement for |
| Topic | Notes | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| .9 | All Main Overlays Previously documented in 8.0 as a “do not use” command that replaced the .9 – Single-Key Command Input Poll Overview The Previous versions of Color 64 used When a key is pressed:
When no key is pressed:
Examples (
So |
| Topic | Notes | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| .31 and !55 | √bbs.msgs
Conclusion: .31 – Message-Aware Disk Input (Version 8.1) Earlier documentation listed ML command .31 as “not used.” Analysis of version 8.1 confirms this is incorrect. In Color 64 v8.1, the Comparison: Version 8.0 vs Version 8.1
|
| Topic | Notes | ||||||
|---|---|---|---|---|---|---|---|
| .36 | √bbs.init
.36 – Prompt-Cycle Housekeeping (Behavior Unconfirmed) Category: ML Command Overview The In testing within the live BBS environment, removing Observed Call Pattern
Testing Notes
Working Hypothesis
Summary
|
| Topic | Notes | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| .38 / .39 / .40 / .41 and “;” variables | √bbs.msgs
Message Relink Commands in v8.1
.38 – Relink Iterator Initialization (v8.1) The It is designed to be used as the first step in a command sequence:
This sequence replaces the more BASIC-driven record-scanning logic found in v8.0. What .38 Does
In
The ML iterator then uses internal scratch registers such as:
These are later examined by BASIC to determine loop control and branching. In v8.0, message scanning and linking logic was performed directly in BASIC, including character comparisons and explicit loop control. In v8.1, that logic was moved into machine language for speed and structural cleanliness. BASIC now acts primarily as a decision layer while ML handles the iterator mechanics. Important Notes
Summary The It should be understood primarily as a setup command rather than an action command. |
ML Variables
| Topic | Notes |
|---|---|
| !8 | Wrap/Width Threshold
Example:
In the example above, if a line is shorter than |
| Topic | Notes |
|---|---|
| !46 | Scratch Register
In those routines, It can hold values in the range 0-255. Any other value results in an “illegal quantity” error. |
| Topic | Notes |
|---|---|
| !55 | !55 – Message Record Delimiter Flag Refer to the |
| Topic | Notes |
|---|---|
| !56 | !56 - Message Editor Command State (True/False) (Editor) Used in conjunction with See |
| Topic | Notes |
|---|---|
| !57 | !57 - Prefix Trigger Assignment (Editor) This works in concert with See |
| Topic | Notes |
|---|---|
| !58 | !58 - ?? (Editor) Present in editor functions, specifically during text entry after pressing RETURN on a line, but its overall function remains unknown. It appears only in |
| Topic | Notes |
|---|---|
| !59 | !59 - Text-entry mode flag (Editor) Present in editor functions. This appears to be set high by ML routines while in text-entry mode so code that deals with the command menu can be bypassed. |
| Topic | Notes | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| !60 | !60 - Menu Selection Holder (Editor) Overview In Color 64 v8.1, !60 acts as a state variable for the message editor command interface. It is used to control, and dispatch, the editor’s slash-command / CMD> menu behavior, and appears to be treated as a small integer mode or selection value. This logic does not exist in the v8.0 editor flow, indicating it was introduced or substantially expanded in v8.1. Observed behavior in bbs.msgs (v8.1) The editor command-prompt section sets up a list of command keywords, reads user input, and then stores the selected command number into Key excerpt (v8.1, around 2930–2939): 2931 !60,.:II$="divider,rap,elete,dit,end,merge":&"...CMD> ..." 2932 [.9,I$: ... :IF!60THEN&@3(DE$,LG) 2933 ... ]2935:\!60,II: ... (stores selection into !60) 2936 IFII<11 !60,.:!56,-(II=9):!57,47 2937 I$="":II$="":RETURN Important notes:
Dispatcher usage Version 8.1 uses 1302 ON!60 GOTO 1314,1305,1306,1365,1310,1312:!60,1:@ This strongly indicates:
Based on the command list order from line 2931, the implied mapping is:
Slash-command prefix interaction ("/") !60 is also used as a boolean-style flag to enable slash-style command entry behavior. One observed usage is: 311 II=GO(!60,47,.) Where:
This supports the interpretation that
Additional references in the editor flow Line 1300 shows 1300 !7,FM:A=I:!60,1:[GOSUB311:IFP]... Lines 2885 / 2888 show the same “set 2885 ... :!60,1:[GOSUB311:IFP]... 2888 ON!60 GOTO 2890,1305,2889,2895:!60,1:@ Working conclusion In Color 64 v8.1,
Open questions
This is also used in conjunction with |
ML Functions
| Topic | Notes | ||||
|---|---|---|---|---|---|
| @31 | @31 – Sequential Read (Enhanced) Overview Higher-Level Replacement for @5
It is used prominently in merge-message routines within Behavior
Example Usage (v8.1a): 2330 T=@9:[I$=@31:II=ST:GOSUB2400 2335 T=T-LEN(I$):A$(A)=I$:A+:@[II] AND A<ML+4 AND T>=CM%(7,.):GOTO505 Functional Characteristics 1) Sequential File Read
2) Status-Driven Looping
This is frequently paired with the enhanced In comparison:
Notes
Conclusion
|
| Topic | Notes | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @32 | @32(2,2) – Return Block Count The In Color 64 v8.1, Syntax: Status / End-of-List Behavior: Typical pattern: A=@32(2,2) IF ST THEN ... :rem end of directory (or no match) Common Usage Patterns 1) Check if a file exists, or get its size
OPEN 8,DV,8,"$"+DR$+F$+"*" GOSUB 770 :rem read/skip directory header (implementation-specific) A=@32(2,2) IF ST THEN ER=62:A$="NOT IN DIRECTORY: "+F$:GOTO <error handler> 2) Display a directory-style listing (blocks + filename)
B=-3 B=B+1 C=@32(2,2) IF ST THEN PRINT B;" FILES SELECTED":RETURN PRINT C;TAB(6);@5 3) Maintenance checks based on file size (example: caller-log trimming)
F$="✓CALLER LOG":GOSUB 710 P=A-CM%(8,.) P=-P*(P>.) :rem P is positive only when the file exceeds the configured limit Notes
8.0 Comparison
|
| Topic | Notes |
|---|---|
| @33 | @33 - Return CHR$(0) Null
There is no comparative code from earlier versions of Color 64 currently known. |






























