                            Important ROM Addresses

              Last update September 23, 1986 by Randall K. Wright

    The following Z80 registers and register pairs apply: A,F,B,C,D,E,H,L,AF,
BC,DE,HL,IX,IY. Any of these proceeded by a "'" refers to the alternate set.

Miscellaneous:
     SA - Software accumulator.         SA1 - Alternate software accumulator.
     RA - Register accumulator (E,D,C,B).

Hex   Dec  Label     Type     Description
0000     0 DOSCLD    Jp       In cassette systems, reset computer; in disk
                              systems, cold boot of DOS. Could also be done via
                              RST 00H.
0008     8 SYNTAX    RST      Checks for syntax. HL points to byte to be
                              checked and proper byte follows RST 08H
                              instruction.
000B    11 WHERE     Call     Vector used to resolve relocation address of
                              calling routine. On exit, HL points to address
                              following Call instruction.
0013    19 GET       Call     This routine gets a byte from a logical device or
                              a file that is open. Entry: DE points at FCB.
                              Exit: A = byte.
0018    24 CP16      Rst      Compare DE and HL as 16 bit unsigned intergers.
001B    27 PUT       Call     Outputs a byte to a logical device or FCB. DE =
                              FCB and A = byte. Don't confuse with CTL at 0023.
0023    35 CTL       Call     Outputs a control byte to a logical device or
                              FCB. DE = FCB and A = control byte.
0028    40           Rst      Pressing Break key RST's here and then jumps to
                              location 400CH. Also normal DOS function vector.
002B    43 KBDSCN    Call     Scan keyboard and return with accumulator
                              containing result. DE is used.
0033    51 VDCHAR    Call     Displays a character at current cursor location.
003B    59 PRCHAR    Call     Waits until printer is ready then prints
                              charatcter. A = ASCII character. If BREAK is
                              pressed, a return to caller is made.
0040    64 KBLINE    Call     Input a line from the keyboard. B = max length of
                              line. HL points at buffer. Buffer should be the
                              length of B plus 1. To terminate, hit BREAK or
                              ENTER. On exit, HL points at buffer and B =
                              number of characters entered. Carry will be set
                              if BREAK was pressed.
0049    73 KBWAIT    Call     Scans the keyboard until a key is pressed. If
                              BREAK is pressed, it is returned like other keys.
0050    80 RSRCV     Call     Recieve a character from RS-232. No entry
                              conditions. On exit, memory location 16872
                              contains character recieved. DE is altered. This
                              routine honors wait status.
0055    85 RSTX      Call     Transmit character to RS-232. On entry,
                              Accumulator or memory location 16880 contains
                              character. On exit, 16880 = 0 if no character
                              sent. Wait status honored.
005A    90 RSINIT    Call     Initialize RS-232 interface. On entry, memory
                              location 16888 = send/recieve baud rate code,
                              location 16890 = wait/don't wait switch, location
                              16889 = RS-232 characteristics switch. On exit,
                              DE is altered. For more detail, consult Model 3
                              reference manual.
0060    96 DELAY     Call     Load BC with how many times to loop, then call.
0069   105 INITIO    Call     Initialize all I/O drivers to their ROM routines.
                              No entry conditions. On exit, all registers
                              changed
006C   108 ROUTE     Call     On entry, location 4222H = two byte source device
                              ASCII abbreviation and location 4220H = two byte
                              destination ASCII abbreviation. On exit, DE is
                              altered.
0072   114                    An alternative for entering Basic. See also
                              1A19H.
00B1   177                    Type in SYSTEM (even from DISK BASIC) and reply
                              to the "*?" prompt with /177. The computer will
                              then ask you for memory size. Upon return, you'll
                              still be in DISK BASIC, but your program will be
                              gone. Also, it doesn't get along with any high
                              memory routines present.
00FA   250                    Call this routine from BASIC and your computer
                              will brag about it having Level II or Model III
                              BASIC.
