Split data from code

This commit is contained in:
Роман Бойков 2026-08-28 13:24:49 +03:00
parent 1132ceed34
commit 00610b2925
5 changed files with 1082 additions and 1042 deletions

176
v5.21/disptab.inc Normal file
View File

@ -0,0 +1,176 @@
; =============================================================================
; Source codes for Microsoft Basic-80 v5.21 for CP/M
;
; Operators and fubctions dispatch tables
;
; Disassembled by Romych and Ghidra @2026.08.27
; =============================================================================
; ---------------------------------------------------
; DISPATCH TABLES
; ---------------------------------------------------
MB_STMDSP:
DW MB_ENDS
DW MB_FOR
DW MB_NEXT
DW MB_DATAS ;= 01h
DW MB_INPUT
DW MB_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
DW MB_STOP
DW MB_PRINT
DW MB_CLEAR
DW MB_LIST
DW MB_SCRATH
DW MB_ONGOTO
DW MB_NULL
DW MB_FNWAIT
DW MB_DEF
DW MB_POKE
DW MB_CONT
DW MB_SNERR ; CSAVE - unsupported for CP/M
DW MB_SNERR ; CLOAD - unsupported for CP/M
DW MB_FNOUT
DW MB_LPRINT
DW MB_LLIST
DW 0
DW MB_WIDTH
DW MB_REM
DW MB_TON
DW MB_TOFF
DW MB_SWAP
DW MB_ERASE
DW MB_EDIT
DW MB_ERRORS
DW MB_RESUME
DW MB_DELETE
DW MB_AUTO
DW MB_RESEQ
DW MB_DEFSTR
DW MB_DEFINT
DW MB_DEFREA
DW MB_DEFDBL
DW MB_LINE
DW 0
DW 0
DW MB_WHILE
DW MB_WEND
DW MB_CALLS
DW MB_WRITE
DW MB_DATAS
DW MB_CHAIN
DW MB_OPTION
DW MB_RANDOM
DW 0
DW MB_SYSTEM
DW 0
DW MB_OPEN
DW MB_FIELD
DW MB_GET
DW MB_PUT
DW MB_CLOSE
DW MB_LOAD
DW MB_MERGE
DW MB_FILES
DW MB_NAME
DW MB_KILL
DW MB_LSET
DW MB_RSET
DW MB_SAVE
DW MB_RESET
; ---------------------------------------------------
; TOKENS
; ---------------------------------------------------
MB_FUNDSP:
DW MB_LEFT_
DW MB_RIGHT_
DW MB_MID_
DW MB_SGN
DW MB_VINT
DW MB_ABS
DW MB_SQR
DW MB_RND
DW MB_SIN
; 8K FUNCTIONS
DW MB_LOG
DW MB_EXP
DW MB_COS
DW MB_TAN
DW MB_ATN
DW MB_FRE
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_SPACE_
DW MB_STRO_
DW MB_STRH_
DW MB_LPOS
; ---------------------------------------------------
; EXTENDED FUNCTIONS
; ---------------------------------------------------
DW MB_FRCINT
DW MB_FRCSNG
DW MB_FRCDBL
DW MB_FIXER
DS 22, 0
; ---------------------------------------------------
; DISK FUNCTIONS
; ---------------------------------------------------
DW MB_CVI
DW MB_CVS
DW MB_CVD
DW WARM_BOOT
DW MB_EOF
DW MB_LOC
DW MB_LOF
DW MB_MKI_
DW MB_MKS_
DW MB_MKD_
; --------------------------------------------------
; ALPHABETIC DISPATCH TABLE
; --------------------------------------------------
MB_ALPTAB:
DW MB_ATAB
DW MB_BTAB
DW MB_CTAB
DW MB_DTAB
DW MB_ETAB
DW MB_FTAB
DW MB_GTAB
DW MB_HTAB
DW MB_ITAB
DW MB_JTAB
DW MB_KTAB
DW MB_LTAB
DW MB_MTAB
DW MB_NTAB
DW MB_OTAB
DW MB_PTAB
DW MB_QTAB
DW MB_RTAB
DW MB_STAB
DW MB_TTAB
DW MB_UTAB
DW MB_VTAB
DW MB_WTAB
DW MB_XTAB
DW MB_YTAB
DW MB_ZTAB

View File

