; =================================================== ; Microsoft BASIC v2 for MSX System v3.0 ; ; Operator and function dispatch tables ; Disassembled by Romychs @ 2026-09-03 ; =================================================== ; --------------------------------------------------- ; Operator tokens ; --------------------------------------------------- STMDSP: dw MB_ENDS dw MB_FOR dw MB_NEXT dw MB_DATAS dw MB_INPUT dw LB_DIM dw MB_READ dw MB_LET dw MB_GOTO dw MB_RUN dw MB_IFS dw MB_RESTORE dw MB_GOSUB dw MB_RETURN dw MB_REM_ELSE ; 0x90..0x9F dw MB_STOP dw MB_PRINT dw MB_CLEAR dw MB_LIST dw MB_NEW dw MB_ONGOTO dw MB_FNWAIT dw MB_DEF dw MB_POKE dw MB_CONT dw MB_CSAVE dw MB_CLOAD dw MB_OUTWRD dw MB_LPRINT dw MB_LLIST dw MB_CLS ; 0xA0..0xAF dw MB_WIDTH dw MB_REM_ELSE dw MB_TRON ; = '>' dw MB_TROFF dw MB_SWAP dw MB_ERASE dw MB_ERRORS dw MB_RESUME dw MB_DELETE dw MB_AUTO dw MB_RENUM dw MB_DEFSTR dw MB_DEFINT dw MB_DEFSNG dw MB_DEFDBL dw MB_LINE ; 0xB0..0xBF dw MB_OPEN dw MB_FIELD dw MB_GET dw MB_PUT dw MB_CLOSE dw MB_LOAD ; = F6h dw MB_MERGE ; _MERGE dw MB_FILES dw MB_LSET dw MB_RSET dw MB_SAVE dw MB_LFILES dw MB_CIRCLE dw MB_COLOR dw MB_DRAW dw MB_PAINT ; 0xC0..0xCF dw BEEP dw MB_PLAY dw MB_PSETST dw MB_PRESET dw MB_SOUND dw MB_SCREEN dw MB_VPOKE dw MB_SPRITE dw MB_VDP dw MB_BASE dw MB_CALL dw MB_TIME dw MB_KEY dw MB_MAX dw MB_MOTOR dw MB_BLOAD ; 0xD0..0xDF dw MB_BSAVE dw MB_DSKO dw MB_SET dw MB_NAME dw MB_KILL dw MB_IPL dw MB_COPY dw MB_CMD dw MB_LOCATE ; --------------------------------------------------- ; Function tokens ; --------------------------------------------------- ; 0x81..0x8F MB_FUNDSP: dw MB_LEFT_ dw MB_RIGHT_ dw MB_MID_ dw MB_SGN dw MB_INT dw MB_ABS dw MB_SQR dw MB_RND dw MB_SIN dw MB_LOG dw MB_EXP dw MB_COS dw MB_TAN dw MB_ATN dw MB_FRE ; 0x90..0x9F dw MB_FNINP dw MB_POS dw MB_LEN dw MB_STR_ dw MB_VAL dw MB_ASC dw MB_CHR_ dw MB_PEEK dw MB_VPEEK dw MB_SPACE_ dw MB_OCT_ dw MB_HEX_ dw MB_LPOS dw MB_BIN_ dw MB_FRCINT dw MB_FRCSNG ; 0xA0..0xAF dw MB_FRCDBL dw MB_FIXER dw MB_STICK dw MB_TRIGFN dw MB_PDL dw MB_PAD dw MB_DSKF_ dw MB_FPOS dw MB_CVI dw MB_CVS dw MB_CVD dw MB_EOF dw MB_LOC dw MB_LOF dw MB_MKI_ dw MB_MKS_ dw MB_MKD_ ; --------------------------------------------------- ; Alphabetic operator and function dispatch table ; --------------------------------------------------- ALPTAB: DW ATAB DW BTAB DW CTAB DW DTAB DW ETAB DW FTAB DW GTAB DW HTAB DW ITAB DW JTAB DW KTAB DW LTAB DW MTAB DW NTAB DW OTAB DW PTAB DW QTAB DW RTAB DW STAB DW TTAB DW UTAB DW VTAB DW WTAB DW XTAB DW YTAB DW ZTAB ; --------------------------------------------------- ; Alphabetic character by character ; operator and function table ; --------------------------------------------------- ; --------------------------------------------------- ATAB: DB "UT", 'O' + 0x80, _AUTO DB "N", 'D' + 0x80, _AND DB "B", 'S' + 0x80, _ABS - 0x80 DB "T", 'N' + 0x80, _ATN - 0x80 DB "S", 'C' + 0x80, _ASC - 0x80 DB "TTR", '$' + 0x80, _ATTR_ DB 0 ; --------------------------------------------------- BTAB: DB "AS", 'E' + 0x80, _BASE DB "SAV", 'E' + 0x80, _BSAVE DB "LOA", 'D' + 0x80, _BLOAD DB "EE", 'P' + 0x80, _BEEP DB "IN", '$' + 0x80, _BIN_ DB 0 ; --------------------------------------------------- CTAB: DB "AL", 'L' + 0x80, _CALL DB "LOS", 'E' + 0x80, _CLOSE DB "OP", 'Y' + 0x80, _COPY DB "ON", 'T' + 0x80, _CONT DB "LEA", 'R' + 0x80, _CLEAR DB "LOA", 'D' + 0x80, _CLOAD DB "SAV", 'E' + 0x80, _CSAVE DB "SRLI", 'N' + 0x80, _CSRLIN DB "IN", 'T' + 0x80, _CINT - 0x80 DB "SN", 'G' + 0x80, _CSNG - 0x80 DB "DB", 'L' + 0x80, _CDBL - 0x80 DB "V", 'I' + 0x80, _CVI - 0x80 DB "V", 'S' + 0x80, _CVS - 0x80 DB "V", 'D' + 0x80, _CVD - 0x80 DB "O", 'S' + 0x80, _COS - 0x80 DB "HR", '$' + 0x80, _CHR_ - 0x80 DB "IRCL", 'E' + 0x80, _CIRCLE DB "OLO", 'R' + 0x80, _COLOR DB "L", 'S' + 0x80, _CLS DB "M", 'D' + 0x80, _CMD DB 0 ; --------------------------------------------------- DTAB: DB "ELET", 'E' + 0x80, _DELETE DB "AT", 'A' + 0x80, _DATA DB "I", 'M' + 0x80, _DIM DB "EFST", 'R' + 0x80, _DEFSTR DB "EFIN", 'T' + 0x80, _DEFINT DB "EFSN", 'G' + 0x80, _DEFSNG DB "EFDB", 'L' + 0x80, _DEFDBL DB "SKO", '$' + 0x80, _DSKO_ DB "E", 'F' + 0x80, _DEF DB "SKI", '$' + 0x80, _DSKI_ DB "SK", 'F' + 0x80, _DSKF_ DB "RA", 'W' + 0x80, _DRAW DB 0 ; --------------------------------------------------- ETAB: DB "LS", 'E' + 0x80, _ELSE DB "N", 'D' + 0x80, _END DB "RAS", 'E' + 0x80, _ERASE DB "RRO", 'R' + 0x80, _ERROR DB "R", 'L' + 0x80, _ERL DB "R", 'R' + 0x80, _ERR DB "X", 'P' + 0x80, _EXP - 0x80 DB "O", 'F' + 0x80, _EOF - 0x80 DB "Q", 'V' + 0x80, _EQV DB 0 ; --------------------------------------------------- FTAB: DB "O", 'R' + 0x80, _FOR DB "IEL", 'D' + 0x80, _FIELD DB "ILE", 'S' + 0x80, _FILES DB 'N' + 0x80, _FN DB "R", 'E' + 0x80, _FRE - 0x80 DB "I", 'X' + 0x80, _FIX - 0x80 DB "PO", 'S' + 0x80, _FPOS - 0x80 DB 0 ; --------------------------------------------------- GTAB: DB "OT", 'O' + 0x80, _GOTO DB "O T", 'O' + 0x80, _GOTO DB "OSU", 'B' + 0x80, _GOSUB DB "E", 'T' + 0x80, _GET DB 0 ; --------------------------------------------------- HTAB: DB "EX", '$' + 0x80, _HEX - 0x80 DB 0 ; --------------------------------------------------- ITAB: DB "NPU", 'T' + 0x80, _INPUT DB 'F' + 0x80, _IF DB "NST", 'R' + 0x80, _INSTR DB "N", 'T' + 0x80, _INT - 0x80 DB "N", 'P' + 0x80, _INP - 0x80 DB "M", 'P' + 0x80, _IMP DB "NKEY", '$' + 0x80, _INKEY_ DB "P", 'L' + 0x80, _IPL DB 0 ; --------------------------------------------------- JTAB: DB 0 ; --------------------------------------------------- KTAB: DB "IL", 'L' + 0x80, _KILL DB "E", 'Y' + 0x80, _KEY DB 0 ; --------------------------------------------------- LTAB: DB "PRIN", 'T' + 0x80, _LPRINT DB "LIS", 'T' + 0x80, _LLIST DB "PO", 'S' + 0x80, _LPOS - 0x80 DB "E", 'T' + 0x80, _LET DB "OCAT", 'E' + 0x80, _LOCATE DB "IN", 'E' + 0x80, _LINE DB "OA", 'D' + 0x80, _LOAD DB "SE", 'T' + 0x80, _LSET DB "IS", 'T' + 0x80, _LIST DB "FILE", 'S' + 0x80, _LFILES DB "O", 'G' + 0x80, _LOG - 0x80 DB "O", 'C' + 0x80, _LOC - 0x80 DB "E", 'N' + 0x80, _LEN - 0x80 DB "EFT", '$' + 0x80, _LEFT_ DB "O", 'F' + 0x80, _LOF - 0x80 DB 0 ; --------------------------------------------------- MTAB: DB "OTO", 'R' + 0x80, _MOTOR DB "ERG", 'E' + 0x80, _MERGE DB "O", 'D' + 0x80, _MOD DB "KI", '$' + 0x80, _MKI_ - 0x80 DB "KS", '$' + 0x80, _MKS_ - 0x80 DB "KD", '$' + 0x80, _MKD_ - 0x80 DB "ID", '$' + 0x80, _MID_ - 0x80 DB "A", 'X' + 0x80, _MAX DB 0 ; --------------------------------------------------- NTAB: DB "EX", 'T' + 0x80, _NEXT DB "AM", 'E' + 0x80, _NAME DB "E", 'W' + 0x80, _NEW DB "O", 'T' + 0x80, _NOT DB 0 ; --------------------------------------------------- OTAB: DB "PE", 'N' + 0x80, _OPEN DB "U", 'T' + 0x80, _OUT DB 'N' + 0x80, _ON DB 'R' + 0x80, _OR DB "CT", '$' + 0x80, _OCT_ - 0x80 DB "F", 'F' + 0x80, _OFF DB 0 ; --------------------------------------------------- PTAB: DB "RIN", 'T' + 0x80, _PRINT DB "U", 'T' + 0x80, _PUT DB "OK", 'E' + 0x80, _POKE DB "O", 'S' + 0x80, _POS - 0x80 DB "EE", 'K' + 0x80, _PEEK - 0x80 DB "SE", 'T' + 0x80, _PSET DB "RESE", 'T' + 0x80, _PRESET DB "OIN", 'T' + 0x80, _POINT DB "AIN", 'T' + 0x80, _PAINT DB "D", 'L' + 0x80, _PDL - 0x80 DB "A", 'D' + 0x80, _PAD - 0x80 DB "LA", 'Y' + 0x80, _PLAY DB 0 ; --------------------------------------------------- QTAB: DB 0 ; --------------------------------------------------- RTAB: DB "ETUR", 'N' + 0x80, _RETURN DB "EA", 'D' + 0x80, _READ DB "U", 'N' + 0x80, _RUN DB "ESTOR", 'E' + 0x80, _RESTORE DB "E", 'M' + 0x80, _REM DB "ESUM", 'E' + 0x80, _RESUME DB "SE", 'T' + 0x80, _RSET DB "IGHT", '$' + 0x80, _RIGHT_ - 0x80 DB "N", 'D' + 0x80, _RND - 0x80 DB "ENU", 'M' + 0x80, _RENUM DB 0 ; -------------------------------------------------- STAB: DB "CREE", 'N' + 0x80, _SCREEN DB "PRIT", 'E' + 0x80, _SPRITE DB "TO", 'P' + 0x80, _STOP DB "WA", 'P' + 0x80, _SWAP DB "E", 'T' + 0x80, _SET DB "AV", 'E' + 0x80, _SAVE DB "PC", 'B' + 0x80, _SPC DB "TE", 'P' + 0x80, _STEP DB "G", 'N' + 0x80, _SGN - 0x80 DB "Q", 'R' + 0x80, _SQR - 0x80 DB "I", 'N' + 0x80, _SIN - 0x80 DB "TR", '$' + 0x80, _STR_ - 0x80 DB "TRING", '$' + 0x80, _STRING_ DB "PACE", '$' + 0x80, _SPACE_ - 0x80 DB "OUN", 'D' + 0x80, _SOUND DB "TIC", 'K' + 0x80, _STICK - 0x80 DB "TRI", 'G' + 0x80, _STRIG DB 0 ; --------------------------------------------------- TTAB: DB "HE", 'N' + 0x80, _THEN DB "RO", 'N' + 0x80, _TRON DB "ROF", 'F' + 0x80, _TROFF DB "AB", 'B' + 0x80, _TAB DB 'O' + 0x80, _TO DB "IM", 'E' + 0x80, _TIME DB "A", 'N' + 0x80, _TAN - 0x80 DB 0 ; --------------------------------------------------- UTAB: DB "SIN", 'G' + 0x80, _USING DB "S", 'R' + 0x80, _USR DB 0 ; --------------------------------------------------- VTAB: DB "A", 'L' + 0x80, _VAL - 0x80 DB "ARPT", 'R' + 0x80, _VARPTR DB "D", 'P' + 0x80, _VDP DB "POK", 'E' + 0x80, _VPOKE DB "PEE", 'K' + 0x80, _VPEEK - 0x80 DB 0 ; --------------------------------------------------- WTAB: DB "IDT", 'H' + 0x80, _WIDTH DB "AI", 'T' + 0x80, _WAIT DB 0 ; --------------------------------------------------- XTAB: DB "O", 'R' + 0x80, _XOR DB 0 ; --------------------------------------------------- YTAB: DB 0 ; --------------------------------------------------- ZTAB: DB 0 ; --------------------------------------------------- ; Special operators table ; --------------------------------------------------- MB_SPCTAB DB '+' + 0x80 DB PLUSTK DB '-' + 0x80 DB MINUTK DB '*' + 0x80 DB MULTK DB '/' + 0x80 DB DIVTK DB '^' + 0x80 DB EXPTK DB ASCII_BKSL + 0x80 DB IDIVTK DB '''' + 0x80 DB SNGQTK DB '>' + 0x80 DB GREATK DB '=' + 0x80 DB EQULTK DB '<' + 0x80 DB LESSTK DB 0 ; --------------------------------------------------- ; Math precedences table ; --------------------------------------------------- MB_OPTAB: DB 121 DB 121 DB 124 DB 124 DB 127 DB 80 DB 70 DB 60 DB 50 DB 40 DB 122 DB 123 ; --------------------------------------------------- MB_FRCTBL: dw MB_FRCDBL dw 0 dw MB_FRCINT dw MB_CHKSTR dw MB_FRCSNG ; --------------------------------------------------- MB_DBLDSP: dw MB_DADD dw MB_DSUB dw MB_DMUL dw MB_DDIV dw MB_DEXP dw MB_DCOMP ; --------------------------------------------------- MB_SNGDSP: dw MB_FADD dw MB_FSUB dw MB_FMUL dw MB_FDIV dw MB_FEXP dw MB_FCOMP ; --------------------------------------------------- MB_INTDSP: dw MB_IADD dw MB_ISUB dw MB_IMUL dw MB_IDIV1 dw MB_IEXP dw MB_ICOMP