519 lines
13 KiB
PHP
519 lines
13 KiB
PHP
; ===================================================
|
|
; 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_ - 0x80
|
|
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_ - 0x80
|
|
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_ - 0x80
|
|
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", '(' + 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 - 0x80
|
|
DB 0
|
|
; ---------------------------------------------------
|
|
TTAB:
|
|
DB "HE", 'N' + 0x80, _THEN
|
|
DB "RO", 'N' + 0x80, _TRON
|
|
DB "ROF", 'F' + 0x80, _TROFF
|
|
DB "AB", '(' + 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
|