The interpreter is loaded first to $1200 and next down by the monitor
program from $1200 to commence at $0000.
The jump table at the start of the RAM Monitor has different addresses
to the ROM Monitor ( see subroutines
and workarea of the ROM
Monitor 1Z-013A ), they are listed below, all addresses are in hex.
Some appear to be unused while others are duplicated.
The list of RAM Monitor and S-BASIC entry points and work area addresses
is not a complete list, but it might assist those of you who are delving
into the interpreter with your disassembler.
| S-BASIC entry points / work area |
|
Address
|
Description |
|
$0000
|
Cold start monitor / BASIC |
|
$0003
|
Get line to workarea addressed by DE ( unused, all calls to $004A
) |
|
$0006
|
New line |
|
$0009
|
New line if the cursor isn't positioned at line begin |
|
$000C
|
Print space |
|
$000F
|
Print tab. Sets the cursor to the next tab position |
|
$0012
|
Print character stored in Accu |
|
$0015
|
Print message pointed to by DE ( unused, all calls to $0051 ) |
|
$0018
|
Execute software command |
| $001B |
check if key is pressed |
| $001E |
check if SHIFT-BREAK is pressed |
|
$0021
|
Write info header to tape ($3ADD = RET!) |
|
$0024
|
Write data to tape ($3ADD = RET!) |
|
$0027
|
Read info header from tape ($3ADD = RET!) |
|
$002A
|
Read data from tape ($3ADD = RET!) |
|
$002D
|
Verify tape and program in RAM ($3ADD = RET!) |
|
$0030
|
$00B2 = RET |
|
$0033
|
Time set |
|
$0038
|
$00B2 = RET |
|
$003B
|
Read time |
|
$003E
|
Bell |
|
$0041
|
Set tempo |
|
$0044
|
Melody stop |
|
$0047
|
Melody stop |
|
$004A
|
Get line from keyboard |
| $004D |
= $5800 Address of cold start Basic Interpreter |
| $004F |
addresses of error routines |
| $0058 |
keyboard request / get key |
| $005B |
Control code address table. Contains the address to jump to after
the "PRINT CHR$"-statement or a key with the CTRL-key
down ( The "NOACT" shown there means it will effect
in an immediate return ).
| Address |
CTRL & |
Action |
| $00B2 |
@ |
NOACT |
| $00B2 |
A |
NOACT (free for turn to ASCII keyboard) |
| $00B2 |
B |
NOACT (free for switching the border
color) |
| $09B0 |
C |
CR |
| $00B2 |
D |
NOACT (free for turn to German keyboard) |
| $0A1B |
E |
Shift Lock |
| $0A19 |
F |
Alpha mode |
| $00B2 |
G |
plotter new color |
| $00B2 |
H |
NOACT (free for switching the background
color) |
| $A024 |
I |
TAB |
| $00B2 |
J |
NOACT |
| $00B2 |
K |
NOACT (free for hardcopy) |
| $00B2 |
L |
NOACT |
| $09B0 |
M |
CR |
| $1500 |
N |
stop / start print |
| $00B2 |
O |
NOACT |
| $06BE |
P |
DEL |
| $09CF |
Q |
Cursor down |
| $09F9 |
R |
Cursor up |
| $09D4 |
S |
Cursor right |
| $09FE |
T |
Cursor left |
| $0992 |
U |
HOME |
| $061D |
V |
CLR |
| $0A1E |
W |
Graphic mode |
| $0776 |
X |
INS |
| $0A19 |
Y |
Alpha mode |
| $00B2 |
Z |
NOACT (free for switching the character
color) |
| $09B0 |
Ä |
CR |
| $00B2 |
Ü |
NOACT |
| $00B2 |
Ö |
NOACT |
| $00B2 |
^ |
NOACT |
| $00B2 |
/ |
NOACT |
|
| $009B |
CTRL routine |
| $00A8 |
disable interrupts |
| $00B3 |
enable interrupts |
| $00BA |
PUSH IX, HL, BC, DE, AF |
| $00C7 |
PUSH IX, HL, BC, DE |
| $00D3 |
POP AF, DE, BC, HL, IX |
| $00DA |
switch from monitor to RAM $E000 - $FFFF |
| $00E6 |
break without message, no CONT possible |
| $00E8 |
BREAK |
| $00ED |
handle errors, Accu contains error number |
| $00F6 |
compute length of text (DE), end = $00 |
| $0104 |
output table (HL) to port (C) in the length of B |
| $010D |
compute ASCII value (HL) to hex DE. Check upper limit in B. |
| $011B |
Compare the bytes behind the CALL instruction with the contents
of the Accu in the length of B |
| $012D |
Pick up an address from table (HL) to DE. HL = HL + 1 |
| $0132 |
Pick up an address from table (HL) to DE. HL = HL |
| $0137 |
Clear memory (HL) with $00 in the length of B |
| $0138 |
Fill memory (HL) with the value in the accu in the length of B |
| $013D |
Clear memory (DE) with $00 in the length of B |
| $0143 |
Move memory from (HL) to (DE) in the length of B |
| $014A |
Move memory from (DE) to (HL) in the length of B |
| $0151 |
Pick up an address from table (HL) to HL. |
| $0158 |
HL = HL + A |
| $015D |
skip spaces |
| $0164 |
Compare the byte behind the CALL instruction with the contents
of (HL) |
| $016E |
like $0164, but if not then error 1 |
| $017C |
table of software commands |
| $022C |
execute software command |
| $0247 |
CALL (IX) and display error if any |
| $025E |
Compute hex value in HL to ASCII value (DE) |
| $029E |
Compute decimal or hex ASCII (HL) to hex DE |
| $02CE |
Compute hex ASCII (HL) to hex DE |
| $02E9 |
Compute hex ASCII A to hex |
| $02F8 |
Wait on space key then next key |
| $0305 |
Wait on any key. If BRK key then break program execution |
| $0314 |
Store device table pointer DE and device number A |
| $031C |
Correct pointer to the I/O workarea, basic variables area, and
strings area |
| $0323 |
Correct pointer to the basic variables area and strings area |
| $032A |
Correct pointer to the strings area |
| $0340 |
Print error. A contains error number |
| $0397 |
Move the actual device name to (HL) |
| $03B6 |
Text "error" |
| $03BE |
Set screen mode |
| $0419 |
Init palette register and set maximum of the scroll area |
| $0441 |
Init palette register and init base colors black/blue/red/white |
| $044F |
Set palette block number |
| $0476 |
Color code to palette register (B = color code, A = palette code
number) |
| $048A |
Set character color to palette value in A |
| $0493 |
Set graphic color to palette value in A |
| $049C |
Correct the palette value in A for the max. resolution |
| $04AE |
Compute the values of start / end scroll coordinates then output
these to the controller. |
| $04EF |
Set screen routines to 40 or 80 columns |
| $0531 |
Init routines using values from (HL) |
| $054F |
Table values for setting to 40 or 80 columns
|
| $05AD |
Print accu |
| $05CE |
Print accu on graphic screen |
| $05F9 |
Compute Y coordinates to DE |
| $0615 |
Get pointer to Y coordinate to HL |
| $061D |
CLR |
| $0671 |
Clear memory area |
| $06AC |
Reset scroll offset |
| $06BE |
DEL |
| $0776 |
INST |
| $0848 |
Scroll |
| $08E5 |
Change character at cursor position for flashing cursor |
| $092B |
Init keyboard and show cursor |
| $0945 |
Show cursor or character |
| $094D |
New cursor position by HL |
| $0963 |
Compute text cursor position in pseudo screen by coordinates from
HL |
| $0977 |
Compute the graphic screen address by the actual cursor position |
| $0992 |
HOME |
| $099B |
New line, if the cursor position > 0 |
| $09AB |
New line |
| $09CF |
Cursor down |
| $09D4 |
Cursor right |
| $09E3 |
Concatenate lines and scroll conditional |
| $09F9 |
Cursor up |
| $09FE |
Cursor left |
| $0A19 |
ALPHA |
| $0A1B |
SMALL |
| $0A1E |
GRAPH |
| $0A24 |
TAB |
| $0A24 |
Get line form keyboard to memory (DE) |
| $0AB4 |
BRK-key |
| $0ABB |
Fetch textline from screen into the input area |
| $0BA1 |
Check for kbd input. Statuscode returns in A. |
| $0B7B |
Check for kbd input again. |
| $0B8B |
Check for kbd input without rebounce. |
| $0BA1 |
Check for kbd input. Keycode returns in A |
| $0BAB |
Check if a function key is pressed. Get a character. |
| $0BC1 |
Check if kbd input has changed |
| $0BF6 |
Check for kbd input; returns ASCII |
| $0C75 |
Check if function key is used. |
| $0CAB |
Compute to ASCII key code |
| $0CEF |
Identify CTRL-key |
| $0D22 |
Check for BRK condition (SHIFT/BRK) |
| $0D30 |
KEY work area |
| $0D47 |
Key codes translation table |
| $0D8F |
CTRL keys translation table |
| $0D94 |
Print text (DE) depending on a Ctrl-code for upper-/lowercase
output. |
| $0DC3 |
SHARP ASCII table of lowercase letters |
| $0DDD |
CRT-device table |
| $0DF6 |
KEY device table |
| $0E0F |
Get kbd line and compute line length |
| $0E17 |
character in A |
| $0E26 |
get current screen X-value |
| $0E2A |
new line or CRT/LPT |
| $0E2C |
Print A to CRT/LPT. Ctrl codes will be executed. |
| $0E3A |
Print A to CRT/LPT. Ctrl codes will be displayed. |
| $0E48 |
Print text (DE) to CRT/LPT |
| $0E50 |
Print text (DE) to CRT. Ctrl codes will be executed. |
| $0E5F |
Print space to CRT |
| $0E61 |
Print A to CRT. Ctrl codes will be executed. |
| $0EA2 |
Print A to CRT. Ctrl codes will be displayed. |
| $0ED9 |
Ctrl code translation table for LPT output |
| $0EF9 |
Boot routine used by the Monitor/Basic |
| $0F2D |
identify the load device and set it to the actual device |
| $0F4E |
Check for graphic expansion option |
| $0F7F |
device table for USR routines |
| $0F98 |
prepare addresses for USR routines |
| $0FA7 |
USR device data I/O |
| $0FFC |
Music interrupt address |
| $0FFE |
Printer interrupt address |
| $1000 |
workarea for file attributes |
| $104A |
workarea for current device table |
| $1069 |
workarea for default device data |
| $1070 |
pointer workarea |
| $1082 |
cursor workarea |
| $11A4 |
workarea / inputarea |
| $12B2 |
text area of function keys |
| $1352 |
area for values of the current function key |
| $1369 |
current screen values |