MSBASIC-80/v5.21/inidata.inc

496 lines
10 KiB
PHP

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