@ -188,107 +188,102 @@ MINUTK EQU 0xf3 ; 243
MULTK EQU 0xf4 ; 244
DIVTK EQU 0xf5
; ---------------------------------------------------
; --------------------------------------------------
; 8K OPERATORS
; ---------------------------------------------------
; --------------------------------------------------
EXPTK EQU 246 ; 0xF6
_AND EQU 247 ; 0xF7
_OR EQU 248 ; 0xF8
EXPTK EQU 246 ; 0xF6
_AND EQU 247 ; 0xF7
_OR EQU 248 ; 0xF8
; ---------------------------------------------------
; --------------------------------------------------
; EXTENDED OPERATORS
; ---------------------------------------------------
; --------------------------------------------------
_XOR EQU 249 ; 0xF9
_EQV EQU 250 ; 0xFA
_IMP EQU 251 ; 0xFB
_MOD EQU 252 ; 0xFC
_DUMMY EQU 253 ; 0xFD
IDIVTK EQU 253 ; 0xFD
_XOR EQU 249 ; 0xF9
_EQV EQU 250 ; 0xFA
_IMP EQU 251 ; 0xFB
_MOD EQU 252 ; 0xFC
_DUMMY EQU 253 ; 0xFD
IDIVTK EQU 253 ; 0xFD
LSTOPK EQU 253 + 1 - PLUSTK
; ---------------------------------------------------
; --------------------------------------------------
; FUNCTIONS
; ---------------------------------------------------
; --------------------------------------------------
;Q EQU 128 ; 0x80
_LEFT_ EQU 129 ; 0x81
ONEFUN EQU 129 ; 0x81
_RIGHT EQU 130 ; 0x82
;Q EQU 128 ; 0x80
_LEFT_ EQU 129 ; 0x81
ONEFUN EQU 129 ; 0x81
_RIGHT EQU 130 ; 0x82
_MID_ EQU 131 ; 0x83
MIDTK EQU 131 ; 0x83
_SGN EQU 132 ; 0x84
_INT EQU 133 ; 0x85
_ABS EQU 134 ; 0x86
_SQR EQU 135 ; 0x87
SQRTK EQU 135 ; 0x87
_RND EQU 136 ; 0x88
_SIN EQU 137 ; 0x89
_MID_ EQU 131 ; 0x83
MIDTK EQU 131 ; 0x83
_SGN EQU 132 ; 0x84
_INT EQU 133 ; 0x85
_ABS EQU 134 ; 0x86
_SQR EQU 135 ; 0x87
SQRTK EQU 135 ; 0x87
_RND EQU 136 ; 0x88
_SIN EQU 137 ; 0x89
; ---------------------------------------------------
; --------------------------------------------------
; 8K FUNCTIONS
; ---------------------------------------------------
; --------------------------------------------------
_LOG EQU 138 ; 0x8A
_EXP EQU 139 ; 0x8B
_COS EQU 140 ; 0x8C
_TAN EQU 141 ; 0x8D
_ATN EQU 142 ; 0x8E
_FRE EQU 143 ; 0x8F
_INP EQU 144 ; 0x90
_POS EQU 145 ; 0x91
_LEN EQU 146 ; 0x92
_STR_ EQU 147 ; 0x93
_VAL EQU 148 ; 0x94
_ASC EQU 149 ; 0x95
_CHR_ EQU 150 ; 0x96
_PEEK EQU 151 ; 0x97
_SPACE EQU 152 ; 0x98
_OCT_ EQU 153 ; 0x99
_HEX_ EQU 154 ; 0x9A
_LPOS EQU 155 ; 0x9B
;LASNUM EQU 155 ; 0x9B
_LOG EQU 138 ; 0x8A
_EXP EQU 139 ; 0x8B
_COS EQU 140 ; 0x8C
_TAN EQU 141 ; 0x8D
_ATN EQU 142 ; 0x8E
_FRE EQU 143 ; 0x8F
_INP EQU 144 ; 0x90
_POS EQU 145 ; 0x91
_LEN EQU 146 ; 0x92
_STR_ EQU 147 ; 0x93
_VAL EQU 148 ; 0x94
_ASC EQU 149 ; 0x95
_CHR_ EQU 150 ; 0x96
_PEEK EQU 151 ; 0x97
_SPACE EQU 152 ; 0x98
_OCT_ EQU 153 ; 0x99
_HEX_ EQU 154 ; 0x9A
_LPOS EQU 155 ; 0x9B
;LASNUM EQU 155 ; 0x9B
; ---------------------------------------------------
; --------------------------------------------------
; EXTENDED FUNCTIONS
; ---------------------------------------------------
; --------------------------------------------------
_CINT EQU 156 ; 0x9C
_CSNG EQU 157 ; 0x9D
_CDBL EQU 158 ; 0x9E
_FIX EQU 159 ; 0x9F
_CINT EQU 156 ; 0x9C
_CSNG EQU 157 ; 0x9D
_CDBL EQU 158 ; 0x9E
_FIX EQU 159 ; 0x9F
; ---------------------------------------------------
; --------------------------------------------------
; NCR VERSION FUNCTIONS
; DISK FUNCTIONS
; ---------------------------------------------------
; --------------------------------------------------
_CVI EQU 171 ; 0xAC
_CVS EQU 172 ; 0xAD
_CVD EQU 173 ; 0xAE
_EOF EQU 175 ; 0xB0
_LOC EQU 176 ; 0xB1
_LOF EQU 177 ; 0xB2
_MKI_ EQU 178 ; 0xB3
_MKS_ EQU 179 ; 0xB4
_MKD_ EQU 180 ; 0xB5
_CVI EQU 171 ; 0xAC
_CVS EQU 172 ; 0xAD
_CVD EQU 173 ; 0xAE
_EOF EQU 175 ; 0xB0
_LOC EQU 176 ; 0xB1
_LOF EQU 177 ; 0xB2
_MKI_ EQU 178 ; 0xB3
_MKS_ EQU 179 ; 0xB4
_MKD_ EQU 180 ; 0xB5
; ---------------------------------------------------
; --------------------------------------------------
; END DISK FUNCTIONS
; ---------------------------------------------------
; --------------------------------------------------
NUMGFN EQU 2*MIDTK-2*ONEFUN+1 ; 5
NUMGFN EQU 2*MIDTK - 2*ONEFUN + 1 ; 5
; ---------------------------------------------------
; --------------------------------------------------
; CP/M Entry
; ---------------------------------------------------
; --------------------------------------------------
WARM_BOOT EQU 0x0000
WARM_BOOT_ADDR EQU WARM_BOOT + 1
@ -296,23 +291,23 @@ BDOS_ENTER EQU 0x0005
BDOS_ENTER_ADDR EQU BDOS_ENTER + 1
DMA_BUFFER EQU 0x80
P_CMD_LINE EQU DMA_BUFFER + 1
TPA EQU 0x100 ; 256
TPA EQU 0x100
; ---------------------------------------------------
; --------------------------------------------------
; CP/M functions
; ---------------------------------------------------
C.VER EQU 0x0c ; Get version
C.REST EQU 0x0d ; Init BDOS
C.SDRV EQU 0x0e ; Set current drive
C.OPEN EQU 0x0f ; Open file
C.CLOS EQU 0x10 ; Close file
C.SEAR EQU 0x11 ; Search file
C.SEAR_N EQU 0x12 ; Search next
C.DEL EQU 0x13 ; Delete file
C.MAKE EQU 0x16 ; Create new file
C.RENA EQU 0x17 ; Rename file
C.GDRV EQU 0x19 ; Get current drive
C.BUFF EQU 0x1a ; Set DMA buffer address
; --------------------------------------------------
C.VER EQU 0x0c ; Get version
C.REST EQU 0x0d ; Init BDOS
C.SDRV EQU 0x0e ; Set current drive
C.OPEN EQU 0x0f ; Open file
C.CLOS EQU 0x10 ; Close file
C.SEAR EQU 0x11 ; Search file
C.SEAR_N EQU 0x12 ; Search next
C.DEL EQU 0x13 ; Delete file
C.MAKE EQU 0x16 ; Create new file
C.RENA EQU 0x17 ; Rename file
C.GDRV EQU 0x19 ; Get current drive
C.BUFF EQU 0x1a ; Set DMA buffer address
; ---------------------------------------------------
@ -325,9 +320,9 @@ FCB.RC EQU 38 ; 0x0F ? ; RECORD COUNT = CURRENT EXTE
FCB.NR EQU 40 ; 0x20 ? ; NEXT RECORD NUMBER
FCB.RN EQU 33 ; CP/M 2.x Random Record Number
; ---------------------------------------------------
; --------------------------------------------------
; File access mode
; ---------------------------------------------------
; --------------------------------------------------
MD.SQI EQU 1 ; seq inp
MD.SQO EQU 2 ; seq out
MD.RND EQU 3 ; random
@ -348,9 +343,9 @@ CONCON EQU 30 ; TOKEN RETURNED BY CHRGET AFTER CON
DBLCON EQU 31 ; DOUBLE PREC (8 BYTE) CONSTANT
; ---------------------------------------------------
; --------------------------------------------------
; ASCII codes
; ---------------------------------------------------
; --------------------------------------------------
ASCII_BELL EQU 0x07 ; 7
ASCII_BKSP EQU 0x08 ; 8
@ -364,9 +359,9 @@ ASCII_CUR EQU 0x24 ; $
ASCII_SQ EQU 0x27 ; '
ASCII_BKSL EQU 0x5C ; \
; ---------------------------------------------------
; --------------------------------------------------
; Key codes
; ---------------------------------------------------
; --------------------------------------------------
CTRL_C EQU 0x03 ; 3
CTRL_O EQU 0x0f ; 15
@ -395,29 +390,45 @@ DATOFC EQU DATOFS
DBLKSZ EQU DATOFS + DATPSC
DBLK.C EQU DBLKSZ ; SIZE OF A FILE INFO BLOCK PLUS $CODE
DSKERR EQU 0x31 ; 49
EOFCHR EQU 0x1a ; 26
; --------------------------------------------------
; Error codes
; --------------------------------------------------
ERRNF EQU 0x01
ERRSN EQU 0x02 ; 2
ERRRG EQU 0x03 ; 3
ERROD EQU 0x04 ; 4
ERRFC EQU 0x05 ; 5
ERROM EQU 0x07
ERROV EQU 0x06 ; 6
ERROM EQU 0x07
ERRUS EQU 0x08 ; 8
ERRBS EQU 0x09 ; 9
ERRDD EQU 0x0a ; 10
ERRDV0 EQU 0x0b ; 11
ERRID EQU 0x0c ; 12
ERRTM EQU 0x0d ; 13
ERRSO EQU 0x0e ; Out of space
ERRLS EQU 0x0f ; 15
ERRST EQU 0x10 ; String formula too complex
ERRCN EQU 0x11 ; 17
ERRRE EQU 0x14 ; 20
ERRUF EQU 0x12 ; Undefined user function
ERRNR EQU 0x13 ; 19
ERRRE EQU 0x14 ; 20
ERRUE EQU 0x15 ; Unprintable error
ERRMO EQU 0x16 ; Missing operand
ERRLBO EQU 0x17 ; 23
; skipped 18 and 19
ERRFN EQU 0x1a ; 26
; skipped 1b and 1c
ERRWH EQU 0x1d ; 29
ERRWE EQU 0x1e ; 30
NONDSK EQU 0x1e ; Last non disk error
; disk errors starts from here
DSKERR EQU 0x31 ; 49
;
ERRFOV EQU 0x32 ; 50
ERRIER EQU 0x33 ; 51
ERRBFN EQU 0x34 ; 52
@ -430,6 +441,7 @@ ERRDFL EQU 0x3d ; 61
ERRRPE EQU 0x3e ; 62
ERRFDR EQU 0x42 ; 66
ERRTMF EQU 0x43 ; 67
; --------------------------------------------------
FD.SIZ EQU 0xa9 ; 169
FD.PHY EQU 0xab ; 171
@ -452,10 +464,7 @@ LSTERR EQU 0x44 ; 68
MAXPRM EQU 0x20 ; 32
NMREL EQU 0x03 ; 3
NONDSK EQU 0x1e ; 30
PRMSIZ EQU 0x64 ; 100
SQO EQU 0x02 ; 2
SWTCHR EQU 0x2f ; 47
WHLSIZ EQU 0x06 ; 6
CPM_RES1 EQU 0x3B

