ROM Entry Points to L2 Routines
Page Index
Entry points to various Level II BASIC ROM routines which may be accessed by user programs.
Keyboard Routines:
| Label | Address | Routine Description |
|---|---|---|
| KBD1 | 002BH | INKEY$ CALL $KBCHAR SCAN KEYBOARD FOR A CHARACTER |
| KBD2 | 0358H | SAVE DE REGS, THEN CALL 2B |
| $KBLINE | 0040H | GET A LINE FROM THE KEYBOARD |
| KBWT1 | 0049H | KBD INPUT WITH WAIT $KBWAIT WAIT FOR A KEYBOARD CHARACTER |
| KBWT2 | 0384H | KBD INPUT WITH WAIT, DE SAVED |
| LINP1 | 05D9H | LINE INPUT ROUTINE Enter With:
|
| Label | Address | Routine Description |
| LINP2 | 0361H | LINE INPUT ROUTINE 2 |
| INPUT | 1BB3H | SAME AS LINP2, BUT WITH "?" |
| LBUFF | 40A7H | STORAGE BUFFER ADDRESS FOR LINP2 |
Display Routines:
| Label | Address | Routine Description |
|---|---|---|
| DSP1 | 0033H | Display byte at cursor pos $VDCHAR DISPLAY A CHARACTER ON THE SCREEN |
| CLS | 01C9H | Clear screen |
| BLINK | 022CH | Blink "*" in right upper corner |
| DSP2 | 033AH | SAVES DE AND CALLS DSP1 |
| DSTR | 28A7H | DISPLAY STRING POINTED TO IN HL |
| SETRES | 0150H | ENTRY TO SET/RESET ROUTINES |
| CURSOR | 4020H | CURSOR POSITION |
Printer Routines:
| Label | Address | Routine Description |
|---|---|---|
| $PRCHAR | 003BH | PRINT A CHARACTER ON THE PRINTER |
Miscellaneous routines & addresses
| Label | Address | Routine Description |
|---|---|---|
| BASIC | 1A19H | RETURN POINT FOR BASIC |
| DOS | 402DH | RETURN POINT FOR DOS |
| DOSERR | 4030H | RETURN TO DOS WITH ERROR |
| CHLDE | 1C90H | COMPARE HL WITH DE |
| FETCH | 1D78H | FETCH NEXT NON-BLANK CHARACTER FOLLOWING THAT IN HL |
| DECBIN | 1E5AH | DECIMAL # => BINARY |
| WLDR | 0284H | WRITES LEADER ON CASSETTE TAPE |
| WBYTE | 0264H | WRITES ONE BYTE TO TAPE |
| COFF | 01F8H | TURNS OFF CASSETTE MOTOR |
| RLDR | 0293H | READS SYNC BYTE FROM CASSETTE |
| RBYTE | 0235H | READS ONE BYTE FROM TAPE |
Floating-point arithmetic routines
TYPE FLAG IS 40AFH; VALUES AS FOLLOWS:
2 - INTEGER
3 - STRING
4 - SINGLE PRECISION FLOATING POINT
8 - DOUBLE PRECISION FLOATING POINT
3 - STRING
4 - SINGLE PRECISION FLOATING POINT
8 - DOUBLE PRECISION FLOATING POINT
Floating Point Accumulators (FPACC) as Follows:
| Type | Address Range |
| INTEGER | 4121H - 4122H |
| STRING | 4121H - 4122H HOLDS DESCRIPTOR ADDRESS |
| SINGLE PRECISION | 4121H - 4124H (4124 IS EXPONENT) |
| DOUBLE PRECISION | 411DH - 4124H (4124 IS EXPONENT) |
Operand Locations as Follows:
| Label | Address | Routine Description |
|---|---|---|
| INTEGER | REGISTER PAIRS DE & HL | |
| SINGLE PRECISION | REGISTER PAIRS DE & HL | |
| DOUBLE PRECISION | 4127H - 412EH | |
| TSTYP | 25D9H | TEST TYPE FLAG AT 40AF |
| DSTOR | 09B4H | STORE SNG-PRC VAL IN DE:BC IN FPACC |
| SLOAD | 09C2H | LOAD SNG-PRC INTO DE:BC FROM ADDRESS IN HL |
| SCOPY | 09B1H | COPY SNG-PRC FROM HL ADDR TO FPACC |
| SGET | 09BFH | LOAD FPACC INTO DE:BC |
| SSTAK | 09A4H | PUSH FPACC INTO STACK (DE BC) |
| ISTOR | 0A9AH | STORE INT IN FPACC & SET TYPE |
| ASTOR | 0E6CH | STORE NUMERIC STRING IN FPACC |
| NEDIT | 0FBDH | NON-FORMATTED NUMERIC EDIT |
| FEDIT | 0FBEH | FORMATTED NUMERIC EDIT |
| CSVEC | 2865H | CREATE STRING VECTOR |
| FPACC | 4121H | FLOATING POINT ACCUMULATOR |
| DFPACC | 411DH | DOUBLE-PRECISION FPACC |
| DOPER | 4127H | DOUBLE-PRECISION OPERAND REGS |
Arithmetic function routines
| Label | Address | Routine Description |
|---|---|---|
| IADD | 0BD2H | INTEGER ADD DE+HL => FPACC |
| ISUB | 0BC7H | INTEGER SUBTRACT DE-HL => FPACC |
| IMUL | 0BF2H | INTEGER MULTIPLY DE*HL => FPACC |
| IDIV | 2490H | INTEGER DIVIDE DE/HL => FPACC |
| SADD | 0716H | SNGPRC ADD OPER+FPACC => FPACC |
| SSUB | 0713H | SNG SUBTRACT OPER-FPACC => FPACC |
| SMUL | 0847H | SNG MULTIPLY OPER*FPACC |
| SDIV | 08A2H | SNG DIVIDE OPER/FPACC |
| DADD | 0C77H | DBL PREC OPER+FPACC |
| DSUB | 0C70H | DBL PREC SUBTRACT OPER-FPACC |
| DMUL | 0DA1H | DBL PREC OPER*FPACC |
| DDIV | 0DE5H | DBL PREC OPER/FPACC |
| SGN | 098AH | FPACC = SGN(FPACC) |
| INT | 0B37H | FPACC = INT(FPACC) |
| ABS | 0977H | FPACC = ABS(FPACC) |
| SQRT | 13E7H | FPACC = SQRT(FPACC) |
| RNDM | 14C9H | FPACC = RND(FPACC) |
| LOG | 0809H | FPACC = LOG(FPACC) |
| EXP | 1439H | FPACC = EXP(FPACC) |
| COSN | 1541H | FPACC = COS(FPACC) |
| SINE | 1547H | FPACC = SIN(FPACC) |
| TAN | 15A8H | FPACC = TAN(FPACC) |
| ATAN | 15BDH | FPACC = ATAN(FPACC) |
| CINT | 0A7FH | FPACC = CINT(FPACC) |
| CSNG | 0AB1H | FPACC = CSNG(FPACC) |
| CDBL | 0ADBH | FPACC = CDBL(FPACC) |
| FIX | 0B26H | FPACC = FIX(FPACC) |
Other random locations
| DEC ADDR | HEX ADDR | FUNCTION |
|---|---|---|
| 14305 | 37E1H | 0, FOR BETTER DISK SAVES |
| 16405 | 4015H | 1 = KEYBOARD ON 2 = KEYBOARD OFF |
| 16413 | 401DH | 1 = DISPLAY OFF 7 = DISPLAY ON |
| 16414 | 401EH | 141 = DISPLAY TO PRINTER 88 = RESTORE DISPLAY |
| 16415 | 401FH | 5, 4 = ??? |
| 16449 | 4041H | CLOCK REGISTER, SECONDS |
| 16450 | 4042H | CLOCK REGISTER, MINUTES |
| 16451 | 4043H | CLOCK REGISTER, HOURS |
| 16452 | 4044H | CLOCK REGISTER, YEAR |
| 16453 | 4045H | CLOCK REGISTER, DAY |
| 16454 | 4046H | CLOCK REGISTER, MONTH |
| 16553 | 404FH | 255 = DATA READ AFTER CASS INP |
| 14312 | 37E8H | > 127 = LINEPRINTER NOT READY |
| 15339 | 3BFFH | CHECK IF KEY HELD DOWN |
| 16457 | 4049H | TOP-OF-MEMORY (DOS MAIN SYSTEM) DISK BASIC HOLDS VALUE-1 IN 40B1. |
| 40A0H- 40A1H | POINTER TO THE STRING STORAGE AREA (I.E., IF YOU "CLEAR 50" THESE ADDRESSES WILL HOLD THE VALUE IN 40B1-40B2 MINUS 50). ALWAYS STORED LSB/MSB. |