0132   306 POINT              Basic's POINT routine.
0135   309 SET                Basic's SET routine.
0138   312 RESET              Basic's RESET routine.
0150   336 GRAPH     Jp       This is the routine that is Basic's SET, RESET,
                              and POINT functions. Here's how to use it. Load
                              HL with return address and push. Load register A
                              with one of the following: 00H = POINT, 01H =
                              RESET, and 80H = SET. Push AF onto stack. Load A
                              with X coordinate and push onto stack. Load A
                              with Y coordianate and JP GRAPH.
018C   396           Call     Checks for syntax of ")" via RST 08H.
01C9   457 CLS       Call     Clear screen.
01D3   467 RANDOM    Call     Randomize.
01F8   504 CSOFF     Call     This routine turns off the cassette drive.
0212   530 DEFCAS    Call     A register contains a 0 or 1 which is the
                              cassette number. This routine defines cassette
                              number and turns on cassette. Model I only.
022C   556 ???       ???      ???
0235   565 CSIN      Call     Inputs data one byte at a time from cassette
                              after you use CSHIN. A = the data byte.
0264   612 CSOUT     Call     Outputs data one byte at a time to cassette after
                              you use CSHWR. A = the output byte.
0287   647 CSHWR     Call     Turns on the cassette and writes the header.
0296   662 CSHIN     Call     Finds the cassette header info at the beggining
                              of cassette file.
02B2   690 SYSTEM             Basic's SYSTEM routine.
0314   788 ???       ???      ???
032A   810 OUTCHR    Call     Ouput character in register A; OUTSEL (409CH)
                              selects device. See OUTSEL for device values.
033A   826 DISPA     Call     Displays character in A on screen at next print
                              position. Uses AF.
0358   856                    Calls keyboard scan routine.
035B   859           Call     Same as 002BH.
0361   865 KIBUFF    Call     Reads keyboard into buffer until a carriage
                              return is entered. 40A7H contains the address of
                              the buffer.
03C2   962                    Line printer driver for Model I.
03E3   995                    Keyboard driver for Model I. Model III = 3024H.
0458  1112                    Video driver for Model I.
0473  1139                    Video driver for Model III.
0506  1286 CURCON             Start of cursor control table. Model I. 80
                              Microcomputing, Sept. 1980, p. 187.
0540  1344                    End of cursor control table.
058D  1421                    Line printer driver for Model I.
05D9  1497 KLINE     Call     Same as KBLINE. See 0040.
06CC  1740                    An alternative for entering Basic. See also
                              1A19H.
06D2  1746                    Start of Model 1 interrupts relocated to RAM on
                              boot up.
06E6  1766                    End of Model 1 interrupts relocated to RAM on
                              boot up.
06E7  1767                    Start of Model 1 keyboard DCB.
06EE  1774                    End of Model 1 keyboard DCB.
06EF  1775                    Start of Model 1 Video DCB.
06F6  1782                    End of Model 1 Video DCB.
06F7  1783                    Start of Model 1 Printer DCB.
06FE  1790                    End of Model 1 Printer DCB.
0713  1811 SUBSP     Call     Subtract SA from RA; result in SA.
0716  1814 ADDSP     Call     Add RA and SA; result in SA.
0778  1912 RSETSA    Call     If SA contains a 00H, RND generates a number
                              between 0 and 1. Use this call to place a 00H in
                              SA.
0809  2057 LOG       Call     Basic's LOG function.
0847  2119 MLTSP     Call     Multiply RA and SA; result in SA.
08A2  2210 DIVSP     Call     Divide RA by SA; result in SA.
0977  2423 ABS       Call     Basic's ABS function.
0982  2434 MVVAR     Call     Move number of bytes shown by typeflag from area
                              pointed to by DE to area pointed to by HL.
098A  2442 SGN       Call     Basic's SGN function.
09A4  2468 LDSTSA    Call     Load SA into stack.
09B1  2481 LDSAHL    Call     Load single precision number pointed to by HL
                              into SA.
