Main

Level 2 ROM Addresses

Important ROM Addresses

The following information is from a text file compiled 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 character. 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 14440 Ports End of model I & III keyboard address ports.



Top

The TRS-80 Home Page created and maintained by Pete Cervasio
cervasio@airmail.net

Copyright © 1998 Pete Cervasio