------------------------
| Model 100 System Map |
------------------------
Copyright 1985
Revision Date: 09/30/85
Compiled and Researched by:
Robert D. Covington
Systems Information Management Consultants
[Not associated with The Covington Group, N. Y., N. Y.]
[Update: I've added decimal addresses along side the hex
addresses for easier reference. -Gary Weber 3/12/96]
This document may be duplicated and distributed free of
charge to any individuals who desire it. Any duplications of
this document, however, must inluce all of the information
contained here-in, with no deletions or changes.
The author and distributors of this document make no
expressed or implied warrantees as to the validity of the
information contained here in.
- Model 100 ROM Memory Map -
0000H (0) - System Reset
0008H (8) - Compare character following RST 8H with the character pointed
to by HL.
Entry:
HL - Points to the buffer to be used for the
comparison. The character after call is compared
with the character pointed to by HL.
Exit:
If compare is successful a RST 10H is issued
If compare is unsuccessful, a SYNTAX ERROR is generated
0010H (16) - Get the next character in the buffer pointed to by HL and
place it in the A register. HL is incremented prior to the
load. Spaces and tabs in the buffer are skipped.
Entry:
HL - Points to buffer
Exit:
A - Character loaded from buffer
HL - Incremented
C flag - Set if character is a digit
Z flag - Set if character is a colon or null
0018H (24) - Compare DE and HL
Entry:
HL - Number to compare
DE - Number to compare
Exit:
C flag - Set if HLFAC1
1 if BCDEFAC1
34C2H (13506) - Compare the signed integer in DE to the signed integer in HL.
Entry:
HL - First integer to compare
DE - Second integer to compare
Exit:
A = 255 (-1) if DE>HL
1 if DEHL
34FAH (13562) - Compare the double precision number in FAC1 to the double
precision number in FAC2.
Entry:
FAC1 - First double precision value to compare
FAC2 - Second double precision value to compare
Exit:
A = 255 (-1) if FAC1>FAC2
1 if FAC1FAC2
3501H (13569) - CINT Function. Convert floating point number in FAC1 to an
integer.
Entry:
FAC1 - Floating point number to convert
Exit:
HL - Converted signed integer in FAC1
FAC1 - Converted to an integer
3510H (13584) - Load the signed integer in HL into FAC1
Entry:
HL - Signed integer to put in FAC1
Exit:
A = 2
352AH (13610) - CSNG Function. Convert the number in FAC1 to a single
precision value.
Entry:
FAC1 - Number to convert
Exit:
FAC1 - Converted single precision number
3540H (13632) - Convert the signed integer in FAC1 to single precision.
Entry:
FAC1 - Contains signed integer to convert
Exit:
FAC1 - Converted single precision number
3543H (13635) - Convert the signed integer in HL to a single precision number
in FAC1.
Entry:
HL - Contains signed integer to convert
Exit:
FAC1 - Converted single precision number
35BAH (13754) - CDBL function. Convert the number in FAC1 to a double
precision floating point number.
Entry:
FAC1 - Number to convert to double precision
Exit:
FAC1 - Converted double precision number
3645H (13893) - FIX Function
3654H (13908) - INT Function. Find the integer portion of the floating point
number in FAC1.
Entry:
FAC1 - Floating point number
Exit:
FAC1 - Integer portion of floating point number
36F8H (14072) - Subtract the signed integer in HL from the signed integer in
DE.
Entry:
HL - First number to subtract
DE - Second number to subtract
Exit:
FAC1 - Result of subtract
HL - Integer result of subtract
3704H (14084) - Add the signed integer in HL to the signed integer in DE. If
the result is greater than 32767, the result is converted
into single precision.
Entry:
HL - First number to add
DE - Second number to add
Exit:
FAC1 - Result of addition
HL - Integer result of addition
3725H (14117) - Multiply the signed integer in HL by the signed integer in
DE. If the result is greater than 32767, the result is
converted into single precision.
Entry:
HL - First integer to multiply
DE - Second integer to multiply
Exit:
FAC1 - Result of multiplication
HL - Integer result of multiplication
377EH (14206) - Divide the signed integer in DE by the signed integer in HL.
Entry:
HL - Integer Numerator
DE - Integer Denominator
Exit:
FAC1 - Result of division
37F4H (14324) - Add the single precision numbers in FAC1 and BCDE
(FAC1=FAC1+BCDE)
Entry:
FAC1 - First single precision number
BCDE - Second single precision number
Exit:
FAC1 - Result of single precision addition
37F7H (14327) - Add the single precision numbers in FAC1 and FAC2
(FAC1=FAC1+FAC2).
Entry:
FAC1 - First single precision number
FAC2 - Second single precision number
Exit:
FAC1 - Result of single precision addition
37FDH (14333) - Subtract the single precision numbers in FAC1 and BCDE
(FAC1=FAC1-BCDE)
Entry:
FAC1 - First single precision number
BCDE - Second single precision number
Exit:
FAC1 - Result of subtract
3803H (14339) - Multiply the single precision numbers in FAC1 and BCDE
(FAC1=FAC1*BCDE)
Entry:
FAC1 - First single precision number
BCDE - Second single precision number
Exit:
FAC1 - Result of multiply
3806H (14342) - Multiply the single precision numbers in FAC1 and FAC2
(FAC1=FAC1*FAC2)
Entry:
FAC1 - First single precision number
FAC2 - Second single precision number
Exit:
FAC1 - Result of multiply
380EH (14350) - Single precision divide (FAC1=BCDE/FAC1)
Entry:
BCDE - Single precision numerator
FAC1 - Single precision denominator
Exit:
FAC1 - Result of divide
3827H (14375) - Load FAC2 with the single precision number in BCDE.
Entry:
BCDE - Single precision number
Exit:
FAC2 - Copy of single precision number
HL - Destroyed
3840H (14400) - Convert the ASCII number pointed to by HL to its double
precision equivalent.
Entry:
HL - Points to buffer with ASCII number
Exit:
FAC1 - Value of ASCII number
All registers destroyed
39D4H (14804) - Print HL in ASCII form at the current cursor position
Entry:
HL - Contains 16 bit binary number to print
Exit:
All registers destroyed
39E8H (14824) - Convert the binary number in FAC1 to ASCII
Entry:
HL - Points to the start of the buffer where the ASCII
number will be stored
FAC1 - Binary Number
Exit:
All registers destroyed
39ECH (14828) - Convert the binary number in FAC1 to ASCII. This routine
will format the ASCII output with the same parameters offered
by BASIC's PRINT USING statement.
Entry:
A - Bit configuration for PRINT USING options
Bit:
0 - Exponential notation
1 - Not used (reset)
2 - Sign (+ or -) follows ASCII number
3 - Sign (+ or -) preceeds number
4 - Print leading '$'
5 - Asterisks fill
6 - Print commas every third digit
7 - Set, allow print using formating
Reset, do no formating on number
B - Number of digits to the left of the decimal
point. This value is used for placeholder filling
C - Number of digits to the right of the decimal
point. This value is used for placeholder
filling
HL - Start of receiving buffer for ASCII number
FAC1 - Binary number to convert
Exit:
All registers destroyed
3D7FH (15743) - Single precision exponential function
3D8EH (15758) - Double precision exponential function
3DF7H (15863) - Integer exponential function
3FA0H (16288) - TIME$ ON Statement
3FB2H (16306) - TIME$ OFF Statement
3FB9H (16313) - TIME$ STOP Statement
4009H (16393) - Clear all COM, TIME, and KEY interrupt definitions
Exit:
HL, A, and B destroyed
407FH (16511) - RESTORE Statement
409AH (16538) - STOP Statement
409FH (16543) - END Statement
40DAH (16602) - CONT Statement
40F1H (16625) - Check to see if the current character in the buffer pointed
to by HL is an alpha character
Entry:
HL - Points to character to check
Exit:
A - Character pointed to by HL
C flag - Reset if character is a letter
40F2H (16626) - Check to see if the character in A is a letter
Entry:
A - Character to check
Exit:
A - Preserved
C flag - Reset if character is a letter
40F9H (16633) - CLEAR Statement
4174H (16756) - NEXT Statement
4222H (16930) - Send CRLF to screen or printer
Exit:
A = 10
4225H (16933) - Send LF to screen or printer
Exit:
A = 10
4229H (16937) - BEEP Statement. Beep computer.
Exit:
A = 7
422DH (16941) - Home cursor
Exit:
A = 11
4231H (16945) - CLS Statement. Clear screen
Exit:
A = 12
4235H (16949) - Protect line 8. An ESC T is printed.
Exit:
A = 84
423AH (16954) - Unprotect line 8. An ESC U is printed.
Exit:
A = 85
423FH (16959) - Stop automatic scrolling. An ESC V is printed.
Exit:
A = 86
4244H (16964) - Resume automatic scrolling. An ESC W is printed.
Exit:
A = 87
4249H (16969) - Turn the cursor on. An ESC P is printed.
Exit:
A = 80
424EH (16974) - Turn the cursor off. An ESC Q is printed.
Exit:
A = 81
4253H (16979) - Delete current line on screen. An ESC M is
printed.
Exit:
A = 77
4258H (16984) - Insert line at current line. An ESC L is printed.
Exit:
A = 76
425DH (16989) - Erase from cursor to end of line. An ESC K is printed.
Exit:
A = 75
4262H (16994) - Send ESC X
Exit:
A = 88
4269H (17001) - Start inverse character mode. An ESC p is printed.
Exit:
A = 112
426EH (17006) - Cancel inverse character mode. An ESC q is printed.
Exit:
A = 113
4270H (17008) - Send escape sequence
Entry:
A - Character after escape (27)
427CH (17020) - Set the current cursor position
Entry:
L - Column (1-40)
H - Row (1-8)
Exit:
A - Destroyed
428AH (17034) - Erase function key display
Exit:
HL & A - Destroyed
42A5H (17061) - Set and display function keys
Entry:
HL - Start address of function key table (see 5A7CH
for the format of the table)
Exit:
All registers destroyed
42A8H (17064) - Display function key line
Exit:
All registers destroyed
4313H (17171) - Print the character in the A register to the screen. This
routine is used by RST 20H to print characters on the screen.
Entry:
A - Character to output
4373H (17267) - Control code routine for LCD output (RST 20H)
438AH (17290) - Start of lookup table for RST 20H control characters. Each
entry starts with the ASCII value of the character followed
by the two byte vector address.
43A1H (17313) - End of special ASCII character lookup table
43AFH (17327) - ESC Y routine (Set cursor position)
43B2H (17330) - ESCape routine (27). This routine puts the LCD output
routine into ESCape mode. The following characters processed
throught the video driver will be used to determine the
escape sequence.
43B8H (17336) - Start of lookup table for LCD escape sequences. Each entry
starts with the one byte escape letter followed by the two
byte vector address.
43F9H (17401) - End of escape vector lookup table
43FAH (17402) - ESCape sequence processor. This routine is used after the
escape mode has been enabled (see 43B2H).
4431H (17457) - Escape p routine (start inverse video)
4432H (17458) - Escape q routine (cancel inverse video)
4437H (17463) - Escape U routine (unprotect line 8)
4439H (17465) - Escape T routine (protect line 8)
443FH (17471) - Escape V routine (Stop automatic scrolling)
4440H (17472) - Escape W routine (Resume automatic scrolling)
444AH (17482) - Escape X routine
4453H (17491) - Escape C routine (move cursor to the right)
445CH (17500) - Escape D routine (move cursor to the left)
4461H (17505) - Backspace routine (08H)
4469H (17513) - Escape A routine (move cursor up one line)
446EH (17518) - Escape B routine (move cursor down one line)
4480H (17536) - Tab routine (09H)
4494H (17556) - Linefeed routine (0AH)
44A8H (17576) - Verticle tab (0BH) and ESC H routine (home cursor)
44AAH (17578) - Carriage return routine (0DH)
44AFH (17583) - Escape P routine (turn cursor on)
44BAH (17594) - Escape Q routine (turn cursor off)
44C4H (17604) - Escape M routine
44EAH (17642) - Escape L routine (insert line on screen)
4535H (17717) - Escape l routine (erase current cursor line)
4537H (17719) - Escape K routine (erase from cursor to the end of the screen)
4548H (17736) - Form feed (0CH), CLS, ESC E, and ESC j routine
454EH (17742) - Escape J routine
463EH (17982) - Input line and place at F685H. Print characters as they are
entered. Start input with a "? ".
Exit:
F685H - Text input from keyboard
HL - Loaded with F685H
C flag - Set if input aborted by a control C
4644H (17988) - Same as 463EH but no "? " is printed.
4684H (18052) - Input routine 463EH Control C handler
4696H (18070) - Input routine 463EH ENTER handler
46A0H (18080) - Input routine 463EH backspace, left arrow, control H handler
46C3H (18115) - Input routine 463EH Control U & X handler
46CAH (18122) - Input routine 463EH Tab handler
478BH (18315) - DIM Statement
4790H (18320) - Find the address of the variable in the buffer pointed to by
HL. This routine returns the same result as BASIC's VARPTR
instruction.
Entry:
HL - Points to the buffer containing the variable name
Exit:
HL - Incremented past variable name
DE - Address of variable descriptor table (like VARPTR)
(FB65H) - Variable type
4991H (18833) - USING Function
4B44H (19268) - Vector of RST 20H. Send the character in A to the screen or
printer (see RST 20H).
4B55H (19285) - Print the character in the A register on the printer. Expand
tabs into spaces if nescessary.
Entry:
A - Character to output
4B92H (19346) - Reinitialize screen back to the LCD. This routine sends a CR
to the printer if needed to empty the print buffer on the
printer.
4BABH (19371) - LCD character output routine
Entry:
A - Character to output
4BB8H (19384) - Send a CRLF to screen if needed to end the current line.
This routine assures that the next text printed on the screen
will start at the beginning of a line.
Exit:
A - Destroyed
4BEAH (19434) - INKEY$ Function
4C84H (19588) - Get information for the file number in the A register. This
routine performs the same as VARPTR(#x). If A is greater
than MAXFILES, a BN error is generated.
Entry:
A - File number (1-maxfiles)
Entry:
HL - Points to file number descriptor table (see
VARPTR(#x).
Z flag - Set if file is not already opened
4CCBH (19659) - OPEN Statement
4D59H (19801) - LCD, CRT, and LPT file close routine
4D6EH (19822) - RUN statement with text following the RUN
4D70H (19824) - LOAD Statement
4D71H (19825) - MERGE Statement
4DCFH (19919) - SAVE Statement
4E28H (20008) - CLOSE Statement
4E8EH (20110) - INPUT$ Function
4F0AH (20234) - Zero the memory starting at HL for B number of bytes
Entry:
HL - Start of buffer to zero
B - Number of bytes to zero
Exit:
HL - Incremented past last byte zeroed
A = 0
B = 0
4F0BH (20235) - Fill the memory starting at HL with the byte in the A
register for B number of bytes
Entry:
HL - Start of buffer to fill
A - Character to fill buffer with
B - Number of bytes to fill
Exit:
HL - Incremented past last byte filled
B = 0
4F2EH (20270) - Routine called by the PRINT statement to initialize a PRINT #.
4F5BH (20315) - LINE INPUT # statement
504EH (20558) - Generate NM error
5051H (20561) - Generate AO error
5054H (20564) - Generate DS error
5057H (20567) - Generate FF error
505AH (20570) - Generate CF error
505DH (20573) - Generate BN error
5060H (20576) - Generate IE error
5063H (20579) - Generate EF error
5066H (20582) - Generate FL error
506BH (20587) - LOF Function
506DH (20589) - LOC Function
506FH (20591) - LFILES Function
5071H (20593) - DSKO$ Function
5073H (20595) - DSKI$ Function
50F1H (20721) - Start of device name table. Each entry starts with the text
name of the device ending with a FFH.
5112H (20754) - End of device name table
5113H (20755) - Start of device control block vector addresses. Each two
byte pointer corresponds to the name in the device name table
at 50F1H. This pointer points to the device's DCB which
contains the vectors for device open, close, output, and
input.
5122H (20770) - End of device control block vector addresses
5146H (20806) - Entry to TELCOM
515BH (20827) - TELCOM Ready re-entry point for TELCOM commands
5185H (20869) - Start of TELCOM instruction vector table. Each entry starts
with a 4 byte instruction name followed by a 2 byte routine
vector.
51A2H (20898) - End of TELCOM instruction vector table
51C0H (20928) - TELCOM STAT instruction routine
51C7H (20935) - Print current STAT (RS232 settings for TELCOM) and return to
TELCOM ready
51EDH (20973) - Set STAT (RS232 settings for TELCOM) and return to TELCOM
ready
522FH (21039) - TELCOM CALL instruction routine
524DH (21069) - TELCOM FIND instruction routine
52BBH (21179) - Disconect phone line and disable modem carrier
Exit:
A - New contents of port 0BAH
52D0H (21200) - Connect phone line and enable modem carrier
Exit:
A - New contents of port 0A8H
C flag - Set
52E4H (21220) - Lift telephone and wait for a carrier. The carrier must be
present for more than 2 seconds to qualify a carrier detect.
Exit:
C flag - Set if shift break pressed
Z flag - Set if carrier present
5310H (21264) - Pause for about 2 seconds
Exit:
BC & AF - Destroyed
532DH (21293) - Execute logon sequence pointed to by HL. This routine is
used to drive the Model 100 autodialer
Entry:
HL - Points to logon buffer
540AH (21514) - Dial the digit that is present in the A register. The ASCII
equivalent of the number is printed on the screen at the
current cursor position as this routine is dialing.
Entry:
A - Digit to dial
Exit:
All registers destroyed
5455H (21589) - TELCOM TERM instruction routine
550DH (21773) - Start of function key vector table for TERM commands in
TELCOM. Each 2 byte vector corresponds to each function key.
551BH (21787) - End of function key vector table for TERM
5523H (21795) - TELCOM PREV function routine
553EH (21822) - TELCOM FULL/HALF function routine
5550H (21840) - TELCOM ECHO function routine
559DH (21917) - TELCOM UP function routine
567EH (22142) - TELCOM DOWN function routine
571EH (22302) - TELCOM BYE function routine
5791H (22417) - Print the buffer pointed to by HL till a null or '"' is
found. Printing begins at the start of a line. If the
cursor is not at the begining of the line, a CR is sent.
Entry:
HL - Points to the start of the buffer to be printed
5797H (22423) - MENU Statement. Go to main menu
59ADH (22957) - Convert filename from right justified extention (name padded
with spaces to cause extention to be last two characters) to
normal filename with "." delimeter for extention.
Entry:
DE - Points to right justified extention filename (8
characters)
HL - Points to the start of the destination buffer for
the converted filename
Exit:
HL - Points to end of destination buffer where the
filename is stored. Filename is terminated with
a null.
DE - Points to end of source filename
A - Destroyed
5A12H (23058) - Print time, day, and date on the first line of the screen
(used on main menu). The screen is cleared prior to printing
Exit:
All registers destroyed
5A15H (23061) - Same 5A12H but screen is not cleared. Line is still printed
on top line of screen.
Exit:
All registers destroyed
5A58H (23128) - Print the buffer pointed to by HL. Printing terminates with
a null.
Entry:
HL - Points to the buffer to be printed
Exit:
HL - Points to the terminating null
A - 0
5A62H (23138) - Move the memory pointed to by DE to the memory pointed to by
HL for A number of bytes. HL and DE are incremented after
each byte moved
Entry:
DE - Points to start of source memory
HL - Points to start of destination memory
A - Number of bytes to move
Exit:
DE & HL - Incremented past last byte moved
A = 0
5A6DH (23149) - Compare the buffer pointed to by DE to the buffer pointed to
by HL for C bytes or until a null is found in the buffer
pointed to by DE.
Entry:
DE - Points to start of first buffer
HL - Points to start of second buffer
C - Number of bytes to compare
Exit:
A = 0 if the compare was ended with a null
C - Number of bytes remaining until compare would
have been successful.
HL & DE - If compare is successful, these registers are
incremented past the last byte compared. If the
compare ended with a null, DE points to the
null. If compare is unsuccessful, these
registers point to the offending characters
Z flag - Set if compare is successful
5A79H (23161) - Clear function key definition table
Exit:
All registers destroyed
5A7CH (23164) - Set new function key table. The table contains the function
key definitions up to 16 characters for each of the 8
function keys. The last byte of each entry should have the
high bit set to signify the end of the function key
definition. Empty entries should contain an 80H.
Entry:
HL - Points to function key table
Exit:
All registers destroyed
5A9EH (23198) - Display function keys on 8th line if enabled
Exit:
All registers destroyed
5AA9H (23209) - Search directory for filename
Entry:
DE - Points to buffer containing filename. The buffer
is terminated with a null.
Exit:
HL - Address of file directory entry
Z flag - Set if file was not found
All other registers destroyed
5AE3H (23267) - Get start address of file
Entry:
HL - Points to the file's directory entry
Exit:
HL - Points to start of file
DE - Points to directory entry + 2
5B68H (23400) - Entry to ADDReSS
5B6BH (23403) - Enter ADDReSS using the filename pointed to by DE.
Entry:
DE - Points to the filename to use with ADDReSS
terminated with a null
5B6FH (23407) - Entry to SCHEDuLe
5B72H (23410) - Enter SCHEDuLe using the filename pointed to by DE.
Entry:
DE - Points to the filename to use with SCHEDuLe
terminated with a null
5BF5H (23541) - FIND instruction for ADDRSS/SCHEDL
5BF7H (23543) - LFND instruction for ADDRSS/SCHEDL
5C3FH (23615) - Find the text in the buffer pointed to by HL in the text file
pointed to by DE. All lowercase letters are converted to
uppercase prior to compare.
Entry:
HL - Points to string to search for. The string must
end with a null
DE - Points to where search is to begin in the text
file
Exit:
BC - Points to the start of the found string in the
file.
DE - Points to the start of the record where the
string was found
C flag - Set if string found
5C6DH (23661) - Incremented DE past the next CRLF in the text file.
Entry:
DE - Points to a text file
Exit:
DE - Points to the byte following the next CRLF in the
text file
A - Destroyed
5C74H (23668) - Check the next byte(s) in the buffer pointed to by DE for a
CRLF.
Entry:
DE - Points to buffer where CRLF check is to be made
Exit:
DE - Incrmented once if no CRLF is found or twice if a
CRLF is found
Z flag - Set if CRLF found
5CEFH (23791) - Start of ADDRSS/SCHEDL instruction vector table. Each entry
starts with a 4 byte instruction name followed by the
instruction's 2 byte vector address
5D00H (23808) - End of ADDRSS/SCHEDL instruction vector table
5D64H (23908) - Wait for character from keyboard and convert it to uppercase
if nescessary. All function keys are converted into their
pre-programmed text.
Exit:
A - Uppercase character from keyboard
5D6AH (23914) - Home Cursor
Exit:
HL - Destroyed
5D70H (23920) - Print time on top line of screen until a key is pressed.
When a key is pressed, the cursor returns to its original
position prior to the call.
5DEEH (24046) - Entry to TEXT
5E51H (24145) - EDIT Statement
5F2FH (24367) - Wait for a space to be entered on keyboard
Exit:
A - Space (20H)
6018H (24600) - Start of TEXT control character vector table. Each 2 byte
vector entry corresponds to the ASCII value of the control
character (ex. The address at 6018H points to the routine for
^A which has an ASCII value of 1)
6055H (24661) - End of TEXT control character vector table
6056H (24662) - TEXT ESCape routine
607CH (24700) - TEXT control P routine
608AH (24714) - TEXT control I routine
60BEH (24766) - TEXT control M routine
60DEH (24798) - TEXT right arrow and control D routine
60E2H (24802) - TEXT down arrow and control X routine
610BH (24843) - TEXT control H routine
6151H (24913) - TEXT left arrow and control S routine
6155H (24917) - TEXT up arrow and control E routine
617AH (24954) - TEXT control F routine
618CH (24972) - TEXT control A routine
61C2H (25026) - TEXT control T routine
61D7H (25047) - TEXT control B routine
61FDH (25085) - TEXT control R routine
620BH (25099) - TEXT control Q routine
6210H (25104) - TEXT control W routine
621CH (25116) - TEXT control Z routine
6242H (25154) - TEXT control L routine
628FH (25231) - TEXT control C routine
6431H (25649) - TEXT control O routine
6445H (25669) - TEXT control U routine
6551H (25937) - TEXT control N routine
65C3H (26051) - Move the memory pointed to by HL to the memory pointed to by
DE until a null (0) is found.
Entry:
HL - Points to start of source buffer
DE - Points to start of destination buffer
Exit:
HL - Preserved
DE - Points to the byte following the null
A = 0
6691H (26257) - TEXT control Y routine
6713H (26387) - TEXT control G routine
6774H (26484) - TEXT control V routine
6B61H (27489) - Insert a character into a text file
Entry:
HL - Points to place to insert character
A - Character to insert
Exit:
HL - Incremented past inserted character
B - Character inserted
C flag - Set if out of memory
All other registers destroyed
6B6DH (27501) - Inset BC number of spaces in memory
Entry:
HL - Points to place where insertion is to begin.
BC - Number of spaces to insert
Exit:
HL - Preserved
C flag - Set if out of memory
All other registers destroyed
6B9FH (27551) - Delete BC number if characters in a text file.
Entry:
HL - Points to place where deletion is to begin.
BC - Number of characters to delete
Exit:
HL - Preserved
All other registers destroyed
6BDBH (27611) - Move the memory poined to by HL to the memory pointed to by
DE for BC bytes. HL and DE are incremented on each byte
transfered (same as LDIR).
Entry:
HL - Points to end of source memory
DE - Points to end of destination memory
BC - Number of bytes to move
Exit:
HL & DE - Incremented past last character moved
A - Destroyed
6BE6H (27622) - Move the memory pointed to by HL to the memory pointed to by
DE for BC bytes. HL and DE are decremented on each byte
transfered (same as LDDR).
Entry:
HL - Points to end of source memory
DE - Points to end of destination memory
BC - Number of bytes to move
Exit:
HL & DE - Decremented past last character moved
A - Destroyed
6BF1H (27633) - Start of ROM program catalog entries
6C48H (27720) - End of ROM programs catalog entries
6C49H (27721) - Entry to BASIC
6CD6H (27862) - Re-initialize system. User files are not lost.
6CE0H (27872) - Warm Start Reset Entry
---------------------------------------------------------------------------
- Model 100 RAM Memory Map -
F5F4H (62964) - Himem (2)
F5F9H (62969) - RST 5.5 RAM vector (3) Used for BCR interrupt
F5FCH (62972) - RST 6.5 RAM vector (3) Used for UART interrupt (Called)
F5FFH (62975) - RST 7.5 RAM vector (3) Used for Timer interrupt (Called)
F602H (62978) - RAM vector for TRAP interrupt (3) (1431H)
F62AH (63018) - Option ROM flag (0-no option ROM)
F62BH (63019) - Dial speed (1=10pps, 2=20pps)
F630H (63024) - Start of 8 byte table for each function key status (1=on,
0=off)
F639H (63033) - Cursor row (1-8)
F63AH (63034) - Cursor column (1-40)
F63BH (63035) - Number of active rows (1-8)
F63CH (63036) - Number of active columns on screen (1-40)
F63DH (63037) - Label line/8th line protect status (0=off)
F63EH (63038) - Scroll disable flag (0-allow scrolling)
F63FH (63039) - Cursor status (0-off, 1-on)
F640H (63040) - Cursor row (1-8)
F641H (63041) - Cursor Column (1-40)
F646H (63046) - ESCape mode flag for RST 20H (0-normal video, not zero-ESCape
mode)
F648H (63048) - Reverse video switch (0=off)
F64EH (63054) - X coordinate of last graphic point plotted
F64FH (63055) - Y coordinate of last graphic point plotted
F656H (63062) - Power off exit condition switch (0-return control back to
program on power up, 1-return to menu on power up)
F658H (63064) - Full/half duplex switch (0-half duplex)
F65AH (63066) - Auto linefeed on RS232 output switch (0-auto linefeed option
off, not zero-automatically send a linefeed after every
carriage return)
F65BH (63067) - Start of textual RS232 parameter setting buffer. This
buffer is normally used to store the STAT setting for TELCOM
(5)
F660H (63072) - Self modifying address called on CALL statement
F661H (63073) - Address last called (2)
F667H (63079) - Called on OUT statement
F66AH (63082) - Called on INP function
F672H (63090) - Error code of last error
F674H (63092) - Line printer head position
F675H (63093) - Output device for RST 20H (0=screen, 1=printer)
F678H (63096) - Start of string buffer for BASIC (2)
F67AH (63098) - Current executing line number, FFFFH if no program running.
(2)
F67CH (63100) - Start of BASIC program pointer (2)
F680H (63104) - End of statement marker ':' or null
F685H (63109) - Start of keyboard buffer used by the keyboard line input
routine at 4644H.
F788H (63368) - Current horizontal position of cursor (0-39)
F789H (63369) - Function key definition area (128)
F80AH (63498) - Function key definition area used by BASIC (128)
F88CH (63628) - End of used RAM for permanent storage (does not include
variables, paste buffer, etc.) (2)
F923H (63779) - Seconds (ones)
F924H (63780) - Seconds (tens)
F925H (63781) - Minutes (ones)
F926H (63782) - Minutes (tens)
F927H (63783) - Hours (ones)
F928H (63784) - Hours (tens)
F929H (63785) - Date (ones)
F92AH (63786) - Date (tens)
F92BH (63787) - Day code (0=Sunday, 1=Monday, etc.)
F92CH (63788) - Current month (1-12)
F92DH (63789) - Year (ones)
F92EH (63790) - Year (tens)
F933H (63795) - Seconds (ones)
F934H (63796) - Seconds (tens)
F935H (63797) - Minutes (ones)
F936H (63798) - Minutes (tens)
F937H (63799) - Hours (ones)
F938H (63800) - Hours (tens)
F939H (63801) - Date (ones)
F93AH (63802) - Date (tens)
F93BH (63803) - Day (0=Sunday, 1=Monday, etc.)
F93DH (63805) - Time for ON TIME interrupt (SSMMHH) (6)
F944H (63812) - On Com flag (0=off, 255=on)
F945H (63813) - Address of On Com routine (2)
F947H (63815) - On time flag (0=off, 255=on)
F948H (63816) - Address of on time routine (2)
F94AH (63818) - Function key vector table (24)
First byte - On/off status
Next 2 bytes - Vector address
F962H (63842) - Start of RAM directory
Byte 1 - Directory flags. A 255 specifies the end of the
directory.
Bit 7 - Set if valid entry
6 - Set for .DO file
5 - Set for .CO file
4 - Set for ROM file
3 - Set for invisible file
2-3 - Address of file
4-11 - Eight byte filename. Filename must have extention
right justified and filename left justified. Any
gaps should be filled with spaces (ex. "ADD.DO"
should be "ADD DO")
F99AH (63898) - Address of current BASIC program not saved (Suzuki) (2)
F9A5H (63909) - Start of Paste buffer (Hayashi) (2)
FAACH (64172) - ASCII character last output to printer
FAADH (64173) - Label line enable flag (0=not enabled)
FAAEH (64174) - Contents of port 0A8H
FAAFH (64175) - Start of IPL filename (8)
FABAH (64186) - Address where last BASIC list started (2)
FABEH (64190) - Storage for stack pointer on power up/down for continued
program execution after a power down (2)
FAC0H (64192) - Lowest RAM memory address used by system (8000H for a 32k
system) (2)
FAC9H (64201) - Offset of last RST 38H call
FAD0H (64208) - Length of last program loaded or saved on tape
FADAH (64218) - Start of RST 38H vector table (256)
FAE2H (64226) - LCD character output RAM vector for 20H routine. The address
at this location is called everytime a character is sent to
the LCD (note:This routine is called at 4317H). (2)
FAE4H (64228) - Printer output RAM vector. The 2 byte address at this
location is called everytime a character is output to the
printer via the routine at 1470H. (2)
FB00H (64256) - EOF function RAM vector. The 2 byte address at this
location is called evertime an EOF function is performed. (2)
FB0CH (64268) - TERM F6 RAM vector (2)
FB0EH (64270) - TERM F7 RAM vector (2)
FB14H (64276) - WIDTH statement RAM vector. (2)
FB1AH (64282) - CRT open routine RAM vector (2)
FB1EH (64286) - CRT output file routine RAM vector (2)
FB20H (64288) - WAND Open routine RAM vector (2)
FB22H (64290) - WAND Close routine RAM vector (2)
FB24H (64292) - WAND Get routine RAM vector (2)
FB26H (64294) - WAND Special I/O routine vector (2)
FB28H (64296) - LOF function routine RAM vector (2)
FB2AH (64298) - LOC function routine RAM vector (2)
FB2CH (64300) - LFILES statement routine RAM vector (2)
FB2EH (64302) - DSKI$ routine RAM vector (2)
FB30H (64304) - DSKO$ routine RAM vector (2)
FB64H (64356) - Create/Locate switch for variables used in the main
evaluation routine (Locate=0, Create>0).
FB65H (64357) - Type of last variable used (2-Integer, 3-String, 4-Single
Precision, 5-Double Precision)
FB67H (64359) - Start address for file buffer area (2)
FB94H (64404) - Line number of current data statement
FB96H (64406) - 0 if no FOR/NEXT loop in progress
FB99H (64409) - Address of last variable assigned via a LET instruction.
This address points to the variable description table as with
a VARPTR(variable) instruction.
FB9BH (64411) - Pointer to most recent or currently running line (2). This
address points to the actual text skipping the line number
and spaces.
FB9DH (64413) - Stack pointer value used by BASIC to reinitialize the stack.
This memory pointer is updated after each instruction by the
routine at 0804H. (2)
FB9FH (64415) - Line number of last error (2)
FBA1H (64417) - Most recent used or entered line number (2)
FBA3H (64419) - Pointer of where error occured (2)
FBA5H (64421) - Address of ON ERROR routine (2)
FBAAH (64426) - Line where last break, END, or STOP occured (2)
FBACH (64428) - Address where program stoped on last break, END, or STOP (2)
FBAEH (64430) - Pointer to the start of the DO files and end of the BA files.
(2)
FBB0H (64432) - Pointer to the start of CO files (2)
FBB2H (64434) - Pointer to the start of variable table (2)
FBB4H (64436) - Pointer to the start of array table (2)
FBB6H (64438) - Pointer to the start of the systems unused memory (2)
FBB8H (64440) - Address where DATA search will begin on next READ statement
(2)
FBBAH (64442) - 26 byte table for default variable types declared by the DEF
statement. Each entry corresponds to one of the letters
A-Z. The contents of each entry are 2 for an integer, 3 for
a string, 4 for a single precision number, and 8 for a double
precision number. (26)
FC18H (64536) - Start of FAC1 for single (4) and double (8) precision number
(8)
FC1AH (64538) - Start of FAC1 for integers (2)
FC69H (64617) - Start for FAC2 for single (4) and double (8) precision numbers
FC6BH (64619) - Start of FAC2 for integers (2)
FC82H (64642) - Maximum number of open files (Maxfiles) (1)
FC83H (64643) - Pointer to the 30 byte file number description pointer
table-2. Each entry of the table points to the actual file
description table (same as VARPTR(#x)).
FC8CH (64652) - Pointer to the file description table for the last file used
(2)
FC93H (64659) - Filename of current BASIC program (6)
FC9CH (64668) - Filename of last program loaded from tape (6)
FCC0H (64704) - Start of alternate LCD character buffer (320)
FDFFH (65023) - End of alternate LCD character buffer
FE00H (65024) - Start of LCD memory (320)
FF40H (65344) - End of LCD memory
FF42H (65346) - XON/XOFF enable flag. If this byte is 0, XON/XOFFs are not
significant for RS232 operations. If this byte is greater
than 0, XON/XOFFs are treated as normal.
FF43H (65347) - RS232 initialization status (0-deactivated, >0- activated)
FF44H (65348) - Sound flag (0=on) (1)
FF45H (65349) - Contents of port 0E8H (1)
FF46H (65350) - Start of 64 character RS232 buffer (64)
FF86H (65414) - Number of characters in the RS232 buffer (FF46H). When this
number reaches 40, a control S is automatically sent by the
system.
FF8AH (65418) - Status of control S (1-Control S has been pressed, 0-no
control S is active).
FF8BH (65419) - 8155 UART baud rate generator baud rate timer value (2)
FF8EH (65422) - High or low cassette level trigger flag for 6FDBH (1)
FF97H (65431) - 8 bits for storing space, del, tab, esc, paste, label, print,
and enter key recognition.
FF98H (65432) - 8 bits for storing function key recognition
FFA2H (65442) - 8 bits for storing shift, ctrl, grph, code, num, and caps
lock.
FFAAH (65450) - Number of characters in keyboard buffer.
FFABH (65451) - Start of keyboard typeahead buffer (32)
FFECH (65516) - Start of 5 byte table describing the bit pattern currently
under the cursor (5)
--------------
| OTHER INFO |
--------------
- File formats -
.BA Files:
2 bytes - Address of next line
2 bytes - Line number
Up to 255 characters ending with a null
EOF is 3 consecutive nulls
.DO Files:
Text ended with a EOF character 1AH
.CO Files:
2 bytes - Address to load to
2 bytes - Number of bytes to load (-start 6)
2 bytes - Transfer address
- File Descriptor Block (Address Given by VARPTR(#file)) Format -
Byte:
0 - File status (0-not open, 1-open for input, 2 open for
output or append)
2 & 3 - Address of file directory entry
4 - File device (248-RAM, 249-MoDeM, 250-LinePrinTer,
251-WAND, 252-COM, 253-CASsette, 254-CRT, 255-LCD)
6 - Offset from buffer start (see bytes 9) for start of next
record
7 & 8 - Relative position of next 256 byte block from
beginning of file
9 - Start of 256 byte buffer for data transfer
- Floating Point Accumulator Format -
---------------------------------------------------------------
FAC1 | FAC2 | DP | SP | Integer | SP
Address | Address | Format | Format | Format | Register
---------------------------------------------------------------
FC18H | FC69H | S & E | S & E | - | C
FC19H | FC6AH | BCD M | BCD M | - | B
FC1AH | FC6BH | BCD # | BCD # | LSB | E
FC1BH | FC6CH | BCD # | BCD L | MSB | D
FC1CH | FC6DH | BCD # | - | - | -
FC1DH | FC6EH | BCD # | - | - | -
FC1EH | FC6FH | BCD # | - | - | -
FC1FH | FC70H | BCD L | - | - | -
---------------------------------------------------------------
LSB = Least significant byte of intger
MSB = Most significant byte of integer. Bit 7 contains the sign
of the integer
BCD L = Least significant BCD byte
BCD H = Most significant BCD byte
BCD # = Middle BCD bytes. Each digit of the number is represented
by one of the values in the two nibbles in each byte
S & E = Sign and exponent of each number. Bit 7 contains the sign
of the floating point number. Bit 6 must be set. Bits 0-5
determine where the decimal point is to be inserted. For
example, if this byte contained a 65, the sign would be
positive and the decimal point would be placed between the
first and second digits (#.###....)
- Option ROM Important Addresses -
40H = 54H
41H = 43H - Required for ROM to be detected on BOOT
42H - 47H - Name of file associated with ROM program
Code at 7E24H-7E43H executed on BOOT to handle option ROM.
Code at 0365H loaded at F605H on BOOT to detect option ROM.
- Model 100 Hardware Port Map -
A0H - Modem control port
Output:
Bit:
0 - Modem telephone relay (1-Modem connected to phone
line)
1 - Modem enable (1-Modem chip enabled)
B0H - 8155 PIO Command/Status Register
Output:
Bit:
0 - Direction of Port A (0-input, 1-output)
1 - Direction of Port B (0-input, 1-output)
2 & 3 - Port C definition (00 - All input, 11 - All output,
01 - Alt 3, 10 - Alt 4 (see Intel technical sheets
for more information))
4 - Enable Port A interrupt (1 - enable)
5 - Enable Port B interrupt (1 - enable)
6 & 7 - Timer mode (00 - No effect on counter, 01 - Stop
counter immediately, 10 - Stop counter after TC, 11
- Start counter)
Input:
Bit:
0 - Port A interrupt request
1 - Port A buffer full/empty (input/output)
2 - Port A interrupt enabled
3 - Port B interrupt request
4 - Port B buffer full/empty (input/output)
5 - Port B interrupt enabled
6 - Timer interrupt (status of TC pin)
7 - Not used
B1H - 8155 PIO Port A
Output:
8 bit data port for printer output, keyboard column strobe,
and LCD
In addition, the first 5 bits of this port is used to
control the 1990 real time clock chip. The configuration of
these five bits are:
Bit:
0 - C0
1 - C1
2 - C2
3 - Clock
4 - Serial data into clock chip
B2H - 8155 PIO Port B.
Output:
Bit:
0 - Column 9 select line for keyboard. This line is
also used for the CS-28 line of the LCD.
1 - CS 29 line of LCD
2 - Beep toggle (1-Data from bit 5, 0-Data from 8155
timer)
3 - Serial toggle (1-Modem, 0-RS232)
4 - Software on/off switch for computer
5 - Data to beeper if bit 2 set. Set if bit 2 low.
6 - DTR (not) line for RS232
7 - RTS (not) line for RS232
B3H - 8155 PIO Port C
Input:
Bits:
0 - Serial data input from clock chip
1 - Busy (not) signal from printer
2 - Busy signal from printer
3 - Data from BCR
4 - CTS (not) line from RS232
5 - DSR (not) line from RS232
6-7 - Not avaiable on 8155
B4H - 8155 Timer register. LSB of timer counter
B5H - 8155 Timer register. MSB of timer counter
B8H - Same as port B0H
B9H - Same as port B1H
BAH - Same as port B2H
BBH - Same as port B3H
BCH - Same as port B4H
BDH - Same as port B5H
C0H - Bidirectional data bus for UART (6402) (C0H-CFH same)
D0H - Status control register for UART, modem, and phone (6402)
(D0H-DFH same)
Output:
Bits:
0 - Stop Bits (1-1.5, 0-2)
1 - Parity (1-even, 0-odd)
2 - Parity Enable (1-no parity, 0-parity enabled)
3 - Data length (00-5 bits, 10-6 bits, 01-7 bits, 11-8
bits)
4 - Data length (see bit 3)
Input:
Bits:
0 - Data on telephone line (used to detect carrier)
1 - Overrun error from UART
2 - Framing error from UART
3 - Parity error from UART
4 - Transmit buffer empty from UART
5 - Ring line on modem connector
6 - Not used
7 - Low Power signal from power supply (LPS not)
E0H - Keyboard input and misc. device select (E0H-EFH same)
Output:
Bits:
0 - ROM select (0-Standard ROM, 1-Option ROM)
1 - STROBE (not) signal to printer
2 - STROBE for Clock chip (1990)
3 - Remote plug control signal
Input:
8 bit data row from keyboard strobe
F0H - LCD display data bus (F0H-FFH same)
- Model 100 Keyboard Matrix -
------------------------------------------------
7 | L K I ? * -> Ent f8 Brk
Row 6 | M J U > & <- Prt f7
In 5 | N H Y < ^ Up Lbl f6 Cap
4 | B G T " % Dwn Pst f5 Num
0E0H- 3 | V F R : $ + Esc f4 Cde
0EFH 2 | C D E ] # - Tab f3 Gph
(224- 1 | X S W P @ ) Del f2 Ctl
239) 0 | Z A Q O ! ( Spc f1 Sft
------------------------------------------------
bit 0 1 2 3 4 5 6 7 0
[----------- 0B1H or 0B9H -----------] [0B2H]
[----------- 177 or 185 ------------] [178 ]
Column Strobe
Note: This table is incorrectly documented in Radio Shack's
"Model 100 Technical Reference Manual" (26-3810)
- Math Routine Summary -
-------------------------------------------------------------
Function Single Precision Double Precision Integer
-------------------------------------------------------------
+ 37F4H 2B78H 3704H
- 37FDH 2B69H 36F8H
* 3803H 2CFFH 3725H
/ 380EH 2DC7H 0F0DH
^ 3D7FH 3D8EH 3DF7H
Compare 3498H 34FAH 34C2H
-------------------------------------------------------------
- RIM and SIM Bit Maps -
SIM Bit 0: RST 5.5 mask (set mask) RIM Bit 0: RST 5.5 mask
1: RST 6.5 mask (set mask) 1: RST 6.5 mask
2: RST 7.5 mask (set mask) 2: RST 7.5 mask
3: Mask set enable 3: Int. enable
4: Reset RST 7.5 flip/flop 4: RST 5.5 pending
5: Not used 5: RST 6.5 pending
6: SOD change enable 6: RST 7.5 pending
7: SOD pin output 7: SOD pin input
Note: SOD pin is used for cassette I/O on Model 100
- Model 100 Special Control Characters -
--------------------------------------------------------------
Control Code | Print | Routine |
Sequence | Address | Address | Description
--------------------------------------------------------------
Beep (7) 4229H 7662H Beep
Tab (9) - 4480H Tab cursor
LF (10) 4225H 4494H Move down one line
Home (11) 422DH 44A8H Home cursor
CLS (12) 4231H 4548H Clear screen
CR (13) - 44AAH Move cursor to beginning of
next line
ESC A - 4469H Move cursor up one line
ESC B - 446EH Move cursor down one line
ESC C - 4453H Move cursor to the right
ESC D - 445CH Move cursor to the left
ESC E - 4548H Clear screen
ESC H - 44A8H Home cursor
ESC J - 454EH
ESC K 425DH 4537H Erase from the cursor to the
end of the screen
ESC L 4258H 44EAH Insert blank line at current
line
ESC M 4253H 44C4H Delete current line
ESC P 4249H 44AFH Turn cursor on
ESC Q 424EH 44BAH Turn cursor off
ESC T 4235H 4439H Protect line 8
ESC U 423AH 4437H Unprotect line 8
ESC V 423FH 443FH Stop automatic scrolling
ESC W 4244H 4440H Resume automatic scrolling
ESC X 4262H 444AH
ESC Y 427CH 43AFH Set cursor position.
Coordinate for cursor (row
and column) follow ESC Y
sequence
ESC j - 4548H Clear screen
ESC l - 4535H Erase current line
ESC p - 4431H Start inverse video mode
ESC q - 4432H Cancel inverse video mode
References & History
This documented was created with well over 200 hours of
sweating over a Model 100 ROM disassembly. I started my first
research on the Model 100 ROM about 2 hours after purchasing it
(Note: I had one of the first 100's off the production line. I
believe I purchased my 100 in June of 1983). After I figured
out how to use TELCOM, I downloaded a BASIC Z-80 disassembler
that friend of mine (Mike Livorsi) wrote from my Model 3. After
making a few changes to the disassembler, I was able to get it
to work on the Model 100. Then, I tested my Model 100's
parallel printer port by printing a disassembly of the Model
100's ROM on my old LP8 (note:the disassembly requires a 3 inch
note book to fit in). A day later, I came back to my Model 100
and found what every machine language addict loves; a complete
dissasembly of the ROM.
At this point, I had a big problem; where to start. At the
time, the only documentation for the 100 was the Instruction
Manual. "Hacker reliefs" like schematics, memory maps,
debuggers, etc. could only be found in the dreams of the infant
portable hackers.
What did I end up doing? Well, I decided to write a little
BASIC program to search for specific bytes in ROM. This program
was used initially for finding the text string "Ok" in ROM.
Once I found out where the message was in ROM, I then searched
for any ML instructions that referenced the message. Then, on a
warm July night in St. Louis, I found what I was looking for; a
16 bit register load that referenced the message "Ok" followed
by a CALL instruction. This was the key I needed to open the
door to the Model 100's ROM. With my experience from the Model
1/3/Coco ROMs, I knew that the load/CALL sequence I found was
used to print a text string on the screen. From this little
information, I was able to interrogate the subroutine called and
find out how the display operated. In addition, since "Ok" is
only printed at BASIC ready, I was able to trace out the
keyboard input routines and eventually, the entire BASIC
interpreter.
About 200 or so hours later, I documented most of the Model
100's ROM. At this time, I knew enough about my Model 100 to
write just about any machine langauge program that I needed.
When I started writing ML programs for the 100, I found one
problem with my ROM documentation; it was too hard to find a
particular ROM address. What I needed was an organized
collection of all my notes, "chicken scratches", etc.
From this came the memory map you hold in your hand right
now. In this memory map, I basically included the information
that I use the most when ML programming. I did not include a
lot of information on how the ROM handles certain task, but I
did include information that can be used by external stand alone
ML programs.
In creating this document, I had a little help along the
way with figuring out a few things. Below is a list of sources
I used to help me determine or verify what certain things in the
Model 100 did:
Model 100 User Manual, Radio Shack
Model 100 Service Manual (26-3801), Radio Shack
Microsystem Components Handbook, Volume 1, Intel (1984)
MOS Microprocessors and Peripherals, Advanced Micro Devices
(1983)
Microsoft BASIC Decoded & other Mysteries for the TRS-80, by
James Lee Farvour, IJG (December 1982)
"Inside the 100", by David P. Sumner, 80 Micro (December 1983)