09B4  2484 LDSARA    Call     Load RA into SA.
09BF  2495 LDRASA    Call     Load SA into RA.
09C2  2498 LDRAHL    Call     Load single precision number pointed to by HL
                              into RA.
09CB  2507 LDHLSA    Call     Load SA into area pointed to by HL.
09D2  2514 LDDEHL    Call     Load single precision number pointed to by HL
                              into area pointed to by DE; needs FLAGSP.
09D3  2515 LDHLDE    Call     Load single precision number pointed to by DE
                              into area pointed to by HL; needs FLAGSP.
09D6  2518 MOVEA     Call     Move data; DE = source, HL = destination, A = how
                              much to move.
09D7  2519 MOVEB     Call     Same as above, except B contains the count.
09F7  2551 MVSAHL    Call     Move number pointed to by HL into SA; needs
                              FLAGDP.
09FC  2556 MVALT     Call     Move SA into SA1.
0A0C  2572 CPSP      Call     Compare RA and SA1.
0A39  2617 CPINT     Call     Compare DE and HL.
0A78  2680 CPDP      Call     Compare SA and SA1.
0A7F  2687 GETPAR    Call     Load parameter in USR(x) into HL; this must be
                              first instruction of USR call. Also used for CINT
                              function.
0A9A  2714 BSCPAR    Jp       Return to Basic program with parameter.
0A9D  2717 FLAGIN    Call     Set typeflag of SA to interger.
0AB1  2737 CSASP     Call     Convert SA to single precision. Also Basic's CSNG
                              routine.
0ACC  2764 CHGIS     Call     Value in workspace/accumulator is changed from
                              integer to single precision.
0ADB  2779 CSADP     Call     Convert SA to double precision. Also Basic's CDBL
                              routine.
0AEC  2796 FLAGDP    Call     Set typeflag for SA to double precision.
0AEF  2799 FLAGSP    Call     Set typeflag for SA to single presision.
0B26  2854 FIX       Call     Basic's FIX function.
0B37  2871 INT       Call     Basic's INT function.
0BC7  3015 SUBINT    Call     Subtract HL from DE; result in HL and SA if no
                              overflow (flag = 2); result in SA only if
                              overflow (flag = 4).
0BD2  3026 ADDINT    Call     Add DE and HL; result in HL and in SA if no
                              overflow.
0BF2  3058 MLTINT    Call     Multiply DE and HL; result in HL and SA if no
                              overflow (flag=2), result in SA only if overflow
                              (flag=4)
0C70  3184 SUBDP     Call     Subtract SA1 from SA; result in SA.
0C77  3191 ADDDP     Call     Add SA and SA1; result in SA.
0DA1  3489 MLTDP     Call     Multiply SA and SA1; result in SA.
0DE5  3557 DIVDP     Call     Divided SA by SA1; result in SA.
0FAF  4015                    Display integer number in HL in ASCII decimal.
                              The ASCII number will also be in memory at 4131H
                              - 4135H.
0FBD  4029 CSAASC    Call     Convert SA (set typeflag) to ASCII. Result (in
                              dec) is placed in buffer starting at 4130H and
                              terminated by a 00H byte and HL = 4130H.
13E7  5095 SQR       Call     Basic's SQR function.
13F7  5111 POWER     Call     Raise RA to the power SA; result in SA.
1439  5177 EXP       Call     Basic's EXP function.
14C9  5321 RND       Call     Basic's RND function.
14CC  5324                    ???
1541  5441 COS       Call     Basic's COSine function.
1547  5447 SIN       Call     Basic's SIN function.
15A8  5544 TAN       Call     Basic's TAN function.
15BD  5565 ATN       Call     Basic's ATN function
1608  5640                    Beginning of jump table for Basic's functions.
                              For Basic's jump statement table, see 1822H.
164F  5711                    End of jump table for Basic's functions.
1650  5712                    Beginning of table of names of Basic's reserved
                              words.
