; ============================================================================= ; 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