ROM Entry Points to L2 Routines

Entry points to various Level II BASIC ROM routines which may be accessed by user programs.

Keyboard Routines:

LabelAddressRoutine Description
KBD1002BHINKEY$ CALL
$KBCHAR SCAN KEYBOARD FOR A CHARACTER
KBD20358HSAVE DE REGS, THEN CALL 2B
$KBLINE0040HGET A LINE FROM THE KEYBOARD
KBWT10049HKBD INPUT WITH WAIT
$KBWAIT WAIT FOR A KEYBOARD CHARACTER
KBWT20384HKBD INPUT WITH WAIT, DE SAVED
LINP105D9HLINE INPUT ROUTINE
Enter With:
  • HL => STORAGE ADDRESS
  • B => MAX LENGTH TO INPUT
LabelAddressRoutine Description
LINP20361HLINE INPUT ROUTINE 2
INPUT1BB3HSAME AS LINP2, BUT WITH "?"
LBUFF40A7HSTORAGE BUFFER ADDRESS FOR LINP2

Display Routines:

LabelAddressRoutine Description
DSP10033HDisplay byte at cursor pos
$VDCHAR DISPLAY A CHARACTER ON THE SCREEN
CLS01C9HClear screen
BLINK022CHBlink "*" in right upper corner
DSP2033AHSAVES DE AND CALLS DSP1
DSTR28A7HDISPLAY STRING POINTED TO IN HL
SETRES0150HENTRY TO SET/RESET ROUTINES
CURSOR4020HCURSOR POSITION

Printer Routines:

LabelAddressRoutine Description
$PRCHAR003BHPRINT A CHARACTER ON THE PRINTER

Miscellaneous routines & addresses

LabelAddressRoutine Description
BASIC1A19HRETURN POINT FOR BASIC
DOS402DHRETURN POINT FOR DOS
DOSERR4030HRETURN TO DOS WITH ERROR
CHLDE1C90HCOMPARE HL WITH DE
FETCH1D78HFETCH NEXT NON-BLANK CHARACTER FOLLOWING THAT IN HL
DECBIN1E5AHDECIMAL # => BINARY
WLDR0284HWRITES LEADER ON CASSETTE TAPE
WBYTE0264HWRITES ONE BYTE TO TAPE
COFF01F8HTURNS OFF CASSETTE MOTOR
RLDR0293HREADS SYNC BYTE FROM CASSETTE
RBYTE0235HREADS 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

Floating Point Accumulators (FPACC) as Follows:

TypeAddress Range
INTEGER4121H - 4122H
STRING4121H - 4122H HOLDS DESCRIPTOR ADDRESS
SINGLE PRECISION4121H - 4124H (4124 IS EXPONENT)
DOUBLE PRECISION411DH - 4124H (4124 IS EXPONENT)

Operand Locations as Follows:

LabelAddressRoutine Description
INTEGERREGISTER PAIRS
DE & HL
SINGLE PRECISIONREGISTER PAIRS
DE & HL
DOUBLE PRECISION4127H - 412EH
TSTYP25D9HTEST TYPE FLAG AT 40AF
DSTOR09B4HSTORE SNG-PRC VAL IN DE:BC IN FPACC
SLOAD09C2HLOAD SNG-PRC INTO DE:BC FROM ADDRESS IN HL
SCOPY09B1HCOPY SNG-PRC FROM HL ADDR TO FPACC
SGET09BFHLOAD FPACC INTO DE:BC
SSTAK09A4HPUSH FPACC INTO STACK (DE BC)
ISTOR0A9AHSTORE INT IN FPACC & SET TYPE
ASTOR0E6CHSTORE NUMERIC STRING IN FPACC
NEDIT0FBDHNON-FORMATTED NUMERIC EDIT
FEDIT0FBEHFORMATTED NUMERIC EDIT
CSVEC2865HCREATE STRING VECTOR
FPACC4121HFLOATING POINT ACCUMULATOR
DFPACC411DHDOUBLE-PRECISION FPACC
DOPER4127HDOUBLE-PRECISION OPERAND REGS

Arithmetic function routines

LabelAddressRoutine Description
IADD0BD2HINTEGER ADD DE+HL => FPACC
ISUB0BC7HINTEGER SUBTRACT DE-HL => FPACC
IMUL0BF2HINTEGER MULTIPLY DE*HL => FPACC
IDIV2490HINTEGER DIVIDE DE/HL => FPACC
SADD0716HSNGPRC ADD OPER+FPACC => FPACC
SSUB0713HSNG SUBTRACT OPER-FPACC => FPACC
SMUL0847HSNG MULTIPLY OPER*FPACC
SDIV08A2HSNG DIVIDE OPER/FPACC
DADD0C77HDBL PREC OPER+FPACC
DSUB0C70HDBL PREC SUBTRACT OPER-FPACC
DMUL0DA1HDBL PREC OPER*FPACC
DDIV0DE5HDBL PREC OPER/FPACC
SGN098AHFPACC = SGN(FPACC)
INT0B37HFPACC = INT(FPACC)
ABS0977HFPACC = ABS(FPACC)
SQRT13E7HFPACC = SQRT(FPACC)
RNDM14C9HFPACC = RND(FPACC)
LOG0809HFPACC = LOG(FPACC)
EXP1439HFPACC = EXP(FPACC)
COSN1541HFPACC = COS(FPACC)
SINE1547HFPACC = SIN(FPACC)
TAN15A8HFPACC = TAN(FPACC)
ATAN15BDHFPACC = ATAN(FPACC)
CINT0A7FHFPACC = CINT(FPACC)
CSNG0AB1HFPACC = CSNG(FPACC)
CDBL0ADBHFPACC = CDBL(FPACC)
FIX0B26HFPACC = FIX(FPACC)

Other random locations

DEC ADDRHEX ADDRFUNCTION
1430537E1H0, FOR BETTER DISK SAVES
164054015H1 = KEYBOARD ON
2 = KEYBOARD OFF
16413401DH1 = DISPLAY OFF
7 = DISPLAY ON
16414401EH141 = DISPLAY TO PRINTER
88 = RESTORE DISPLAY
16415401FH5, 4 = ???
164494041HCLOCK REGISTER, SECONDS
164504042HCLOCK REGISTER, MINUTES
164514043HCLOCK REGISTER, HOURS
164524044HCLOCK REGISTER, YEAR
164534045HCLOCK REGISTER, DAY
164544046HCLOCK REGISTER, MONTH
16553404FH255 = DATA READ AFTER CASS INP
1431237E8H> 127 = LINEPRINTER NOT READY
153393BFFHCHECK IF KEY HELD DOWN
164574049HTOP-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.