181F  6175                    End of table of names of Basic's reserved words.
1822  6178                    Beginning of jump table for Basic's statements.
                              For Basic's jump funtion table, see 1608H.
1899  6297                    End of jump table for Basic's statements.
18C9  6345                    Start of BASIC error messages. Ie: NF, OM, etc.
18F6  6390                    End of BASIC error messages.
196C  6508                    Check for enough RAM for stack operation.
1997  6551                    SN ERROR routine.
19A2  6562                    ERROR routine.
1A19  6681 BASIC     Jp       Return to Basic and display Basic READY prompt
                              (if you have difficulty with 1A19, try 06CCH or
                              0072H instead)
1AF8  6904                    Writes line pointers beginning from start of
                              Basic program.
1AFC  6908                    Writes line pointers beginning with line pointed
                              to by DE.
1B2C  6956 FNDLIN             To use: Load DE with line number, call and this
                              location. Upon exit, BC will contain location. 80
                              Micro, Feb. 1981, p. 148.
1B49  6985 NEW                Basic's NEW routine.
1B4D  6989                    Reset Basic pointers? 80 Microcomputing, Nov 81,
                              p. 386.
1B5D  6705                    Basic initialization routines (RUN).
1BC0  7104 TOKEN              Basic's tokenizing routine. Point register pair
                              HL to the start of the string to be tokenized
                              terminated by a 0 byte and call 1BC0H. Upon exit,
                              HL will point to one byte below the tokenized
                              string which will be terminated by a 0 byte.
1CA1  7329 FOR                Basic's FOR routine.
1D1E  7454 RUNSTM    Jp       HL points at ":" or 00H terminating a Basic
                              statement or line; execution will proceed from
                              next statement.
1D91  7569 RESTORE            Basic's RESTORE routine.
1D9B  7579                    Scan for shift @ and BREAK.
1DA9  7593 STOP               Basic's STOP routine.
1DAE  7598 END                Basic's END routine.
1DE4  7652 CONT               Basic's CONT routine.
1DF7  7671 TRON               Basic's TRON routine.
1DF8  7672 TROFF              Basic's TROFF routine.
1E00  7680 DEFSTR             Basic's DEFSTR routine.
1E03  7683 DEFINT             Basic's DEFINT routine.
1E06  7686 DEFSNG             Basic's DEFSNG routine.
1E09  7689 DEFDBL             Basic's DEFDBL routine.
1E4A  7754 FCERR     Call     Prints "FC Error".
1E5A  7770 VAL       Call     Convert a string representing a decimal number
                              and terminated by a 00H byte to a binary number.
                              HL points at first character, DE contains result
                              after call.
1E7A  7802 CLEAR              Basic's CLEAR routine.
1EA3  7843 RUN                Basic's RUN routine.
1EB1  7857 GOSUB              Basic's GOSUB routine.
1EC2  7874 GOTO               Basic's GOTO routine.
1EDE  7902 RETURN             Basic's RETURN routine.
1F05  7941 DATA               Basic's DATA routine.
1F07  7943 REM/ELSE           Basic's REM and/or ELSE routine.
1F21  7969 EVALU     Call     Evaluate expression. Useful for doing complicated
                              math functions in machine language. HL must point
                              to a portion of memory that is in tokenized BASIC
                              and terminated by a 00H byte or a ":" byte. Also
                              known as Basic's LET routine.
1F6C  8044 ON                 Basic's ON routine.
1FAF  8111 RESUME             Basic's RESUME routine.
1FF4  8180 ERROR              Basic's ERROR routine.
2008  8200 AUTO               Basic's AUTO routine.
2039  8249 IF                 Basic's IF routine.
2067  8295 LPRINT             Basic's LPRINT routine.
206F  8303 PRINT              Basic's PRINT routine.
219A  8602 INPUT              Basic's INPUT routine.
21E3  8675 MVSTR     Call     Move string into space; HL points at first byte
                              of buffer and BC points at variable name.