495
v5.21/inidata.inc Normal file
View File

@ -0,0 +1,495 @@
; =============================================================================
; Source codes for Microsoft Basic-80 v5.21 for CP/M
;
; Initialized data. Variables, messages and tables.
;
; Disassembled by Romych and Ghidra @2026.08.27
; =============================================================================
; --------------------------------------------------
; OPERATOR PRECEDENCE TABLE
; --------------------------------------------------
MB_OPTAB:
DB 121
DB 121
DB 124
DB 124
DB 127
DB 80
DB 70
DB 60 ; PRECEDENCE OF "XOR"
DB 50 ; PRECEDENCE OF "EQV"
DB 40 ; PRECEDENCE OF "IMP"
DB 122 ; PRECEDENCE OF "MOD"
DB 123 ; PRECEDENCE OF "IDIV"
; --------------------------------------------------
; USED BY ASSIGNMENT CODE TO FORCE THE RIGHT HAND VALUE
; TO CORRESPOND TO THE VALUE TYPE OF THE VARIABLE BEING
; ASSIGNED TO.
; --------------------------------------------------
MB_FRCTBL:
DW MB_FRCDBL
DW 0x0
DW MB_FRCINT
DW MB_CHKSTR
DW MB_FRCSNG
; ---------------------------------------------------
; DOUBLE PRECISION ROUTINES
; ---------------------------------------------------
MB_DBLDSP:
DW MB_DADD
DW MB_DSUB
DW MB_DMULT
DW MB_DDIV
DW MB_DCOMP
; ---------------------------------------------------
; SINGLE PRECISION ROUTINES
; ---------------------------------------------------
MB_SNGDSP:
DW MB_FADD
DW MB_FSUB
DW MB_FMUL
DW MB_FDIV
DW MB_FCOMP
; ---------------------------------------------------
; INTEGER ROUTINES
; ---------------------------------------------------
MB_INTDSP:
DW MB_IADD
DW MB_ISUB
DW MB_IMUL
DW MB_INTDIV
DW MB_ICOMP
; ---------------------------------------------------
MB_ERRTAB:
DB 0
; ---------------------------------------------------
MB_ERROR_MSGS:
DB "NEXT without FOR", 0
DB "Syntax error", 0
DB "RETURN without GOSUB", 0
DB "Out of DATA", 0
DB "Illegal function call", 0
; ---------------------------------------------------
MB_OVRMSG:
DB "Overflow", 0
DB "Out of memory", 0
DB "Undefined line number", 0
DB "Subscript out of range", 0
DB "Duplicate Definition", 0
; ---------------------------------------------------
MB_DBZ_MSG:
DB "Division by zero", 0
DB "Illegal direct", 0
DB "Type mismatch", 0
DB "Out of string space", 0
DB "String too long", 0
DB "String formula too complex", 0
DB "Can't continue", 0
DB "Undefined user function", 0
DB "No RESUME\0RESUME without error", 0
DB "Unprintable error", 0
DB "Missing operand", 0
DB "Line buffer overflow", 0
DB '?', 0
DB '?', 0
DB "FOR Without NEXT", 0
DB '?', 0
DB '?', 0
DB "WHILE without WEND", 0
DB "WEND without WHILE", 0
DB "FIELD overflow", 0
DB "Internal error", 0
DB "Bad file number", 0
DB "File not found", 0
DB "Bad file mode", 0
DB "File already open", 0
DB '?', 0
DB "Disk I/O error", 0
DB "File already exists", 0
DB '?', 0
DB '?', 0
DB "Disk full", 0
DB "Input past end", 0
DB "Bad record number", 0
DB "Bad file name", 0
DB '?', 0
DB "Direct statement in file", 0
DB "Too many files", 0
; ---------------------------------------------------
MB_USRTAB:
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
DW MB_FCERR
; ---------------------------------------------------
MB_NULCNT:
DB 1 ; NUMBER OF NULLS TO PRINT AFTER CRLF
MB_CHARC:
DB 0 ; EATEN CHAR WHEN NOT A ^C
MB_ERRFLG:
DB 0 ; ERROR NUMBER SO EDIT CAN BE CALLED ON "SYNTAX ERROR"
MB_LPTLST:
DB 0 ; LAST LINE PRINTER OPERATION. ZERO MEANS LINEFEED
MB_LPTPOS:
DB 0 ; POSITION OF LPT PRINT HEAD
MB_PRTFLG:
DB 0x00
MB_NLPPOS:
DB 112 ; (((LPTLEN/CLMWID)-1)*CLMWID) - LAST COMMA FIELD POSIT
MB_LPTSIZ:
DB 132 ; DEFAULT LINE PRINTER WIDTH
MB_LINLEN:
DB LINLN
MB_CLMLST:
DB 56 ; POSITION OF LAST COMMA COLUMN
MB_RUBSW:
DB 0 ; RUBOUT SWITCH=1 INSIDE THE PROCESSING OF A RUBOUT (INLIN)
MB_CNTOFL:
DB 0 ; SUPRESS OUTPUT FLAG, NON-ZERO MEANS SUPRESS
MB_PTRFIL:
DW 0 ; POINTER TO DATA BLOCK OF CURRENT FILE
MB_TOPMEM:
DW MB_TSTACK+100
MB_CURLIN:
DW 65534 ; CURRENT LINE #
MB_TXTTAB:
DW MB_TSTACK+1 ; MB_TSTACK+1
MB_OVERRI:
DW MB_OVRMSG ; = "Overflow"
; ===================================================
; END OF INITIALIZED PART OF RAM
; ===================================================
; ===================================================
; DISK DATA STORAGE AREA
; ===================================================
MB_LSTFRE:
DW 0 ; FREE PLACE IN DIRECTORY
MB_MAXTRK:
DB 0 ; ALLOCATE INSIDE THIS TRACK
MB_DSKMOD:
DB 0 ; MODE OF FILE JUST LOOKED UP, ZERO IF FILE WAS JUST CREATED
MB_FILPT1:
DW 0 ; [FILPTR] ALWAYS REFETCHED FROM HERE
; POINTERS TO DATA BLOCKS FOR EACH FILE
MB_FILPTR:
.16 DW 0x0000
; HIGHEST FILE NUMBER ALLOWED
MB_MAXFIL:
DB 0
; THE NUMBER OF CHARACTER BEYOND #2 IN A VAR NAME
MB_NAMCNT:
DB 0
MB_NAMBUF:
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
; TEMP STORAGE DURING NAME SAVE AT INDLOP
MB_NAMTMP:
DW 0
MB_FILNA2:
.16 DB 0x00
MB_FILNAM:
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x00
MB_CPMVRN:
DB 0 ; CP/M Version Number (#0 is 2.x)
MB_CPMREA:
DB 0 ; CP/M Read Call
MB_CPMWRI:
DB 0 ; CP/M Write Call
MB_RST_INP: ; a colon for restarting input
DB ':'
MB_KBUF:
.(KBFLEN) DB 0x00
MB_BUFMIN:
DB 44
MB_BUF:
.256 DB 0x00
DB 0 ; ALLOW FOR SINGLE QUOTE IN BIG LINE
DB 0
MB_ENDBUF:
DB 0
MB_TTYPOS:
DB 0
MB_DIMFLG:
DB 0
;THE TYPE INDICATOR
MB_VALTYP:
DB 0
;OPERATOR NUMBER
MB_OPRTYP:
DB 0
MB_DORES:
DB 0
MB_CONTXT:
DW 0
MB_CONSAV:
DB 0
MB_CONTYP:
DB 0
; SAVED CONSTANT VALUE
MB_CONLO:
.4 DW 0
; HIGHEST LOCATION IN MEMORY
MB_MEMSIZ:
DW 0
; POINTER AT FIRST FREE TEMP DESCRIPTOR
MB_TEMPPT:
DW 0
MB_TEMPST:
.15 DB 0
;MB_DSCTMP:
.15 DB 0
; STRING FUNCTIONS BUILD ANSWER DESCRIPTOR HERE
MB_DSCTMP:
.3 DB 0
MB_DSCPTR EQU $ - 2
MB_FRETOP:
DW 0
MB_TEMP3:
DW 0
MB_CPMFIL:
DW 0
MB_ENDFOR:
DW 0
MB_DATLIN:
DW 0
MB_SUBFLG:
DB 0
MB_FLGINP:
DB 0
MB_TEMP:
DW 0
MB_PTRFLG:
DB 0
MB_AUTFLG:
DB 0
MB_AUTLIN:
DW 0
MB_AUTINC:
DW 0
MB_SAVTXT:
DW 0
MB_SAVSTK:
DW 0
MB_ERRLIN:
DW 0
MB_DOT:
DW 0
MB_ERRTXT:
DW 0
MB_ONELIN:
DW 0
MB_ONEFLG:
DB 0
MB_TEMP2:
DW 0
MB_OLDLIN:
DW 0
MB_OLDTXT:
DW 0
; POINTER TO START OF SIMPLE VARIABLE SPACE
MB_VARTAB:
DW 0
; POINTER TO BEGINNING OF ARRAY TABLE
MB_ARYTAB:
DW 0
; END OF STORAGE IN USE
MB_STREND:
DW 0x00
MB_DATPTR:
DW 0x0
MB_DEFTBL:
.26 DB 0
; PREVIOUS DEFINITION BLOCK ON STACK
MB_PRMSTK:
DW 0
; NUMBER OF BYTES IN THE ACTIVE TABLE
MB_PRMLEN:
DW 0
; ACTIVE PARAMETER DEFINITION TABLE
MB_PARM1:
.100 DB 0
MB_PRMPRV:
DW 0
MB_PRMLN2:
DW 0
MB_PARM2:
.100 DB 0
MB_PRMFLG:
DB 0x00
MB_ARYTA2:
DW 0x0
; ZERO IF NO FUNCTIONS ACTIVE. SAVES TIME IN SIMPLE SEARCH
MB_NOFUNS:
DB 0
; GARBAGE COLLECTION TEMP TO CHAIN THROUGH PARAMETER BLOCKS
MB_TEMP9:
DW 0
; COUNT OF ACTIVE FUNCTIONS
MB_FUNACT:
DW 0
MB_INPPAS:
DB 0
MB_NXTTXT:
DW 0
MB_NXTFLG:
DB 0
MB_FVALSV:
DW 0
DW 0
MB_NXTLIN:
DW 0
MB_OPTVAL:
DB 0
MB_OPTFLG:
DB 0
MB_PATCH:
.30 DB 0
MB_TEMPA:
DW 0
MB_SAVFRE:
DW 0
MB_MAXREC:
DW 0
MB_PROFLG:
DB 0
MB_MRGFLG:
DB 0
MB_MDLFLG:
DB 0
MB_CMEPTR:
DW 0
MB_CMSPTR:
DW 0
MB_CHNFLG:
DB 0
MB_CHNLIN:
DW 0
MB_SWPTMP:
DW 0, 0, 0, 0
MB_TRCFLG:
DB 0
; ===================================================
; THIS IS THE RAM TERMPORARY AREA FOR
; MATH PACKAGE ROUTINES
; ===================================================
MB_FLOAT_ACC:
DB 0 ; FLOATING ACCUMULATOR
MB_DFACLO:
DB 0, 0, 0, 0 ; FOUR LOWEST ORDERS FOR DOUBLE PRECISION
MB_FACLO:
DB 0, 0 ; MIDDLE ORDER OF MANTISSA
DB 0 ; HIGH ORDER OF MANTISSA
MB_FAC:
DB 0, 0 ; EXPONENT
MB_FLGOVC:
DB 0 ; OVERFLOW PRINT FLAG, =0, 1 PRINT
MB_OVCSTR:
DB 0
MB_FANSII:
DB 0
DB 0
MB_ARGLO:
.7 DB 0 ; LOCATION OF SECOND ARGUMENT FOR DOUBLE
MB_ARG:
DB 0 ; PRECISION
MB_FBUFFR:
.43 DB 0 ; BUFFER FOR FOUT
; ===================================================
; TEXT CONSTANTS FOR PRINT OUT
; ===================================================
MB_INTXT:
DB " in ", 0
MB_OKTXT:
DB "Ok\r\n", 0
MB_BRKTXT:
DB "Break", 0

File diff suppressed because it is too large Load Diff

272
v5.21/reswords.inc Normal file
View File

@ -0,0 +1,272 @@
; =============================================================================
; Source codes for Microsoft Basic-80 v5.21 for CP/M
;
; Reserved words definitions
;
; Disassembled by Romych and Ghidra @2026.08.27
; =============================================================================
; ---------------------------------------------------
; Reserved words table
; ---------------------------------------------------
MB_RESLST:
MB_ATAB:
; ---------------------------------------------------
DB "UT", 'O' OR 0x80, _AUTO
DB 'N', 'D' OR 0x80, _AND
DB 'B', 'S' OR 0x80, _ABS - 0x80
DB 'T', 'N' OR 0x80, _ATN - 0x80
DB 'S', 'C' OR 0x80, _ASC - 0x80
DB 0
; ---------------------------------------------------
MB_BTAB:
DB 0
; ---------------------------------------------------
MB_CTAB:
DB "LOS", 'E' OR 0x80, _CLOSE
DB "ON", 'T' OR 0x80, _CONT
DB "LEA", 'R' OR 0x80, _CLEAR
DB "IN", 'T' OR 0x80, _CINT - 0x80
DB "SN", 'G' OR 0x80, _CSNG - 0x80
DB "DB", 'L' OR 0x80, _CDBL - 0x80
DB 'V', 'I' OR 0x80, _CVI - 0x80
DB 'V', 'S' OR 0x80, _CVS - 0x80
DB 'V', 'D' OR 0x80, _CVD - 0x80
DB "O", 'S' OR 0x80, _COS - 0x80
DB "HR", '$' OR 0x80, _CHR_ - 0x80
DB "AL", 'L' OR 0x80, _CALL
DB "OMMO", 'N' OR 0x80, _COMMON
DB "HAI", 'N' OR 0x80, _CHAIN
DB 0
; ---------------------------------------------------
MB_DTAB:
DB "ELET", 'E' OR 0x80, _DELETE
DB "AT", 'A' OR 0x80, _DATA
DB 'I', 'M' OR 0x80, _DIM
DB "EFST", 'R' OR 0x80, _DEFSTR
DB "EFIN", 'T' OR 0x80, _DEFINT
DB "EFSN", 'G' OR 0x80, _DEFSNG
DB "EFDB", 'L' OR 0x80, _DEFDBL
DB 'E', 'F' OR 0x80, _DEF
DB 0
; ---------------------------------------------------
MB_ETAB:
DB "LS", 'E' OR 0x80, _ELSE
DB 'N', 'D' OR 0x80, _END
DB "RAS", 'E' OR 0x80, _ERASE
DB "DI", 'T' OR 0x80, _EDIT
DB "RRO", 'R' OR 0x80, _ERROR
DB 'R', 'L' OR 0x80, _ERL
DB 'R', 'R' OR 0x80, _ERR
DB 'X', 'P' OR 0x80, _EXP - 0x80
DB 'O', 'F' OR 0x80, _EOF - 0x80
DB 'Q', 'V' OR 0x80, _EQV
DB 0
; ---------------------------------------------------
MB_FTAB:
DB 'O', 'R' OR 0x80, _FOR
DB "IEL", 'D' OR 0x80, _FIELD
DB "ILE", 'S' OR 0x80, _FILES
DB 'N' OR 0x80, _FN
DB 'R', 'E' OR 0x80, _FRE - 0x80
DB 'I', 'X' OR 0x80, _FIX - 0x80
DB 0
; ---------------------------------------------------
MB_GTAB:
DB "OT", 'O' OR 0x80, _GOTO
DB "O T", 'O' OR 0x80, _GOTO
DB "OSU", 'B' OR 0x80, _GOSUB
DB 'E', 'T' OR 0x80, _GET
DB 0
; ---------------------------------------------------
MB_HTAB:
DB "EX", '$' OR 0x80, _HEX_ - 0x80
DB 0
; ---------------------------------------------------
MB_ITAB:
DB "NPU", 'T' OR 0x80, _INPUT
DB 'F' OR 0x80, _IF
DB "NST", 'R' OR 0x80, _INSTR
DB 'N', 'T' OR 0x80, _INT - 0x80
DB 'N', 'P' OR 0x80, _INP - 0x80
DB 'M', 'P' OR 0x80, _IMP
DB "NKEY", '$' OR 0x80, _INKEY
DB 0
; ---------------------------------------------------
MB_JTAB:
DB 0
; ---------------------------------------------------
MB_KTAB:
DB "IL", 'L' OR 0x80, _KILL
DB 0
; ---------------------------------------------------
MB_LTAB:
DB "PRIN", 'T' OR 0x80, _LPRINT
DB "LIS", 'T' OR 0x80, _LLIST
DB "PO", 'S' OR 0x80, _LPOS - 0x80
DB 'E', 'T' OR 0x80, _LET
DB "IN", 'E' OR 0x80, _LINE
DB "OA", 'D' OR 0x80, _LOAD
DB "SE", 'T' OR 0x80, _LSET
DB "IS", 'T' OR 0x80, _LIST
DB 'O', 'G' OR 0x80, _LOG - 0x80
DB 'O', 'C' OR 0x80, _LOC - 0x80
DB "E", 'N' OR 0x80, _LEN - 0x80
DB "EFT", '$' OR 0x80, _LEFT_ - 0x80
DB 'O', 'F' OR 0x80, _LOF - 0x80
DB 0
; ---------------------------------------------------
MB_MTAB:
DB "ERG", 'E' OR 0x80, 0xC5
DB 'O', 'D' OR 0x80, 0xFC
DB "KI", '$' OR 0x80, _MKI_ - 0x80
DB "KS", '$' OR 0x80, _MKS_ - 0x80
DB "KD", '$' OR 0x80, _MKD_ - 0x80
DB "ID", '$' OR 0x80, _MID_ - 0x80
DB 0
; ---------------------------------------------------
MB_NTAB:
DB "EX", 'T' OR 0x80, _NEXT
DB "UL", 'L' OR 0x80, _NULL
DB "AM", 'E' OR 0x80, _NAME
DB 'E', 'W' OR 0x80, _NEW
DB 'O', 'T' OR 0x80, _NOT
DB 0
; ---------------------------------------------------
MB_OTAB:
DB "PE", 'N' OR 0x80, _OPEN
DB 'U', 'T' OR 0x80, _OUT
DB 'N' OR 0x80, _ON
DB 'R' OR 0x80, _OR
DB "CT", '$' OR 0x80, _OCT_ - 0x80
DB "PTIO", 'N' OR 0x80, _OPTION
DB 0
; ---------------------------------------------------
MB_PTAB:
DB "RIN", 'T' OR 0x80, _PRINT
DB 'U', 'T' OR 0x80, _PUT
DB "OK", 'E' OR 0x80, _POKE
DB 'O', 'S' OR 0x80, _POS - 0x80
DB "EE", 'K' OR 0x80, _PEEK - 0x80
DB 0
; ---------------------------------------------------
MB_QTAB:
DB 0
; ---------------------------------------------------
MB_RTAB:
DB "ETUR", 'N' OR 0x80, _RETUR
DB "EA", 'D' OR 0x80, _READ
DB 'U', 'N' OR 0x80, _RUN
DB "ESTOR", 'E' OR 0x80, _RESTORE
DB 'E', 'M' OR 0x80, _REM
DB "ESUM", 'E' OR 0x80, _RESUME
DB "SE", 'T' OR 0x80, _RSET
DB "IGHT", '$' OR 0x80, _RIGHT - 0x80
DB 'N', 'D' OR 0x80, _RND - 0x80
DB "ENU", 'M' OR 0x80, _RENUM
DB "ESE", 'T' OR 0x80, _RESET
DB "ANDOMIZ", 'E' OR 0x80, _RANDOMIZE
DB 0
; ---------------------------------------------------
MB_STAB:
DB "TO", 'P' OR 0x80, _STOP
DB "WA", 'P' OR 0x80, _SWAP
DB "AV", 'E' OR 0x80, _SAVE
DB "PC", '(' OR 0x80, _SPC
DB "TE", 'P' OR 0x80, _STEP
DB 'G', 'N' OR 0x80, _SGN - 0x80
DB 'Q', 'R' OR 0x80, _SQR - 0x80
DB 'I', 'N' OR 0x80, _SIN - 0x80
DB "TR", '$' OR 0x80, _STR_- 0x80
DB "TRING", '$' OR 0x80, _STRIN
DB "PACE", '$' OR 0x80, _SPACE - 0x80
DB "YSTE", 'M' OR 0x80, _SYSTE
DB 0
; ---------------------------------------------------
MB_TTAB:
DB "HE", 'N' OR 0x80, _THEN
DB "RO", 'N' OR 0x80, _TRON
DB "ROF", 'F' OR 0x80, _TROFF
DB "AB", '(' OR 0x80, _TAB
DB 'O' OR 0x80, _TO
DB 'A', 'N' OR 0x80, _TAN - 0x80
DB 0
; ---------------------------------------------------
MB_UTAB:
DB "SIN", 'G' OR 0x80, _USING
DB 'S', 'R' OR 0x80, _USR
DB 0
; ---------------------------------------------------
MB_VTAB:
DB 'A', 'L' OR 0x80, _VAL - 0x80
DB "ARPT", 'R' OR 0x80, _VARPTR
DB 0
; ---------------------------------------------------
MB_WTAB:
DB "IDT", 'H' OR 0x80, _WIDTH
DB "AI", 'T' OR 0x80, _WAIT
DB "HIL", 'E' OR 0x80, _WHILE
DB "EN", 'D' OR 0x80, _WEND
DB "RIT", 'E' OR 0x80, _WRITE
DB 0
; ---------------------------------------------------
MB_XTAB:
DB 'O', 'R' OR 0x80, _XOR
DB 0
; ---------------------------------------------------
MB_YTAB:
DB 0
; ---------------------------------------------------
MB_ZTAB:
DB 0
; ---------------------------------------------------
;
; ---------------------------------------------------
MB_SPCTAB:
DB '+' OR 0x80
DB PLUSTK
DB '-' OR 0x80
DB MINUTK
DB '*' OR 0x80
DB MULTK
DB '/' OR 0x80
DB DIVTK
DB '^' OR 0x80
DB EXPTK
DB ASCII_BKSL OR 0x80
DB IDIVTK
DB '''' OR 0x80
DB SNGQTK
DB '>' OR 0x80
DB GREATK
DB '=' OR 0x80
DB EQULTK
DB '<' OR 0x80
DB LESSTK
DB 0