Enhanced BASIC, useful routines by Lee Davison
[Back]
Introduction.
There are many subroutines within BASIC that can be useful if you wish to use your own assembly routines with it. Here are some of them with a brief description of their function. For full details see the source code.The routines.
LAB_IGBYBASIC increment and get byte routine. gets the next byte from the BASIC command stream. If the byte is a numeric character then the carry flag will be set, if the byte is a termination byte, either null or a statement separator, then the zero flag will be set. Spaces in the command stream will automatically be ignored.LAB_GBYTBASIC get byte routine. Gets the current byte from the BASIC command stream but does not increment the execute pointer. Otherwise the same as above.LAB_COLDPerforms a cold start. BASIC is reset and all BASIC memory is cleared.LAB_WARMPerforms a warm start. Execution is stopped and BASIC returns to immediate mode.LAB_XERRWith d0 set, do error #d0, then warm start.LAB_INLNThe equivalent can be achieved by calling the routine in the name column.
Name d0 Error Name d0 Error LAB_NFER $00 NEXT without FOR LAB_SNER $04 syntax LAB_RGER $08 RETURN without GOSUB LAB_ODER $0C out of data LAB_FCER $10 function call LAB_OFER $14 overflow LAB_OMER $18 out of memory LAB_USER $1C undefined statement LAB_ABER $20 array bounds LAB_DDER $24 double dimension array LAB_DZER $28 divide by 0 LAB_IDER $2C illegal direct LAB_TMER $30 type mismatch LAB_SLER $34 string too long LAB_SCER $38 string too complex LAB_CCER $3C can't continue LAB_UFER $40 undefined function LAB_LDER $44 LOOP without DO LAB_UVER $48 undefined variable LAB_UDER $4C undimensioned array LAB_WDER $50 wrong dimensions LAB_ADER $54 address You may add your own error messages by extending the error message pointer and error message tables.
Print "? " and get BASIC input. Returns a0 as a pointer to the start of the input line. The input is null terminated.LAB_SSLNSearch Basic for a line, the line number required is held in the temporary integer, from start of program memory. Returns carry set and a pointer to the line in a0 if found, if not it returns carry and a pointer to the next numbered line in a0.LAB_SHLNSearch Basic for temporary integer line number from a0. Same as above but starts the search from a0.LAB_SNBSScan for next BASIC statement (: or [EOL]). Returns d1 as index to : or [EOL] from (a5).LAB_SNBLScan for next BASIC line. Same as above but only returns on [EOL].LAB_REMPerform REM, skip (rest of) line.LAB_GFPNGet fixed-point number into temporary integer.LAB_CRLFPrint [CR]/[LF] to output device.LAB_PRNAPrint character in d0 to output device.LAB_GVARGet variable address. Returns a pointer to the variable in Cvaral and a0 and sets the data type flag, $80=string, $40=integer and $00=float.LAB_EVNMEvaluates an expression and checks the result is numeric, if not it does a type mismatch. The result of the expression is returned in FAC1.LAB_CTNMCheck if source is numeric, else do type mismatch.LAB_CTSTCheck if source is string, else do type mismatch.LAB_CKTMType match check, set carry for string, clear carry for numeric.LAB_EVEXEvaluate expression.LAB_GVALGet numeric value from line. Returns the result in FAC1.LAB_SCCAScan for the byte in d0 as the next byte. If so return here, else do syntax error then warm start.LAB_CASCCheck byte is alpha ("A" to "Z" or "a" to "z"), return carry clear if so.LAB_EVINEvaluate integer expression. Return integer in d0 and Itemp.LAB_EVPIEvaluate +ve integer expression.LAB_EVIREvaluate integer expression, no sign check.LAB_CKRNCheck that the interpreter is not in immediate mode. If not then return, if so do illegal direct error.LAB_GARBPerform garbage collection routine.LAB_EVSTEvaluate string.LAB_SGBYScan and get byte parameter, return the byte in d0 and Itemp.LAB_GTBYGet byte parameter and ensure numeric type, else do type mismatch error. Return the byte in d0 and Itemp.LAB_EVBYEvaluate byte expression, return the byte in d0 and Itemp.LAB_GADBGet two parameters as in POKE or WAIT. Return the first parameter in a0, second in d0.LAB_SCGBScan for "," and get byte, else do Syntax error then warm start. Return the byte in d0 and Itemp.LAB_UFACUnpack the four bytes starting (a0) into FAC1 as a floating point number.LAB_PFACPack the floating point number in FAC1 into the current variable (Lvarpl).LAB_AYFCConvert d0 to signed longword in FAC1.LAB_RTSTPut string address and length on descriptor stack & update stack pointers. Pointer is in a0, length is in d1. This is how you return a string to BASIC.