Useful routines. By Lee Davison. |
The routines.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.
LAB_IGBY
LAB_GBYTBASIC 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_COLDBASIC 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_WARMPerforms a cold start. BASIC is reset and all BASIC memory is cleared.
LAB_XERRPerforms a warm start. Execution is stopped and BASIC returns to immediate mode.
LAB_INLNWith d0 set, do error #d0, then warm start.
The 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.
LAB_SSLNPrint "? " and get BASIC input. Returns a0 as a pointer to the start of the input line. The input is null terminated.
LAB_SHLNSearch 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_SNBSSearch Basic for temporary integer line number from a0. Same as above but starts the search from a0.
LAB_SNBLScan for next BASIC statement (: or [EOL]). Returns d1 as index to : or [EOL] from (a5).
LAB_REMScan for next BASIC line. Same as above but only returns on [EOL].
LAB_GFPNPerform REM, skip (rest of) line.
LAB_CRLFGet fixed-point number into temporary integer.
LAB_PRNAPrint [CR]/[LF] to output device.
LAB_GVARPrint character in d0 to output device.
LAB_EVNMGet 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_CTNMEvaluates 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_CTSTCheck if source is numeric, else do type mismatch.
LAB_CKTMCheck if source is string, else do type mismatch.
LAB_EVEXType match check, set carry for string, clear carry for numeric.
LAB_GVALEvaluate expression.
LAB_SCCAGet numeric value from line. Returns the result in FAC1.
LAB_CASCScan for the byte in d0 as the next byte. If so return here, else do syntax error then warm start.
LAB_EVINCheck byte is alpha ("A" to "Z" or "a" to "z"), return carry clear if so.
LAB_EVPIEvaluate integer expression. Return integer in d0 and Itemp.
LAB_EVIREvaluate +ve integer expression.
LAB_CKRNEvaluate integer expression, no sign check.
LAB_GARBCheck that the interpreter is not in immediate mode. If not then return, if so do illegal direct error.
LAB_EVSTPerform garbage collection routine.
LAB_SGBYEvaluate string.
LAB_GTBYScan and get byte parameter, return the byte in d0 and Itemp.
LAB_EVBYGet byte parameter and ensure numeric type, else do type mismatch error. Return the byte in d0 and Itemp.
LAB_GADBEvaluate byte expression, return the byte in d0 and Itemp.
LAB_SCGBGet two parameters as in POKE or WAIT. Return the first parameter in a0, second in d0.
LAB_UFACScan for "," and get byte, else do Syntax error then warm start. Return the byte in d0 and Itemp.
LAB_PFACUnpack the four bytes starting (a0) into FAC1 as a floating point number.
LAB_AYFCPack the floating point number in FAC1 into the current variable (Lvarpl).
LAB_RTSTConvert d0 to signed longword in FAC1.
Put 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.
Last page update: 3rd May, 2004. | e-mail me |