A note on configuration of runtime interpreters
Most interactive applications for CP/M were distributed with a configuration program that would at minimum allow the user to define
the terminal that was attached to the computer. CIS and LEVEL II COBOL were no exceptions.
The utility is called 'CONFIG.COM'. It is used to configure RUNA.COM, FORMS2.COM and "INT" files that are
linked with the Run Time System to produce an executable program. However, since many CP/M computers had only one type of screen,
the COBOL product sold for that system was adapted to not make it possible to configure the terminal's escape sequences.
In the most restricted cases, it was only possible to change the tab stops.
The limitations are controlled by a value in the runtime programs.
Since so few copies of CIS and LEVEL II COBOL have survived, it may be necessary to modify the runtime manually to make it work
on other computers. In the tables below, the runtime is configured for the ADM-3A terminal.
Configure control
Address | Description |
Hex | Dec |
0085 | 133 | First letter of the URN |
0086 | 134 | First letter of the URN |
0087 | 135 | Number part of URN (MSB) |
0088 | 136 | Number part of URN (LSB) |
0089 | 137 | Second-last letter of the URN |
008A | 138 | Last letter of the URN |
008B | 139 | Major version ($04) |
008C | 140 | Minor version (e.g. $05) |
The URN and version values must match the same in config.com for it to modify the file.
Addresses $0060 to $0062 contain the revision number. $05,$01,$03 will show as revision 513.
Terminal characteristics
Address | Value (org) |
Hex | Dec | Hex | Description |
008D | 141 | 00 | Address for "call" area? Low byte |
008E | 142 | 00 | Address for "call" area? High byte |
008F | 143 | 01 | Unknown flag |
0090 | 144 | 4F | Number of characters per line minus one |
0091 | 145 | 17 | Number of lines on screen minus one |
0092 | 146 | 00 | 1 = Terminal does its own echo |
0093 | 147 | 00 | 1 = Screen position is used by highlighting control code, 0 = otherwise |
Special keys
In CIS COBOL you can configure what the terminal will send for carriage return backspace etc.
Address | Value (org) |
Hex | Dec | Hex | Description |
0096 | 150 | 0D | Carriage return |
0097 | 151 | 08 | Backspace one character |
0098 | 152 | 0C | Forward space one character |
0099 | 153 | 0B | Backspace one field |
009A | 154 | 0A | Forward space one field |
009B | 155 | 1E | Backspace to first field of accept (home) |
009C | 156 | 09 | Column tabbing |
009D | 157 | 00 | Escape |
Direct IO port use
Address | Value (org) |
Hex | Dec | Hex | Description |
009E | 158 | 01 | Flag |
009F | 159 | | Input port |
00A0 | 160 | | Invert bits (00 or FF) |
00A1 | 161 | | Input status port |
00A2 | 162 | | Input status bit mask |
00A3 | 163 | | Output port |
00A4 | 164 | | Invert bits (00 or FF) |
00A5 | 165 | | Output status port |
00A6 | 166 | | Output status bit mask |
00F5 | 245 | FF | Mask to be and'ed with all keyboard characters |
Location of addressing
Both direct cursor addressing and step addressing, i.e. codes to move the cursor up, down, right and left
are stored in addressess $00A7-$00BF.
Step addressing
Address | Description |
Hex | Dec |
00A6 | 166 | Flag: 0 if step addressing |
00A7 | 167 | Up |
00A8 | 168 | Down |
00A9 | 169 | Right |
00AA | 170 | Left |
00AB | 171 | Unused |
Direct addressing
Address | Value (org) |
Hex | Dec | Hex | Description |
00A6 | 166 | 01 | Flag: 1 if direct addressing |
00A7 | 167 | 02 | # to send bytes before |
00A8 | 168 | 59 | 'X' or 'Y': coordinate #1 selector (binary) |
00A9 | 169 | 00 | # bytes between |
00AA | 170 | 58 | 'Y' or 'X': coordinate #2 selector (binary) |
00AB | 171 | 00 | # bytes after |
00AC | 172 | 20 | X coordinate offset |
00AD | 173 | 20 | Y coordinate offset |
00AE | 174 | 1B | 1st byte to send before (see 00A7) |
00AF | 175 | 3D | 2nd byte to send before |
00B0 | 176 | 00 | 1st byte to send between (see 00A9) |
Highlighting
Address | Value (org) |
Hex | Dec | Hex | Description |
00B7 | 183 | 00 | Mask for highlighting |
00B8 | 184 | 00 | Number of characters to send to turn highlighting on |
00B9 | 185 | 00 | Number of characters to send to turn highlighting of |
00BA | 186 | 00 | First byte in sequence |
00BF | 191 | 00 | Last byte in sequence |
Clear screen
Located address $00C0 to $00C3.
Address | Value (org) |
Hex | Dec | Hex | Description |
00C0 | 192 | 01 | Number of bytes to send |
00C1 | 193 | 1A | 1st byte to send |
00C2 | 194 | 00 | 2nd byte to send |
00C3 | 195 | 00 | 3rd byte to send |
Move to top left corner
Located address $00C4 to $00C7.
Address | Value (org) |
Hex | Dec | Hex | Description |
00C4 | 196 | 01 | Number of bytes to send |
00C5 | 197 | 1E | 1st byte to send |
00C6 | 198 | 00 | 2nd byte to send |
00C7 | 199 | 00 | 3rd byte to send |
Audible alarm (bell)
The character to send for the bell is located at $00C8.
Address | Value (org) |
Hex | Dec | Hex | Description |
00C8 | 200 | 07 | Bell character |
Location of tab stops
On CIS COBOL 4.x the tab stops are stored in address 222-237.
Address | Value (org) |
Hex | Dec | Hex | Description |
00DD | 221 | 09 | Number of tab stops |
00DE | 223 | 08 | First tab stop at position 8 |
00DF | 224 | 10 | Second tab stop at position 16 |
00E0 | 225 | 18 | 3rd tab stop at position 24 |
00E1 | 226 | 20 | |
00E2 | 227 | 28 | |
00E3 | 228 | 30 | |
00E4 | 229 | 38 | |
00E5 | 230 | 40 | |
00E6 | 231 | 48 | |
00E7 | 232 | 00 | |
00E8 | 233 | 00 | |
00E9 | 234 | 00 | |
00EA | 235 | 00 | |
00EB | 236 | 00 | |
00EC | 237 | 20 | |
00ED | 238 | 00 | Flag. If it is $01, then only tab stops can be changed. If it is $00, then all features can be changed. |