21EF  8687 READ               Basic's READ routine.
22B6  8886 NEXT               Basic's NEXT routine.
2337  9015                    Gets a general (string, integer, single, or
                              double precision) parameter in the accumulator
                              and sets the type flag (40AFH) accordingly.
2490  9360 DIVINT    Call     Divide DE by HL; result in SA in single precision
                              format.
2540  9536 LDVAWS    Call     Loads value of variable into workspace/
                              accumulator. On entry, HL points to first
                              character of variable name. On exit, HL points to
                              first character following variable name.
25A1  9633 CPSTR     Call     Compare two strings. HL and BC point at strings,
                              D and E contain lengths.
2608  9736 DIM                Basic's DIM statement.
260D  9741 VARPTR    Call     Get variable address in DE, HL points at variable
                              name.
27D4 10196 FRE                Basic's FRE routine.
27F5 10229 POS                Basic's POS routine.
2836 10294 STR$               Basic's STR$ routine.
28A7 10407 OUTSTR    Call     Output string terminated by a 00H byte or 22H (")
                              byte.; HL points at first character, OUTSEL
                              (409CH) selects device. See OUTSEL for device
                              numbers.
2A03 10755 LEN                Basic's LEN routine.
2A0F 10767 ASC                Basic's ASC routine.
2A1F 10783 CHR$               Basic's CHR$ routine.
2A61 10849 LEFT$              Basic's LEFT$ routine.
2A91 10897 RIGHT$             Basic's RIGHT$ routine.
2A9A 10906 MID$               Basic's MID$ routine.
2AEF 10991 INP                Basic's INP routine.
2A2F 10799 STRING$            Basic's STRING$ routine.
2AC5 10949 VAL                Basic's VAL routine.
2AFB 11003 OUT                Basic's OUT routine.
2B02 11010                    Gets a two byte integer in DE.
2B17 11031                    Evaluate expression? 80 Microcomputing, Nov 81,
                              p. 386
2B1C 11036                    Gets a one byte integer in A.
2B29 11049 LLIST              Basic's LLIST routine.
2B2E 11054 LIST               Basic's LIST routine.
2B75 11125 OSTR      Call     Output string to current device. On entry, HL
                              points to first character in string which ends in
                              a 00 byte.
2B7E 11134                    Write line of Basic in buffer, change tokens to
                              words.
2BC6 11206 DELETE             Basic's DELETE routine.
2BF5 11253 CSAVE              Basic's CSAVE routine.
2C1F 11295 CLOAD              Basic's CLOAD routine.
2C77 11383                    Initialize for Basic. 80 Micro, Sep. 1980, p. 72.
2CAA 11434 PEEK               Basic's PEEK routine.
2CB1 11441 POKE               Basic's POKE routine.
2E60 11872 EDIT               Basic's EDIT routine.
2E66 11878 EDITOR             Load HL with line number to edit and use this
                              routine. 80 Micro, Feb. 1981, p. 148.
3024 12324                    Video driver for Model III.
3033 12339 GETDAT    Call     Get date in ASCII format. Mod III TRSDOS, LDOS, &
                              MULTIDOS.
3036 12342 GETTIM    Call     Get time in ASCII format. Mod III TRSDOS, LDOS, &
                              MULTIDOS.
3042 12354 ???       ???      ???
37E0 14304           Port     Model I interrupt address port. Bit 7 set for
                              clock, bit 6 set for disk.
37E1 14305           Port     Model I disk drive select.
37E4 14308           Port     Model I cassette 1 or 2 select (0 or 1).
37E8 14312           Port     Lineprinter address port.
37EC 14316           Port     Model I disk command/status.
37ED 14317           Port     Model I disk track select.
37EE 14318           Port     Model I disk sector select.
37EF 14319           Port     Model I disk data.
3800 14336           Ports    Beginning of model I & III keyboard address
                              ports.
3840 1440            Ports    End of model I & III keyboard address ports.

