Location |
Symbolic
name |
used
register(s) |
Stack
levels |
Description |
$0000
|
MONIT |
all |
- |
This is the first address executed if the
power is turned on or if the reset key is pressed. Monitor cold
start entry point. |
$0003
|
GETL |
- |
15 |
Inputs one line of text from the keyboard.
Specify the start address of the RAM location for storing data
in the Z80 register pair DE before entry to the routine.
The end of text string marker is a CR ( $0D ) character. The
maximum number of characters in the input string is 80 including
the CR at the end of the string.
Note, key input is echoed to the V.D.U. screen. Cursor control
characters are allowed in the string.
When the SHIFT and BREAK keys are pressed the BREAK code is entered
in RAM at te address speified by the contents of DE. A CR is also
entered address (DE)+1.
Note, all registers are stored on entry to this routine and 15
stack levels are rquired.
|
$0006
|
LETNL |
AF |
8 |
This routine outputs a CRLF to the V.D.U. screen and moves the
cursor to the start of the next line.
All registers are stored except A and F. Also 8 stack levels
are required by this routine.
|
$0009
|
NEWLIN |
AF |
8 |
This routine outputs a CRLF to the V.D.U. screen and moves the
cursor to the start of the next line if the cursor is not at the
first porsition of a line.
All registers are stored except A and F. Also 8 stack levels
are required by this routine.
|
$000C
|
PRINTS |
AF |
13 |
This routine outputs to the V.D.U screen one space character
at the current cursor position.
All registers are stored except A and F. Also 13 stack levels
are equired by this routine.
|
|
TABUL |
AF |
14 |
Skip to column 10, 20, 30, |
|
PRNT |
AF |
13 |
This routine outputs the ASCII code for a character stored in
accumulator A to the current cursor position on the V.D.U. screen.
If the contents of A is a carriage return ( CR, $0D ) character
a carriage return is displayed on the V.D.U. Similarly cursor
control codes $11 o $16 cause movement of the cursor ( up, down,
left, right, home, clear ).
Cursor
control
code |
Cursor
movement |
$0D |
CR |
$11 |
Cursor down |
$12 |
Cursor up |
$13 |
Cursor right |
$14 |
Cursor left |
$15 |
HOME |
$16 |
CLR |
$7F |
Scroll |
All registers are store except A and F. Also 13 stack levels
are required by this routine.
|
|
MSG |
- |
14 |
Outputs a message on the V.D.U screen starting at the current
cursor position.
The address of the start of the message in RAM is entered in
the Z80 DE register pair before entry to the routine.
The message must be a string of ASCII characters terminated by
an $0D character.
The carriage return character at the end of the message string
is NOT executed.
However, cursor control characters are executed. See the
table at $0012.
All registers are stored. Also 14 stack levels are required by
this routine.
|
$0018
|
LISTL |
- |
14 |
Works like the routine at location $0015,
but the symbols of cursor control characters are displayed ( not
executed ! ). |
$001B
|
GETKY |
AF |
9 |
Inputs to accumulator A the ASCII code of a key which has been
pressed.
The code for the pressed key is NOT echoed to the V.D.U. display
drive.
Key bounce is not prevented by this routine.
Key |
Value in
register A
|
DEL |
$60 |
INST |
$61 |
CAP |
$62 |
SML |
$63 |
BREAK |
$64 |
CR |
$66 |
All registers other than A and F are stored. Also 9 stack levels
are required by this routine.
|
$001E
|
BRKEY |
AF |
1 |
If SHIFT and BREAK are pressed the zero
flag is set to indicate this event. |
$0021
|
WOPEN |
AF |
21 |
This routine writes the tape header from
location $10F0 to tape. See the description of the monitor's
workarea. |
$0024
|
WRITE |
AF |
21 |
This routine writes data to tape. |
$0027
|
ROPEN |
AF |
21 |
This routine reads the next tape header
into the RAM beginning from the location $10F0. See the description
of the monitor's workarea. |
$002A
|
READ |
AF |
21 |
This routine reads the data from the file
into the RAM beginning from the location as defined in the tape
header. See the description of the monitor's
workarea. |
$002D
|
VERIFY |
AF |
21 |
Compare the data written to tape with the
data in the RAM to be sure that the tape file will be ok.It checks
data on cassette tape BUT does not store it into RAM - just compares
data on tape with contents of RAM. |
$0030
|
MELDY |
AF |
7 |
This routine plays music, executing a string of ASCII data characters
to generate the sound sequence.
Specify the start address of the music data string in the Z80
register pair DE before entering the routine.
The music data is a string which is arranged as a sequence of
pitch and duration ASCII control codes. The string sequence is
the same as that shown in the SHARP BASIC Manual. The end of string
marker should be an $0D or $C8 character.
On returning from the subroutine the Z80 register C is set to
0 if the music sequence was completed or C is set to 1 if not
completed, due to the BREAK key having been pressed while the
music was playing.
All registers other than A and F are stored. Also 7 stack levels
are required by this routine..
|
|
TIMST |
AF |
6 |
This routine sets the built-in real time clock.
The clock is started by a call to this routine !
The clock is set to the contents of the following registers:
Register |
meaning |
A = 0 |
AM |
A = 1 |
PM |
DE |
time in seconds
( 2 bytes binary ) |
The contents of A and DE must be set before entering this routine.
All registers are stored other than A, F, and DE. Also 6 stack
levels are required by this routine.
|
$003B
|
TIMRD |
AF, DE |
3 |
This routine reads the time from the real time clock.
The Z80 internal registers hold the real time. To this see the
table at routine $0033.
All registers except AF and DE are stored. Also 3 stack levels
are required by this routine.
|
$003E
|
BELL |
AF |
5 |
This routine simulates the ringing of a bell. A middle A note
( ruoghly 440Hz ) is generated for a short time.
All registers are stored other than AF. Also 5 stack levels are
required by this routine.
|
$0041
|
XTEMP |
- |
4 |
This routine sets the tempo of the music generator.
The value ( 1 to 7 ) of the tempo must be set entered into the
Z80 accumulator register A before calling this routine.
Register A |
Tempo |
$01 |
slowest tempo |
$04 |
medium tempo |
$07 |
fastets tempo |
The
codes set into the accumulator A are in binary NOT ASCII characters.
|
|
MSTA |
AF, HL |
3 |
This routine generates a sound specified by the relation
f = 2000 kHz / nn'
nn' is a 2 bytes hex value to be stored into the storage
at locations $11A1 and $11A2.
n is the high order byte and must be stored into location
$11A2 and n' is the low order byte and must be stored into
location $11A1.
Both values must be stored before calling this routine.
Yyour program must stop the tone by the following subroutine $0047
or by your own subroutine before your program invokes the next
tone otherwise an unpredictable frequency value is invoked.
nn' must be greater than 255 !
Example:
A continous tone of 100 Hz is to invoke.
nn' = 1108.8 kHz / f ( f = 100 Hz )
nn' = 1108.8 * 103 Hz / 100 Hz = 11,088
11.088 is to convert into hex, that is $2B50 and this value is
to load into $11A1 / $11A2.
;load counter value
1200 21502B LD HL,$2B50
;into memory
1203 22A111 LD ($11A1),HL
;start tone of 100 Hz
1206 CD4400 CALL $0044
;goback to monitor
1209 C3AD00 JP $0082
At this point a tone of 100 Hz is audible. To stop the tone use
the subroutine $0047.
Registers BC and DE are stored. Also 3 stack levels are required
by this routine.
|
|
MSTP |
AF |
1 |
This routine stops the operation of the sound generator and it
is initialized for a next operation by $0044.
All registers are stored except AF. One stack level is required
by this routine.
|
$0082
|
ST1 |
- |
- |
Warm start address of the monitor. |
$0180
|
CMPSTR |
AF |
4 |
This routine compares strings: The start
addresses of the strings must be stored into DE and HL and the length
into B prior of the exexution of this subroutine. The zero flag
is set to 0 to indicate that the strings are equal. |
$02AE
|
TONE |
AF, HL |
3 |
Works like $0044 but
you can store nn' into HL. |
$03BA
|
PRTWRD |
AF |
16 |
This routine outputs a 16-bit hexadecimal
number contained in HL to the screen. |
$03C3
|
PRTBYT |
AF |
15 |
This routine outputs a hexadecimal number
contained in A to the screen. |
|
DIGASC |
AF |
3 |
This routine takes the lower 4 bits of the contents of the accumulator
and converts it into an ASCII code. The resulting code is entered
into A before leaving the routine.
All registers are stored except AF. Three stack levels are required
by this routine.
|
$03F9
|
ASCDIG |
AF |
3 |
This routine performs the reverse function of the routine at
$03DA.
The 8 bits of accumulator A are assumed to represent an ASCII
code. This code is converted into a hexadecimal number. The resulting
number is stored in the accmulator before leaving the routine.
If the carry flag is 0 on returning to the calling routine the
number in the accumulator is a hexadecimal number.
All registers are stored except A and F and HL. Three stack levels
are required by this routine.
|
|
ASCWRD |
AF, HL |
7 |
This routine converts a four character ASCII string into a hexadecimal
number. The hexadecimal number is stored in register HL.
Before calling this routine the address in RAM of the start of
the ASCII string must be entered in registered pair DE, for example
: "3", "1", "A", "5" (
ASCII string pointed to by DE ). Then HL will be $31A5.
If the carry flag is 0 on returning to the calling routine the
number in HL is hexadecimal.
All registers are stored except AF and HL. 7 stack levels are
required by this routine.
|
$041F
|
ASCBYT |
AF, DE |
5 |
Similar to the routine at $0410 . Converts
two character ASCII string pointed to by DE to hexadecimal and
sets result in accumulator A.
If the carry flag is 0 on returning to the calling routine the
number in A is hexadecimal.
All registers except AF and DE are stored. 5 stack levels are
required by this routine.
|
$08CA
|
GETKYD |
AF |
8 |
This routine reads a character from the
keyboard into the accumulator. The character is in display code
format. If no key was pressed the accumulator contains $F0. It doesn't
wait for input. |
$0946
|
PRTCH |
AF |
10 |
The ASCII character contained in C is displayed
on the screen. The routine does not wait for the blanking signal.
The carriage return character $0D takes no action. This routine
works similar to the routine $0012. |
|
DISPLY |
AF |
10 |
The display code contained in the accumulator
A is displayed on the screen. The routine does not wait for the
blanking signal. |
$09B3
|
READKY |
AF |
11 |
While flickering the cursor this routine waits for a key to be
pressed. When a key is pressed it sets the display code for the
key in accumulator A and returns.
All registers except AF are stored. 11 stack levels are required
by this routine.
|
$0A44
|
BRKTST |
AF |
1 |
This routine checks if the break key is
pressed. If the break key is pressed the zero flag is set. |
$0BB9
|
ACDISP |
AF |
3 |
This routine converts an ASCII string in accumulator A into its
display code.
The accumulator is set to $F0 for non-displayable characters.
All registers except AF are stored. 3 stack levels are required
by this routine.
|
$0BCE
|
DISPAC |
AF |
3 |
This routine converts a display code stored in accumulator A
into its ASCII code.
By a bug in the monitor the result is unusable if the register
A contains a display code greater than 223.
All registers except AF are stored. 3 stack levels are required
by this routine.
|
$0DA6
|
SNCV |
- |
2 |
Waits for the blanking signal. Access to
the video-RAM without interferences is possible by using this routine. |
$0DB5
|
DISPCH |
- |
9 |
Works similar to the routine at $0970
but the column counter of the tabulator ( UP TABUL $000F
) will not be incremented by this routine. |
$0DDC
|
MOVECU |
- |
9 |
This routine may be used to control the display on the V.D.U.
screen. The value of accumulator A determines the controlling
function. To this, see the following table.
accu |
function |
$C0 |
scrolling |
$C1 |
cursor down |
$C2 |
cursor up |
$C3 |
cursor right |
$C4 |
cursor left |
$C5 |
HOME |
$C6 |
CLR |
$C7 |
DEL |
$C8 |
INS |
$C9 |
CAP |
$CA |
SML |
$CD |
CR |
All registers are stored. 9 stack lvels are required by this
routine.
|
$0FB1
|
GETVAD |
AF, HL |
5 |
This routine determines the current position of the cursor on
the V.D.U. screen.
The cursor position is stored as a binary number in the Z80 registaer
pair HL.
Remember, there are 25 lines of 40 characters, yielding 1,000
possible positions between 0 and 999.
All registers are stored except AF and HL and 5 stack levels
are required by this routine.
|
$0FB4
|
CALVAD |
HL |
4 |
Computes the V-RAM address of the current
cursor position. L = column; H = row. The result is stored into
the register pair HL. |
$0FC9
|
INITIO |
AF, HL |
1 |
Inits the 8255: Mode 0, ports A and C0 -
C3 are set as output ports; ports B and C4 - C7 are set as input
ports. |