# Model 100 System Map Part 2 (0DAB-290F)

Jump to: navigation, search

## Origin

This is a derived work of the "Model 100 System Map", Copyright (C) 1985, Robert D. Covington, Systems Information Management Consultants.

```0DABH -  Main Evaluation Routine.  This routine handles all
evaluations of math operations and functions.
Entry:
HL - Points to text to evaluate plus 1.  This routine
assumes that an RST 10H was executed prior to
entering the routine.  To adjust for this, either
execute a RST 10H or INC HL prior to entering the
routine.
Exit:
HL - Incremented past evaluated expression
FAC1 - Usually contains the result of the evaluated
expression.

0F0DH -  Integer Divide (FAC1=DE/HL)

0F1CH -  Evaluate the function in the buffer pointed to by HL.
Entry:
HL - Points to the buffer containing the compressed
function and parameters.
Exit:
FAC1 - Usually contains the result of the function.

0F47H -  ERR Function

0F56H -  ERL Function

0F7EH -  VARPTR Function

0F86H -  VARPTR(#buffer) Function

0F92H -  VARPTR(variable) Function

0FDAH -  Variable evaluation routine

0FE8H -  Get the character pointed to by HL, convert it to upper case
if needed, and place it in the A register.
Entry:
HL - Points to buffer
Exit:
A - Next character in buffer

0FE9H -  Convert the character in the A register to uppercase if
necessary.
Entry:
A - Character
Exit:
A - Character converted to UC

1054H -  NOT Function

1069H -  RST 28H routine (see 28H).

108CH -  OR Function

1097H -  AND Function

10A2H -  XOR Function

10ADH -  EQV Function

10B5H -  IMP Function

10C8H -  LPOS Function

10CEH -  POS Function

10D1H -  Load the integer in the A register into FAC1.
Entry:
A - Integer from 0-255 to put in FAC1
Exit:
A - Destroyed

10E6H -  Check for a running program.  If a program is not running,
generate an Illegal Direct (ID) error.
Exit:
A - Destroyed
Z flag - Reset if program is running

10EFH -  Generate ID error

1100H -  INP Function

110CH -  OUT Statement

1112H -  Evaluate the expression in the buffer pointed to by HL
leaving the result in DE.  If the result is greater than
32767, an overflow error is generated.
Entry:
HL - Points to buffer of expression to evaluate.  The
buffer must end with a null or colon.
Exit:
DE - Result of expression
HL - Incremented past expression in buffer
A - Destroyed
Z flag - Set if the evaluated expression is an 8 bit
number.  If so, the result of the operation will
be just in the E register.

1113H -  Same as 1112H except that the evalutation starts at HL-1.

112DH -  Evaluate the expression in the buffer pointed to by HL
leaving the result in the A register.  If the result is
greater than 255, a function error is generated.  If the
result is greater than 32767, an overflow error is generated.
Entry:
HL - Points to buffer to be evaluated.  The buffer
must end with a null or colon.
Exit:
HL - Incremented past expression in buffer
A & E - Evaluated expression
D - Destroyed

112EH -  Same as 112DH except that evaluation starts at HL-1.

113BH -  LLIST Statement

1140H -  LIST Statement

11A2H -  Send the buffer pointed to by HL to the screen.  Text must
end with a null.
Entry:
HL - Points to print buffer
Exit:
HL - Points to ending null
A = 0

1284H -  PEEK Function

128BH -  POKE Function

1297H -  Evaluate the expression in the buffer pointed to by HL
leaving the result in DE.  This routine differs from 1112H in
that it will properly evaluate numbers up to 65535.  If the
result of the operation is greater than 65535, an overflow
error will occur.
Entry:
HL - Points to buffer to evaluate.  The buffer must
end with a null or colon.
Exit:
DE - Evaluated expression
HL - Incremented past expression in buffer.

12CBH -  Wait for a key from the keyboard.  All function keys are
converted into their pre-programmed text.
Exit:
A - Character entered
C flag - Set if special character

13A5H -  Toggle function key label line if enabled.
Exit:
A - Destroyed

13DBH -  Check keyboard queue for pending characters
Exit:
A - Destroyed
Z flag - Set if no characters pending

1419H -  POWER Statement

1431H -  Normal TRAP (low power) interrupt routine

143FH -  Turn off computer

1459H -  POWER CONT Statement

1461H -  POWER ON Statement

1470H -  Output character to printer without tab expansions
Entry:
A - Character to print

148AH -  Start tape and load tape header.  If an error or Shift Break
is pressed, generate an I/O error.

1494H -  Generate I/O error

14A8H -  Turn cassette motor on

14AAH -  Turn cassette motor off

14B0H -  Read a byte from tape and update checksum
Entry:
C - Current checksum
Exit:
A - Character read off tape
C - Updated checksum

14C1H -  Write a byte to tape and update checksum
Entry:
A - Character to write to tape
C - Current checksum
Exit:
C - Updated checksum

14D2H -  LCD Device control block

14D8H -  LCD and LPT file open routine

14E5H -  LCD file output routine

14EDH -  Pop all registers off stack in the order AF, BC, DE, and HL.
This routine is only useful if jumped to.  If a call is done,
stack integrity is lost.

14F2H -  CRT device control block

14FCH -  RAM device control block

1506H -  RAM file open routine

158DH -  RAM file close routine

15ACH -  RAM file output routine

15C4H -  RAM file input routine

161BH -  Special RAM file I/O

167FH -  CAS device control block

1689H -  CAS file open routine

16ADH -  CAS file close routine

16C7H -  CAS file output routine

16D2H -  CAS file input routine

1754H -  LPT device control block

175AH -  LPT file output routine

1762H -  COM device control block

176CH -  MDM file open routine

176DH -  COM file open routine

179EH -  COM file close routine

17A8H -  COM and MDM file output routine

17B0H -  COM and MDM file input routine

17CAH -  Special COM and MDM I/O routine

17D1H -  MDM device control block

17D8H -  MDM file close routine

17E6H -  Set RS232 parameters to string pointed to by HL.  String must
be in the same format as used by TELCOM.
Entry:
HL - Points to parameter string
D - 2 if Modem is used
C flag - Set if RS232, reset of Modem

1877H -  WAND device control block

1889H -  EOF Function

1904H -  TIME\$ Function

190FH -  Read time from system clock and store it in the buffer
pointed to by HL
Entry:
HL - Points to start of time buffer.  The buffer will
be filled with the time in the format hh:mm:ss.
Exit:
HL - Incremented to the end of the buffer.
All other registers destroyed

1924H -  DATE\$ function

192FH -  Read date and store it in the buffer pointed to by HL.
Entry:
HL - Points to start of date buffer.  The buffer will
be filled with the date in the format mm/dd/yy.
Exit:
HL - Incremented to the end of the buffer
All other registers destroyed

1955H -  DAY\$ function

1962H -  Read day and store it in the buffer pointed to by HL.
Entry:
HL - Points to start of day buffer.  The buffer will
be filled with the current 3 letter day
abbreviation.
Exit:
HL - Incremented to the end of the buffer
All other registers destroyed.

19A0H -  Update the in memory clock values starting at F923H with the
time in the internal hardware clock

19ABH -  TIME\$ Statement

19B3H -  Update the internal clock chip with the values in the in
memory time table starting at F923H

19BDH -  DATE\$ Statement

19F1H -  DAY\$ Statement

1A78H -  IPL Statement

1A96H -  Erase current IPL program (table)
Exit:
A - Destroyed

1A9EH -  COM and MDM Statements

1AB2H -  KEY() Statement

1AC3H -  KEY STOP/ON/OFF Statements

1B0FH -  ON TIME\$ Statement

1B32H -  RST 7.5 interrupt routine (see 3CH).

1BB8H -  KEY Statement

1BBDH -  KEY LIST Statement

1BE0H -  Send B number of characters from the buffer pointed to by HL
to the screen.  Any control characters (0-31 and 127) are
converted to spaces for printing.
Entry:
HL - Points to buffer to print
B - Number of characters to print
Exit:
A - Destroyed
HL - Incremented past last byte printed.

1C57H -  PSET Statement

1C66H -  PRESET Statement

1C6DH -  LINE (graphic) Statement

1D90H -  CSRLIN Function

1D9BH -  MAX Function

1DA7H -  MAXRAM Function

1DB2H -  MAXFILES Functions

1DB9H -  HIMEM Function

1DC3H -  WIDTH Statement

1DC5H -  SOUND Statement

1DE5H -  SOUND OFF Statement

1DE6H -  SOUNF ON Statement

1DECH -  MOTOR Statement

1DF1H -  MOTOR ON Statement

1DF5H -  MOTOR OFF Statement

1DFAH -  CALL Statement

1E22H -  SCREEN Statement

1E5EH -  LCOPY Statement.  This routine will print the textual
contents of the screen on the printer..
Exit:
HL, DE, and AF are destroyed.

1F3AH -  FILES Statement

1F42H -  Display Catalog
Exit:
All registers are destroyed

1F91H -  KILL Statement

1FBFH -  KILASC: Kill a text file
Entry:
(result of SRCNAM call, normally)
HL - Address of directory entry
DE - Start address of file

1FD9H -  Kill a CO file
Entry:
(result of SRCNAM call, normally)
HL - Address of directory entry
DE - Start address of file

2017H -  Kill a BASIC binary program file
Entry:
(result of SRCNAM call, normally)
HL - Address of directory entry
DE - Start address of file

2037H -  NAME Statement

20AFH -  Find File

This routine finds a file, if it exists, in the RAM file directory.

Entry:
\$FC93..\$FC9A holds 8 character filename to lookup
Exit:
Not found:
Zero flag set
Found:
Zero flag clear,
A  - File type flag for found entry
DE - Address where file with matching name begins
HL - Address of matching name in directory table
(BC is destroyed)

20AFH  (21H) LXI H,F957H	; start 11 back from directory table at F962

(multiple entry point code)
FIRST_TIME:
20B2H (3EH) MVI A,E1H		; load A with E1 (225)
or
CLEAN_AGAIN:
20B3H	(E1) POP H		; discard saved H

20B4H  (CDH) CALL 20D5H	; find next valid file table entry
20B7H  (C8H) RZ		; return if no more valid entries
20B8H  (E5H) PUSH H		; preserve the entry pointer for next iteration
20B9H  (23H) INX H
20BAH  (23H) INX H		; position HL pointing just before filename
20BBH  (11H) LXI D,FC92H	; DE point just before filename argument at \$FC92..\$FC9A
20BEH  (06H) MVI B,08H		; B <- 8 limits iteration in name compare to 8 characters

TEST_NEXT_NAME_CHAR:
20C0H  (13H) INX D		; D updated to reference next character of filename argument
20C1H  (23H) INX H		; H updated to reference next character of valid directory filename
20C2H  (1AH) LDAX D		; fetch next character of arg filename
20C3H  (BEH) CMP M		; compare arg filename character to dir entry
20C4H  (C2H) JNZ 20B3H		; quite comparison, next entry if any mismatch
20C7H  (05H) DCR B		; otherwise countdown the 8 char name length limit
20C8H  (C2H) JNZ 20C0H		; test next char if more to test.

; we found the entry; return file type (A) , @ of file (DE), @ of dir entry (HL)
20CBH  (E1H) POP H		; restore pointer to current entry
20CCH  (7EH) MOV A,M		; A <- file type flags
20CDH  (23H) INX H		; DE <- address of file itself (as opposed to entry)
20CEH  (5EH) MOV E,M
20CFH  (23H) INX H
20D0H  (56H) MOV D,M
20D1H  (2BH) DCX H		; HL <- pointer to start of matching file table entry
20D2H  (2BH) DCX H
20D3H  (A7H) ANA A		; this ensures zero flag is clear if the entry IS found
20D4H  (C9H) RET

NEXT_FILE_ENTRY:

; add 11 to HL pointer (size of a directory entry)
20D5H  (C5H) PUSH B	; preserve B
20D6H  (01H) LXI B,000BH
20D9H  (09H) DAD B
20DAH  (C1H) POP B

; load file type flags into A
20DBH  (7EH) MOV A,M

; return with zero flag set if type \$FF (end-of-directory)
20DCH  (FEH) CPI FFH
20DEH  (C8H) RZ

; skip this entry if bit 7 of type is not set (null/blank entry or killed file)
20DFH  (A7H) ANA A
20E0H  (F2H) JP 20D5H

; return, with zero flag not set, and HL pointing to a vaild file entry
20E3H  (C9H) RET

20E4  -  Find unused file entry
Exit:
HL - points to flags type byte of an unused file entry

20E4H  (3AH) LDA F651H
20E7H  (A7H) ANA A
20E8H  (21H) LXI H,F9AFH
20EBH  (C0H) RNZ
20ECH  (21H) LXI H,F9AFH
20EFH  (01H) LXI B,000BH
20F2H  (09H) DAD B
20F3H  (7EH) MOV A,M
20F4H  (FEH) CPI FFH
20F6H  (CAH) JZ 5066H       ; Generate FL error
20F9H  (87H) ADD A
20FAH  (DAH) JC 20F2H
20FDH  (C9H) RET

20FEH -  NEW Statement

21FAH -  Count the number of characters in the buffer pointed to by
HL. Buffer ends with a null
Entry:
HL - Points to the buffer to count
Exit:
E - Number of characters in the buffer pointed to by
HL
A - Destroyed

220FH -  Create or Open a text file
Entry:
(FC93H) - Filename (8 bytes).  DO not required
Exit:
HL - Points to start of text file
DE - Points to directory entry
C flag - Set if file already exist, reset if it is a new
file.

2280H -  CSAVE Statement

22B9H -  Save the buffer pointed to by HL to tape.  After execution of
this routine, return resumes at BASIC ready.
Entry:
HL - Start of buffer to save
DE - Number of characters to save
Exit:
All registers destroyed

22CCH -  SAVEM Statement

22DDH -  CSAVEM Statement

2377H -  CLOAD Statement

2413H -  Load a record from the cassette and put it in the buffer
pointed to by HL.
Entry:
HL - Points to start of receiving buffer
DE - Number of bytes to load.
Exit:
All registers destroyed

2491H -  LOADM and RUNM Statement

24A7H -  CLOADM Statement

2542H -  Move memory pointed to by HL to the memory pointed to by DE
for B number of bytes.  HL and DE are incremented on each
cycle of the move.
Entry:
HL - Points to the start of the source memory
DE - Points to the start of the destination memory
B - Number of bytes to move
Exit:
HL & DE - Incremented past last byte moved
A - Destroyed

260BH -  CAS open for output for BASIC files

260EH -  CAS open for output for TEXT files

2611H -  CAS open for output for Command files

2650H -  CAS open for input for BASIC files

2653H -  CAS open for input for text files

2656H -  CAS open for input for Command files

273AH -  STR\$ Function

27B1H -  Print buffer pointed to by HL until a null (00H) or '"' is
found.  Print begins at current cursor position.
Entry:
HL - Points to buffer to be printed

290FH -  Move the memory pointed to by BC to the memory pointed to by
DE  L times.  BC and DE are incremented on each cycle of the
move.
Entry:
BC - Points to the start of the source memory
DE - Points to the start of the destination memory
L - Number of bytes to move
Exit:
HL & DE - Incremented past last byte moved
A - Destroyed
```