15012 lines
259 KiB
NASM
15012 lines
259 KiB
NASM
; ==================================================
|
|
; Source codes for Microsoft Basic-80 v5.21 for CP/M
|
|
;
|
|
; Disassembled by Romych and Ghidra @2026.08.27
|
|
; I tried to keep the original label names as they
|
|
; are in the source codes published by Microsoft.
|
|
; ==================================================
|
|
|
|
DEVICE NOSLOT64K
|
|
SLDOPT COMMENT WPMEM, ASSERTION, LOGPOINT
|
|
|
|
INCLUDE "equates.inc"
|
|
|
|
;LABELSLIST "mb.l"
|
|
OUTPUT mb.com
|
|
|
|
|
|
|
|
ORG 0x0100
|
|
|
|
; ---------------------------------------------------
|
|
; Entry point
|
|
; ---------------------------------------------------
|
|
START:
|
|
|
|
JP MB_INIT
|
|
DW MB_FRCINT
|
|
DW MB_MAKINT
|
|
|
|
; ---------------------------------------------------
|
|
; DISPATCH TABLES, RESERVED WORD 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
|
|
DW MB_SNERR ;CLOAD
|
|
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_
|
|
; DW 0x0024
|
|
; DW 0, 0, 0, 0, 0, 0, 0, 0
|
|
|
|
; --------------------------------------------------
|
|
; 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
|
|
|
|
|
|
; ---------------------------------------------------
|
|
; 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 "ON", 'E' OR 0x80, _TONE
|
|
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
|
|
|
|
; ---------------------------------------------------
|
|
; 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\0Syntax 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
|
|
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
|
|
; FIND A "FOR" ENTRY ON THE STACK WITH THE VARIABLE POINTER
|
|
; PASSED IN [D, E].
|
|
;
|
|
MB_FNDFOR:
|
|
LD HL, 0x4
|
|
ADD HL, SP
|
|
|
|
MB_LOOPER:
|
|
LD A, (HL)
|
|
INC HL
|
|
CP _WHILE
|
|
JP NZ, MB_STKSRC
|
|
LD BC, WHLSIZ
|
|
ADD HL, BC
|
|
JP MB_LOOPER
|
|
MB_STKSRC:
|
|
CP _FOR
|
|
RET NZ
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
PUSH HL
|
|
LD H, B
|
|
LD L, C
|
|
LD A, D
|
|
OR E
|
|
EX DE, HL
|
|
JP Z, MB_POPGOF
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
MB_POPGOF:
|
|
LD BC, FORSZC
|
|
POP HL
|
|
RET Z
|
|
ADD HL, BC
|
|
JP MB_LOOPER
|
|
MB_READYR:
|
|
LD BC, MB_STPRDY
|
|
JP MB_ERESET
|
|
|
|
MB_PRGEND:
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
LD A, H
|
|
AND L
|
|
INC A
|
|
JP Z, MB_ENDCNJ
|
|
LD A, (MB_ONEFLG)
|
|
OR A
|
|
LD E, ERRNR
|
|
JP NZ, MB_ERROR
|
|
MB_ENDCNJ:
|
|
JP MB_ENDCON
|
|
MB_DERDFL:
|
|
LD E, ERRDFL
|
|
DB 1
|
|
MB_ERIOE:
|
|
LD E, ERRIOE
|
|
DB 1
|
|
MB_ERBFM:
|
|
LD E, ERRBFM
|
|
DB 1
|
|
MB_ERFNF:
|
|
LD E, ERRFNF
|
|
DB 1
|
|
MB_ERBFN:
|
|
LD E, ERRBFN
|
|
DB 1
|
|
LD E, ERRIER
|
|
DB 1
|
|
MB_ERRPE:
|
|
LD E, ERRRPE
|
|
DB 1
|
|
MB_ERFAO:
|
|
LD E, ERRFAO
|
|
DB 1
|
|
|
|
; ===================================================
|
|
MB_ERNMF:
|
|
LD E, 0x40
|
|
DB 1
|
|
MB_DERBRN:
|
|
LD E, 0x3f
|
|
DB 1
|
|
MB_DERFOV:
|
|
LD E, ERRFOV
|
|
DB 1
|
|
MB_ERTMF:
|
|
LD E, ERRTMF
|
|
DB 1
|
|
MB_DERFAE:
|
|
LD E, ERRFAE
|
|
JP MB_ERROR
|
|
MB_DATSNE:
|
|
LD HL, (MB_DATLIN)
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
|
|
; ===================================================
|
|
MB_SNERR:
|
|
LD E, ERRSN
|
|
DB 1
|
|
MB_DV0ERR:
|
|
LD E, ERRDV0
|
|
DB 1
|
|
MB_NFERR:
|
|
LD E, 0x1
|
|
DB 1
|
|
MB_DDERR:
|
|
LD E, ERRDD
|
|
DB 1
|
|
MB_UFERR:
|
|
LD E, 0x12
|
|
DB 1
|
|
MB_REERR:
|
|
LD E, ERRRE
|
|
DB 1
|
|
|
|
; ===================================================
|
|
MB_OVERR:
|
|
LD E, ERROV
|
|
DB 1
|
|
MB_MOERR:
|
|
LD E, 0x16
|
|
DB 1
|
|
MB_TMERR:
|
|
LD E, ERRTM
|
|
MB_ERROR:
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
LD (MB_ERRLIN), HL
|
|
XOR A
|
|
LD (MB_MRGFLG), A
|
|
LD (MB_CHNFLG), A
|
|
LD A, H
|
|
AND L
|
|
INC A
|
|
JP Z, MB_ERRESM
|
|
LD (MB_DOT), HL
|
|
|
|
MB_ERRESM:
|
|
LD BC, MB_ERRMOR
|
|
|
|
MB_ERESET:
|
|
LD HL, (MB_SAVSTK)
|
|
JP MB_STKERR
|
|
|
|
MB_ERRMOR:
|
|
POP BC
|
|
LD A, E
|
|
LD C, E
|
|
LD (MB_ERRFLG), A
|
|
LD HL, (MB_SAVTXT)
|
|
LD (MB_ERRTXT), HL
|
|
EX DE, HL
|
|
LD HL, (MB_ERRLIN)
|
|
LD A, H
|
|
AND L
|
|
INC A
|
|
JP Z, MB_NTMDCN
|
|
LD (MB_OLDLIN), HL
|
|
EX DE, HL
|
|
LD (MB_OLDTXT), HL
|
|
MB_NTMDCN:
|
|
LD HL, (MB_ONELIN)
|
|
LD A, H
|
|
OR L
|
|
EX DE, HL
|
|
LD HL, MB_ONEFLG
|
|
JP Z, MB_NOTRAP
|
|
AND (HL)
|
|
JP NZ, MB_NOTRAP
|
|
DEC (HL)
|
|
EX DE, HL
|
|
JP MB_GONE4
|
|
MB_NOTRAP:
|
|
XOR A
|
|
LD (HL), A
|
|
LD E, C
|
|
LD (MB_CNTOFL), A
|
|
CALL MB_CRDONZ
|
|
LD HL, MB_ERRTAB
|
|
LD A, E
|
|
CP LSTERR ;IS IT PAST LAST ERROR?
|
|
JP NC, MB_UPERR
|
|
CP DSKERR+1
|
|
JP NC, MB_NTDER2
|
|
CP NONDSK+1
|
|
JP C, MB_NTDERR
|
|
MB_UPERR:
|
|
LD A, 0x28 ; ERRUE+DSKERR-NONDSK
|
|
MB_NTDER2:
|
|
SUB 0x13 ; DSKERR-NONDSK FIX OFFSET INTO TABLE OF MESSAGES
|
|
LD E, A
|
|
MB_NTDERR:
|
|
CALL MB_REM
|
|
INC HL
|
|
DEC E
|
|
JP NZ, MB_NTDERR
|
|
PUSH HL
|
|
LD HL, (MB_ERRLIN)
|
|
EX (SP), HL
|
|
MB_ERRFIN:
|
|
LD A, (HL) ; "NEXT without FOR\0Syntax error"
|
|
; "EXT without FOR\0Syntax error"
|
|
; "Break"
|
|
CP '?'
|
|
JP NZ, MB_ERRFN1
|
|
POP HL
|
|
LD HL, MB_ERRTAB
|
|
JP MB_UPERR
|
|
MB_ERRFN1:
|
|
CALL MB_STROUT
|
|
POP HL
|
|
LD DE, 0xfffe
|
|
CALL MB_DCOMPR
|
|
CALL Z, MB_CRDO
|
|
JP Z, MB_SYSTME
|
|
LD A, H
|
|
AND L
|
|
INC A
|
|
CALL NZ, MB_INPRT ;PRINT LINE NUMBER IN [H, L]
|
|
|
|
;NOW FALL INTO MAIN INTERPRETER LOOP
|
|
DB 3Eh
|
|
|
|
MB_STPRDY:
|
|
POP BC
|
|
MB_READY:
|
|
CALL MB_FINLPT
|
|
XOR A
|
|
LD (MB_CNTOFL), A
|
|
CALL MB_PRGFIN
|
|
CALL MB_CRDONZ
|
|
LD HL, MB_OKTXT ;= "OK\r\n"
|
|
|
|
;ERRORS IN CP/M INITIALIZATION, RETURN TO CP/M
|
|
MB_REPINI:
|
|
CALL WARM_BOOT
|
|
LD A, (MB_ERRFLG)
|
|
SUB ERRSN
|
|
CALL Z, MB_ERREDT
|
|
MB_MAIN:
|
|
LD HL, 65535
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
LD A, (MB_AUTFLG)
|
|
OR A
|
|
JP Z, MB_NTAUTO
|
|
LD HL, (MB_AUTLIN)
|
|
PUSH HL
|
|
CALL MB_LINPTR
|
|
POP DE
|
|
PUSH DE
|
|
CALL MB_FNDLIN
|
|
LD A, '*'
|
|
JP C, MB_AUTELN
|
|
LD A, ASCII_SP
|
|
MB_AUTELN:
|
|
CALL MB_OUTDO
|
|
CALL MB_INLIN
|
|
POP DE
|
|
JP NC, MB_AUTGOD
|
|
XOR A
|
|
LD (MB_AUTFLG), A
|
|
JP MB_READY
|
|
MB_AUTRES:
|
|
XOR A
|
|
LD (MB_AUTFLG), A
|
|
JP MB_AUTSTR
|
|
MB_AUTGOD:
|
|
LD HL, (MB_AUTINC)
|
|
ADD HL, DE
|
|
JP C, MB_AUTRES
|
|
PUSH DE
|
|
LD DE, 65529 ;CHECK FOR LINE # TOO BIG
|
|
CALL MB_DCOMPR
|
|
POP DE
|
|
JP NC, MB_AUTRES
|
|
LD (MB_AUTLIN), HL
|
|
MB_AUTSTR:
|
|
LD A, (MB_BUF)
|
|
OR A
|
|
JP Z, MB_MAIN
|
|
JP MB_EDITRT
|
|
MB_NTAUTO:
|
|
CALL MB_INLIN
|
|
JP C, MB_MAIN
|
|
CALL MB_CHRGTR
|
|
INC A
|
|
DEC A
|
|
JP Z, MB_MAIN
|
|
PUSH AF
|
|
CALL MB_LINGET
|
|
CALL MB_BAKSP
|
|
LD A, (HL)
|
|
CP 0x20
|
|
CALL Z, MB_INXHRT
|
|
|
|
MB_EDENT:
|
|
PUSH DE
|
|
CALL MB_CRUNCH
|
|
POP DE
|
|
POP AF
|
|
LD (MB_SAVTXT), HL
|
|
JP NC, MB_DIRDO
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_PROCHK
|
|
CALL MB_CHRGTR
|
|
OR A
|
|
PUSH AF
|
|
EX DE, HL
|
|
LD (MB_DOT), HL
|
|
EX DE, HL
|
|
CALL MB_FNDLIN
|
|
JP C, MB_LEXIST
|
|
POP AF
|
|
PUSH AF
|
|
JP Z, MB_USERR
|
|
OR A
|
|
|
|
MB_LEXIST:
|
|
|
|
PUSH BC
|
|
PUSH AF
|
|
PUSH HL
|
|
CALL MB_DEPTR
|
|
POP HL
|
|
POP AF
|
|
POP BC
|
|
PUSH BC
|
|
CALL C, MB_DEL
|
|
|
|
;MB_NO_DEL:
|
|
POP DE
|
|
POP AF
|
|
PUSH DE
|
|
JP Z,MB_FINI
|
|
POP DE
|
|
LD A,(MB_CHNFLG)
|
|
OR A
|
|
JP NZ,MB_LEVFRE
|
|
LD HL,(MB_MEMSIZ)
|
|
LD (MB_FRETOP),HL
|
|
|
|
|
|
MB_LEVFRE:
|
|
|
|
LD HL, (MB_VARTAB)
|
|
EX (SP), HL
|
|
POP BC
|
|
PUSH HL
|
|
ADD HL, BC
|
|
PUSH HL
|
|
CALL MB_BLTU
|
|
POP HL
|
|
LD (MB_VARTAB), HL
|
|
EX DE, HL
|
|
LD (HL), H
|
|
POP BC
|
|
POP DE
|
|
PUSH HL
|
|
INC HL
|
|
INC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
INC HL
|
|
LD DE, MB_KBUF
|
|
DEC BC
|
|
DEC BC
|
|
DEC BC
|
|
DEC BC
|
|
|
|
|
|
MB_MLOOPR:
|
|
LD A, (DE)
|
|
LD (HL), A
|
|
INC HL
|
|
INC DE
|
|
DEC BC
|
|
LD A, C
|
|
OR B
|
|
JP NZ, MB_MLOOPR
|
|
|
|
MB_FINI:
|
|
POP DE
|
|
CALL MB_CHEAD
|
|
LD HL, DMA_BUFFER
|
|
LD (HL), 0x0
|
|
LD (MB_FILPTR), HL
|
|
LD HL, (MB_PTRFIL)
|
|
LD (MB_TEMP2), HL
|
|
CALL MB_RUNC
|
|
LD HL, (MB_FILPT1)
|
|
LD (MB_FILPTR),HL
|
|
LD HL, (MB_TEMP2)
|
|
LD (MB_PTRFIL), HL
|
|
JP MB_MAIN
|
|
|
|
; ===================================================
|
|
MB_LINKER:
|
|
LD HL, (MB_TXTTAB)
|
|
EX DE, HL
|
|
|
|
; ---------------------------------------------------
|
|
; MB_CHEAD GOES THROUGH PROGRAM STORAGE AND FIXES
|
|
; UP ALL THE LINKS. THE END OF EACH
|
|
; LINE IS FOUND BY SEARCHING FOR THE ZERO AT THE END.
|
|
; THE DOUBLE ZERO LINK IS USED TO DETECT THE END OF THE PROGRAM
|
|
; ---------------------------------------------------
|
|
MB_CHEAD:
|
|
LD H, D
|
|
LD L, E
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
RET Z
|
|
INC HL
|
|
INC HL
|
|
MB_CZLOOP:
|
|
INC HL
|
|
LD A, (HL)
|
|
MB_CZLOO2:
|
|
OR A
|
|
JP Z, MB_CZLIN
|
|
CP ASCII_SP
|
|
JP NC, MB_CZLOOP
|
|
CP 11
|
|
JP C, MB_CZLOOP
|
|
CALL MB_CHRGT2
|
|
CALL MB_CHRGTR
|
|
JP MB_CZLOO2
|
|
|
|
MB_CZLIN:
|
|
INC HL
|
|
EX DE, HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
JP MB_CHEAD
|
|
|
|
; ===================================================
|
|
MB_SCNLIN:
|
|
LD DE, 0x0
|
|
PUSH DE
|
|
JP Z, MB_ALLLST
|
|
POP DE
|
|
CALL MB_LINSPC
|
|
PUSH DE
|
|
JP Z, MB_SNGLIN
|
|
CALL MB_SYNCHR
|
|
DB MINUTK
|
|
|
|
MB_ALLLST:
|
|
LD DE, 65530
|
|
CALL NZ, MB_LINSPC
|
|
JP NZ, MB_SNERR
|
|
MB_SNGLIN:
|
|
EX DE, HL
|
|
POP DE
|
|
MB_FNDLN1:
|
|
EX (SP), HL
|
|
PUSH HL
|
|
|
|
|
|
; ===================================================
|
|
MB_FNDLIN:
|
|
LD HL, (MB_TXTTAB) ;MB_TXTTAB
|
|
MB_FL_LOOP:
|
|
LD B, H
|
|
LD C, L
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
DEC HL
|
|
RET Z
|
|
INC HL
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
CALL MB_DCOMPR
|
|
LD H, B
|
|
LD L, C
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
CCF
|
|
RET Z
|
|
CCF
|
|
RET NC
|
|
JP MB_FL_LOOP
|
|
|
|
; --------------------------------------------------
|
|
; FAST CRUNCH - COMPACTIFICATION
|
|
; --------------------------------------------------
|
|
MB_CRUNCH:
|
|
XOR A
|
|
LD (MB_DORES), A
|
|
LD (MB_OPRTYP), A
|
|
LD BC, KBFLEN - 3 ; Get length of krunch buffer
|
|
LD DE, MB_KBUF
|
|
MB_K_LOOP:
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_CR_EMP
|
|
MB_CRDONE:
|
|
LD HL, KBFLEN + 2
|
|
LD A, L
|
|
SUB C
|
|
LD C, A
|
|
LD A, H
|
|
SBC A, B
|
|
LD B, A
|
|
LD HL, MB_RST_INP ;= ':'
|
|
XOR A
|
|
LD (DE), A
|
|
INC DE
|
|
LD (DE), A
|
|
INC DE
|
|
LD (DE), A
|
|
RET
|
|
|
|
MB_CR_EMP:
|
|
CP '"'
|
|
JP Z, MB_STRNG
|
|
CP ASCII_SP
|
|
JP Z, MB_STUFFH
|
|
LD A, (MB_OPRTYP)
|
|
OR A
|
|
LD A, (HL)
|
|
JP Z, MB_CHK_Q
|
|
|
|
; --------------------------------------------------
|
|
MB_STUFFH:
|
|
INC HL
|
|
PUSH AF
|
|
CALL MB_KRNSAV
|
|
POP AF
|
|
SUB ':'
|
|
JP Z, MB_COLIS
|
|
CP _DATA - ':'
|
|
JP NZ, MB_NODATT
|
|
LD A, 0x1
|
|
MB_COLIS:
|
|
LD (MB_OPRTYP), A
|
|
LD (MB_DORES), A
|
|
MB_NODATT:
|
|
SUB 'U'
|
|
JP NZ, MB_K_LOOP
|
|
PUSH AF
|
|
MB_STR1:
|
|
LD A, (HL)
|
|
OR A
|
|
EX (SP), HL
|
|
LD A, H
|
|
POP HL
|
|
JP Z, MB_CRDONE
|
|
CP (HL)
|
|
JP Z, MB_STUFFH
|
|
MB_STRNG:
|
|
PUSH AF
|
|
LD A, (HL)
|
|
MB_STRNG2:
|
|
INC HL
|
|
CALL MB_KRNSAV
|
|
JP MB_STR1
|
|
MB_CHK_Q:
|
|
CP '?'
|
|
LD A, _PRINT
|
|
PUSH DE
|
|
PUSH BC
|
|
JP Z, MB_NOTFN2
|
|
LD DE, MB_SPCTAB ;= ABh
|
|
CALL MB_MAKUPL
|
|
CALL MB_ISLET2
|
|
JP C, MB_TSTNUM
|
|
PUSH HL
|
|
LD DE, MB_ST_GO ;= "GO "
|
|
CALL MB_SUB_ADR
|
|
JP NZ, MB_NOTGOS
|
|
CALL MB_CHRGTR
|
|
|
|
LD DE, MB_ST_TO
|
|
CALL MB_SUB_ADR
|
|
LD A, _GOTO
|
|
JP Z, MB_DO_GTOSUB
|
|
LD DE, MB_ST_UB
|
|
CALL MB_SUB_ADR
|
|
JP NZ, MB_NOTGOS
|
|
MB_DO_GTOSUB:
|
|
LD A, _GOSUB
|
|
POP BC
|
|
JP MB_NOTFN2
|
|
|
|
MB_SUB_ADR:
|
|
LD A, (DE)
|
|
OR A
|
|
RET Z
|
|
LD C, A
|
|
CALL MB_MAKUPL
|
|
CP C
|
|
RET NZ
|
|
INC HL
|
|
INC DE
|
|
JP MB_SUB_ADR
|
|
|
|
MB_ST_GO:
|
|
DB "GO ", 0
|
|
|
|
MB_ST_TO:
|
|
DB "TO", 0
|
|
|
|
MB_ST_UB:
|
|
DB "UB", 0
|
|
|
|
MB_NOTGOS:
|
|
POP HL
|
|
CALL MB_MAKUPL
|
|
PUSH HL
|
|
LD HL, MB_ALPTAB ;= 219h
|
|
SUB 'A'
|
|
ADD A, A
|
|
LD C, A
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
POP HL
|
|
INC HL
|
|
|
|
MB_TRYAGA:
|
|
PUSH HL
|
|
|
|
MB_LOPPSI:
|
|
CALL MB_MAKUPL
|
|
LD C, A
|
|
LD A, (DE)
|
|
AND 0x7f
|
|
JP Z, MB_NOTRES
|
|
INC HL
|
|
CP C
|
|
JP NZ, MB_LOPSKP
|
|
LD A, (DE)
|
|
INC DE
|
|
OR A
|
|
JP P, MB_LOPPSI
|
|
LD A, C
|
|
CP '('
|
|
JP Z, MB_ISRESW
|
|
LD A, (DE)
|
|
CP FNTK
|
|
JP Z, MB_ISRESW
|
|
CP USRTK
|
|
JP Z, MB_ISRESW ; ToDo: ref to BYTE_ram_03fd here looks like error!
|
|
CALL MB_MAKUPL
|
|
CP '.'
|
|
JP Z, MB_ISVARS
|
|
CALL MB_TSTANM
|
|
|
|
MB_ISVARS:
|
|
LD A, 0
|
|
JP NC, MB_NOTRES
|
|
|
|
; --------------------------------------------------
|
|
; Is reserver word
|
|
; --------------------------------------------------
|
|
MB_ISRESW:
|
|
POP AF
|
|
LD A, (DE)
|
|
OR A
|
|
JP M, MB_NOTFNT ; IF MINUS, WASNT FUNCTION TOKEN
|
|
POP BC
|
|
POP DE
|
|
OR 0x80
|
|
PUSH AF
|
|
LD A, 0xff
|
|
CALL MB_KRNSAV
|
|
XOR A
|
|
LD (MB_DORES), A
|
|
POP AF
|
|
CALL MB_KRNSAV
|
|
JP MB_K_LOOP
|
|
|
|
MB_LOPSKP:
|
|
POP HL
|
|
MB_LOPSK2:
|
|
LD A, (DE)
|
|
INC DE
|
|
OR A
|
|
JP P, MB_LOPSK2
|
|
INC DE
|
|
JP MB_TRYAGA
|
|
|
|
MB_NOTFNT:
|
|
DEC HL
|
|
MB_NOTFN2:
|
|
PUSH AF
|
|
LD DE, MB_ACPT_TOK ; = 8Ch
|
|
LD C, A
|
|
MB_NX_TK:
|
|
LD A, (DE)
|
|
OR A
|
|
JP Z, MB_TK_END
|
|
INC DE
|
|
CP C
|
|
JP NZ, MB_NX_TK
|
|
JP MB_NOTRS2
|
|
|
|
MB_ACPT_TOK:
|
|
db _RESTORE
|
|
db _AUTO
|
|
db _RENUM
|
|
db _DELETE
|
|
db _EDIT
|
|
db _RESUME
|
|
db _ERL
|
|
db _ELSE
|
|
db _RUN
|
|
db _LIST
|
|
db _LLIST
|
|
db _GOTO
|
|
db _THEN
|
|
db _GOSUB
|
|
db 0
|
|
|
|
MB_TK_END:
|
|
XOR A
|
|
db 0xC2 ; JP NZ, 0x013E
|
|
|
|
MB_NOTRS2:
|
|
LD A, 0x1 ; SAY LINE #'S ALLOWED
|
|
|
|
MB_NOTRS6:
|
|
LD (MB_DORES), A
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
CP _ELSE
|
|
PUSH AF
|
|
|
|
CALL Z, MB_KRNSVC
|
|
POP AF
|
|
CP _WHILE
|
|
JP NZ, MB_NOWLE
|
|
|
|
CALL MB_KRNSAV
|
|
LD A, PLUSTK
|
|
|
|
MB_NOWLE:
|
|
CP SNGQTK
|
|
JP NZ, MB_NTSNGT
|
|
PUSH AF
|
|
CALL MB_KRNSVC
|
|
LD A, _REM
|
|
CALL MB_KRNSAV
|
|
POP AF
|
|
PUSH AF
|
|
JP MB_STRNG2
|
|
|
|
MB_TSTNUM:
|
|
LD A, (HL)
|
|
CP '.'
|
|
JP Z, MB_NUMTRY
|
|
CP '9' + 1
|
|
JP NC, MB_SRCSPC
|
|
CP '0'
|
|
JP C, MB_SRCSPC
|
|
|
|
MB_NUMTRY:
|
|
LD A, (MB_DORES)
|
|
OR A
|
|
LD A, (HL)
|
|
POP BC
|
|
POP DE
|
|
JP M, MB_STUFFH
|
|
JP Z, MB_FLTGET
|
|
CP '.'
|
|
JP Z, MB_STUFFH
|
|
LD A, 0x0E
|
|
CALL MB_KRNSAV
|
|
PUSH DE
|
|
CALL MB_LINGET
|
|
CALL MB_BAKSP
|
|
|
|
MB_SAVINT:
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
MB_SAVI:
|
|
LD A, L
|
|
CALL MB_KRNSAV
|
|
LD A, H
|
|
|
|
MB_POPSTF:
|
|
POP HL
|
|
CALL MB_KRNSAV
|
|
JP MB_K_LOOP
|
|
|
|
MB_FLTGET:
|
|
PUSH DE
|
|
PUSH BC
|
|
LD A, (HL)
|
|
CALL MB_FIN
|
|
CALL MB_BAKSP
|
|
POP BC
|
|
POP DE
|
|
PUSH HL
|
|
LD A, (MB_VALTYP)
|
|
CP 0x2
|
|
JP NZ, MB_NTINTG
|
|
LD HL, (MB_FACLO)
|
|
LD A, H
|
|
OR A
|
|
LD A, 0x2
|
|
JP NZ, MB_NTINTG
|
|
LD A, L
|
|
LD H, L
|
|
LD L, IN2CON
|
|
CP 10
|
|
JP NC, MB_SAVI
|
|
ADD A, ONECON
|
|
JP MB_POPSTF
|
|
MB_NTINTG:
|
|
PUSH AF
|
|
RRCA
|
|
ADD A, INTCON-1
|
|
CALL MB_KRNSAV
|
|
LD HL, MB_FACLO
|
|
CALL MB_GETYPR
|
|
JP C, MB_NTDBL
|
|
LD HL, MB_DFACLO
|
|
MB_NTDBL:
|
|
POP AF
|
|
MB_MOVCON:
|
|
PUSH AF
|
|
LD A, (HL)
|
|
CALL MB_KRNSAV
|
|
POP AF
|
|
INC HL
|
|
DEC A
|
|
JP NZ, MB_MOVCON
|
|
POP HL
|
|
JP MB_K_LOOP
|
|
MB_SRCSPC:
|
|
LD DE, MB_ZTAB ;SPCTAB-1
|
|
MB_SRCSP2:
|
|
INC DE
|
|
LD A, (DE) ;= ABh
|
|
AND 0x7f
|
|
JP Z, MB_NOTRS5
|
|
INC DE
|
|
CP (HL)
|
|
LD A, (DE) ;= F2h
|
|
JP NZ, MB_SRCSP2
|
|
JP MB_NOTRS1
|
|
|
|
MB_NTSNGT:
|
|
CP '&' ; Octal const?
|
|
JP NZ, MB_STUFFH
|
|
PUSH HL
|
|
CALL MB_CHRGTR
|
|
POP HL
|
|
CALL MB_MAKUPS
|
|
CP 'H'
|
|
LD A, OCTCON
|
|
JP NZ, MB_WUZOCT
|
|
LD A, HEXCON
|
|
MB_WUZOCT:
|
|
CALL MB_KRNSAV
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_OCTCNS
|
|
POP BC
|
|
JP MB_SAVINT
|
|
|
|
MB_KRNSVC:
|
|
LD A, ':'
|
|
MB_KRNSAV:
|
|
LD (DE), A
|
|
INC DE
|
|
DEC BC
|
|
LD A, C
|
|
OR B
|
|
RET NZ
|
|
MB_LBOERR:
|
|
LD E, ERRLBO
|
|
JP MB_ERROR
|
|
MB_NOTRES:
|
|
POP HL
|
|
DEC HL
|
|
DEC A
|
|
LD (MB_DORES), A
|
|
POP BC
|
|
POP DE
|
|
CALL MB_MAKUPL
|
|
MB_KRNVAR:
|
|
CALL MB_KRNSAV
|
|
INC HL
|
|
CALL MB_MAKUPL
|
|
CALL MB_ISLET2
|
|
JP NC, MB_KRNVAR
|
|
CP ':'
|
|
JP NC, MB_JKLOOP
|
|
CP '0'
|
|
JP NC, MB_KRNVAR
|
|
CP '.'
|
|
JP Z, MB_KRNVAR
|
|
MB_JKLOOP:
|
|
JP MB_K_LOOP
|
|
MB_NOTRS5:
|
|
LD A, (HL)
|
|
CP ASCII_SP
|
|
JP NC, MB_NOTRS1
|
|
CP ASCII_TAB
|
|
JP Z, MB_NOTRS1
|
|
CP ASCII_LF
|
|
JP Z, MB_NOTRS1
|
|
LD A, ASCII_SP
|
|
MB_NOTRS1:
|
|
PUSH AF
|
|
LD A, (MB_DORES)
|
|
INC A
|
|
JP Z, MB_JNTRS6
|
|
DEC A
|
|
MB_JNTRS6:
|
|
JP MB_NOTRS6
|
|
MB_BAKSP:
|
|
DEC HL
|
|
LD A, (HL)
|
|
CP ASCII_SP
|
|
JP Z, MB_BAKSP
|
|
CP ASCII_TAB
|
|
JP Z, MB_BAKSP
|
|
CP ASCII_LF
|
|
JP Z, MB_BAKSP
|
|
INC HL
|
|
RET
|
|
|
|
; ===================================================
|
|
; "FOR" STATEMENT
|
|
; ===================================================
|
|
MB_FOR:
|
|
LD A, 100
|
|
LD (MB_SUBFLG), A
|
|
CALL MB_PTRGET
|
|
CALL MB_SYNCHR
|
|
DB EQULTK
|
|
PUSH DE
|
|
EX DE, HL
|
|
LD (MB_TEMP), HL
|
|
EX DE, HL
|
|
LD A, (MB_VALTYP)
|
|
PUSH AF
|
|
CALL MB_FRMEVL
|
|
POP AF
|
|
PUSH HL
|
|
CALL MB_DOCNVF
|
|
LD HL, MB_FVALSV
|
|
CALL MB_MOVMF
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
PUSH HL
|
|
CALL MB_DATAS
|
|
LD (MB_ENDFOR), HL
|
|
LD HL, 0x2
|
|
ADD HL, SP
|
|
MB_LPFORM:
|
|
CALL MB_LOOPER
|
|
JP NZ, MB_NOTOL
|
|
ADD HL, BC
|
|
PUSH DE
|
|
DEC HL
|
|
LD D, (HL)
|
|
DEC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
INC HL
|
|
PUSH HL
|
|
LD HL, (MB_ENDFOR)
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
POP DE
|
|
JP NZ, MB_LPFORM
|
|
POP DE
|
|
LD SP, HL
|
|
LD (MB_SAVSTK), HL
|
|
DB 0Eh
|
|
MB_NOTOL:
|
|
POP DE
|
|
EX DE, HL
|
|
LD C, 0x8
|
|
CALL MB_GETSTK
|
|
PUSH HL
|
|
LD HL, (MB_ENDFOR)
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
EX (SP), HL
|
|
CALL MB_SYNCHR
|
|
DB _TO
|
|
CALL MB_GETYPR
|
|
JP Z, MB_TMERR
|
|
JP NC, MB_TMERR
|
|
PUSH AF
|
|
CALL MB_FRMEVL
|
|
POP AF
|
|
PUSH HL
|
|
JP P, MB_SNGFOR
|
|
CALL MB_FRCINT
|
|
EX (SP), HL
|
|
LD DE, 0x1
|
|
LD A, (HL)
|
|
CP STEPTK
|
|
CALL Z, MB_GETINT
|
|
PUSH DE
|
|
PUSH HL
|
|
EX DE, HL
|
|
CALL MB_ISIGN
|
|
JP MB_STPSGN
|
|
MB_SNGFOR:
|
|
CALL MB_FRCSNG
|
|
CALL MB_MOVRF
|
|
POP HL
|
|
PUSH BC
|
|
PUSH DE
|
|
LD BC, 0x8100
|
|
LD D, C
|
|
LD E, D
|
|
LD A, (HL)
|
|
CP STEPTK
|
|
LD A, 0x1
|
|
JP NZ, MB_ONEON
|
|
CALL MB_FRMCHK
|
|
PUSH HL
|
|
CALL MB_FRCSNG
|
|
CALL MB_MOVRF
|
|
CALL MB_SIGN
|
|
MB_STPSGN:
|
|
POP HL
|
|
MB_ONEON:
|
|
PUSH BC
|
|
PUSH DE
|
|
LD C, A
|
|
CALL MB_GETYPR
|
|
LD B, A
|
|
PUSH BC
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP NZ, MB_SNERR
|
|
CALL MB_NXTSCN
|
|
CALL MB_CHRGTR
|
|
PUSH HL
|
|
PUSH HL
|
|
LD HL, (MB_NXTLIN)
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
LD HL, (MB_TEMP)
|
|
EX (SP), HL
|
|
LD B, _FOR
|
|
PUSH BC
|
|
INC SP
|
|
PUSH AF
|
|
PUSH AF
|
|
JP MB_NEXTS
|
|
MB_NXTCON:
|
|
LD B, _FOR
|
|
PUSH BC
|
|
INC SP
|
|
|
|
; ===================================================
|
|
; NEW STATEMENT FETCHER
|
|
; ===================================================
|
|
MB_NEWSTT:
|
|
PUSH HL
|
|
|
|
MB_CONST2:
|
|
CTC_ADDR2 EQU $+1
|
|
CALL WARM_BOOT
|
|
POP HL
|
|
OR A
|
|
CALL NZ, MB_CNTCCN
|
|
LD (MB_SAVTXT), HL
|
|
EX DE, HL
|
|
LD HL, 0x0
|
|
ADD HL, SP
|
|
LD (MB_SAVSTK), HL
|
|
EX DE, HL
|
|
LD A, (HL)
|
|
CP ':'
|
|
JP Z, MB_GONE
|
|
OR A
|
|
JP NZ, MB_SNERR
|
|
INC HL
|
|
MB_GONE4:
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
JP Z, MB_PRGEND
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
LD A, (MB_TRCFLG)
|
|
OR A
|
|
JP Z, MB_NOTTRC
|
|
PUSH DE
|
|
LD A, '['
|
|
CALL MB_OUTDO
|
|
CALL MB_LINPTR
|
|
LD A, ']'
|
|
CALL MB_OUTDO
|
|
POP DE
|
|
|
|
MB_NOTTRC:
|
|
EX DE, HL
|
|
|
|
MB_GONE:
|
|
CALL MB_CHRGTR
|
|
LD DE, MB_NEWSTT
|
|
PUSH DE
|
|
MB_GONE3:
|
|
RET Z
|
|
|
|
MB_GONE2:
|
|
; ; OK240 Mod
|
|
; NOP
|
|
; NOP
|
|
; JP MB_OK240_EXT
|
|
|
|
SUB _END
|
|
JP C, MB_LET
|
|
CP NUMCMD
|
|
JP NC, MB_ISMID
|
|
RLCA
|
|
LD C, A
|
|
LD B, 0
|
|
EX DE, HL
|
|
LD HL, MB_STMDSP
|
|
ADD HL, BC
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
PUSH BC
|
|
EX DE, HL
|
|
|
|
; ===================================================
|
|
; CHRGET - THE NEXT CHARACTER SCAN ROUTINE
|
|
; ===================================================
|
|
MB_CHRGTR:
|
|
INC HL
|
|
|
|
MB_CHRGT2:
|
|
LD A, (HL)
|
|
CP ':'
|
|
RET NC
|
|
|
|
; ===================================================
|
|
; CHRCON IS THE CONTINUATION OF THE CHRGET RST
|
|
; ===================================================
|
|
MB_CHRCON:
|
|
CP ASCII_SP
|
|
JP Z, MB_CHRGTR
|
|
JP NC, MB_NOTLFT
|
|
OR A
|
|
RET Z
|
|
CP OCTCON
|
|
JP C, MB_NOTCON
|
|
CP CONCON
|
|
JP NZ, MB_NTRSCC
|
|
LD A, (MB_CONSAV)
|
|
OR A
|
|
RET
|
|
|
|
MB_NTRSCC:
|
|
CP CONCN2
|
|
JP Z, MB_NTRSC2
|
|
PUSH AF
|
|
INC HL
|
|
LD (MB_CONSAV), A
|
|
SUB INTCON
|
|
JP NC, MB_MAKTKN
|
|
SUB 0xf5 ; (ONECON-INTCON) & ^O377
|
|
JP NC, MB_ONEI
|
|
CP 0xfe ; IN2CON-ONECON
|
|
JP NZ, MB_FRCINC
|
|
LD A, (HL)
|
|
INC HL
|
|
|
|
MB_ONEI:
|
|
LD (MB_CONTXT), HL
|
|
LD H, 0x0
|
|
|
|
MB_ONEI2:
|
|
LD L, A
|
|
LD (MB_CONLO), HL
|
|
LD A, 0x2
|
|
LD (MB_CONTYP), A
|
|
LD HL, MB_NUMCON ;= 1Eh
|
|
POP AF
|
|
OR A
|
|
RET
|
|
|
|
MB_FRCINC:
|
|
LD A, (HL)
|
|
INC HL
|
|
INC HL
|
|
LD (MB_CONTXT), HL
|
|
DEC HL
|
|
LD H, (HL)
|
|
JP MB_ONEI2
|
|
|
|
MB_RETOKN:
|
|
CALL MB_CONFAC
|
|
|
|
MB_NTRSC2:
|
|
LD HL, (MB_CONTXT)
|
|
JP MB_CHRGT2
|
|
MB_MAKTKN:
|
|
INC A
|
|
RLCA
|
|
LD (MB_CONTYP), A
|
|
PUSH DE
|
|
PUSH BC
|
|
LD DE, MB_CONLO
|
|
EX DE, HL
|
|
LD B, A
|
|
CALL MB_MOVE1
|
|
EX DE, HL
|
|
POP BC
|
|
POP DE
|
|
LD (MB_CONTXT), HL
|
|
POP AF
|
|
LD HL, MB_NUMCON ;= 1Eh
|
|
OR A
|
|
RET
|
|
|
|
MB_NOTCON:
|
|
CP ASCII_TAB
|
|
JP NC, MB_CHRGTR
|
|
|
|
MB_NOTLFT:
|
|
CP '0'
|
|
CCF
|
|
INC A
|
|
DEC A
|
|
RET
|
|
|
|
MB_NUMCON:
|
|
DB CONCON
|
|
DB CONCN2
|
|
|
|
; ===================================================
|
|
MB_CONFAC:
|
|
LD A, (MB_CONSAV)
|
|
CP 0xf
|
|
JP NC, MB_NTLINE
|
|
CP 0xd
|
|
JP C, MB_NTLINE
|
|
LD HL, (MB_CONLO)
|
|
JP NZ, MB_FLTLIN
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
MB_FLTLIN:
|
|
JP MB_INEG2
|
|
|
|
MB_NTLINE:
|
|
LD A, (MB_CONTYP)
|
|
LD (MB_VALTYP), A
|
|
CP 0x8
|
|
JP Z, MB_CONFDB
|
|
LD HL, (MB_CONLO)
|
|
LD (MB_FACLO), HL
|
|
LD HL, (MB_CONLO + 2)
|
|
LD (MB_FAC - 1), HL
|
|
RET
|
|
|
|
MB_CONFDB:
|
|
LD HL, MB_CONLO
|
|
JP MB_VMOVFM
|
|
|
|
; ===================================================
|
|
; DEFSTR, DEFINT, DEFSNG, DEFDBL, INTIDX
|
|
; ===================================================
|
|
MB_DEFSTR:
|
|
LD E, 0x3 ; DEFAULT SOME LETTERS TO STRING
|
|
DB 1
|
|
MB_DEFINT:
|
|
LD E, 0x2
|
|
DB 1
|
|
MB_DEFREA:
|
|
LD E, 0x4
|
|
DB 1
|
|
MB_DEFDBL:
|
|
LD E, 0x8
|
|
MB_DEFCON:
|
|
CALL MB_ISLET
|
|
LD BC, MB_SNERR
|
|
PUSH BC
|
|
RET C
|
|
|
|
SUB 'A'
|
|
LD C, A
|
|
LD B, A
|
|
CALL MB_CHRGTR
|
|
CP MINUTK
|
|
JP NZ, MB_NOTRNG
|
|
CALL MB_CHRGTR
|
|
CALL MB_ISLET
|
|
RET C
|
|
SUB 'A'
|
|
LD B, A
|
|
CALL MB_CHRGTR
|
|
|
|
MB_NOTRNG:
|
|
LD A, B
|
|
SUB C
|
|
RET C
|
|
|
|
INC A
|
|
EX (SP), HL
|
|
LD HL, MB_DEFTBL
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
MB_LPDCHG:
|
|
LD (HL), E
|
|
INC HL
|
|
DEC A
|
|
JP NZ, MB_LPDCHG
|
|
POP HL
|
|
LD A, (HL)
|
|
CP ','
|
|
RET NZ
|
|
CALL MB_CHRGTR
|
|
JP MB_DEFCON
|
|
|
|
; --------------------------------------------------
|
|
; READS A FORMULA FROM THE CURRENT POSITION AND
|
|
; TURNS IT INTO A POSITIVE INTEGER
|
|
; LEAVING THE RESULT IN [DE]. NEGATIVE ARGUMENTS
|
|
; ARE NOT ALLOWED. [HL] POINTS TO THE TERMINATING
|
|
; CHARACTER OF THE FORMULA ON RETURN.
|
|
; --------------------------------------------------
|
|
|
|
MB_INTIDX:
|
|
CALL MB_CHRGTR
|
|
|
|
MB_INTIDX2:
|
|
CALL MB_GETIN2
|
|
RET P
|
|
|
|
; ===================================================
|
|
MB_FCERR:
|
|
LD E, ERRFC
|
|
JP MB_ERROR
|
|
MB_LINSPC:
|
|
LD A, (HL)
|
|
CP '.'
|
|
EX DE, HL
|
|
LD HL, (MB_DOT)
|
|
EX DE, HL
|
|
JP Z, MB_CHRGTR
|
|
|
|
; ===================================================
|
|
MB_LINGET:
|
|
DEC HL
|
|
MB_LINGT2:
|
|
CALL MB_CHRGTR
|
|
CP LINCON
|
|
JP Z, MB_LINGT3
|
|
CP PTRCON
|
|
|
|
; ===================================================
|
|
MB_LINGT3:
|
|
EX DE, HL
|
|
LD HL, (MB_CONLO)
|
|
EX DE, HL
|
|
JP Z, MB_CHRGTR
|
|
XOR A
|
|
LD (MB_CONSAV), A
|
|
DEC HL
|
|
LD DE, 0x0
|
|
|
|
MB_MORLIN:
|
|
CALL MB_CHRGTR
|
|
RET NC
|
|
PUSH HL
|
|
PUSH AF
|
|
LD HL, 0x1998
|
|
CALL MB_DCOMPR
|
|
JP C, MB_POPHSR
|
|
LD H, D
|
|
LD L, E
|
|
ADD HL, DE
|
|
ADD HL, HL
|
|
ADD HL, DE
|
|
ADD HL, HL
|
|
POP AF
|
|
SUB '0'
|
|
LD E, A
|
|
LD D, 0x0
|
|
ADD HL, DE
|
|
EX DE, HL
|
|
POP HL
|
|
JP MB_MORLIN
|
|
MB_POPHSR:
|
|
POP AF
|
|
POP HL
|
|
RET
|
|
MB_RUN:
|
|
JP Z, MB_RUNC
|
|
CP LINCON
|
|
JP Z, MB_CONRUN
|
|
CP PTRCON
|
|
JP NZ, MB_LRUN
|
|
MB_CONRUN:
|
|
CALL MB_CLEARC
|
|
LD BC, MB_NEWSTT
|
|
JP MB_RUNC2
|
|
MB_GOSUB:
|
|
LD C, 3
|
|
CALL MB_GETSTK
|
|
CALL MB_LINGET
|
|
POP BC
|
|
PUSH HL
|
|
PUSH HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
EX (SP), HL
|
|
LD A, _GOSUB
|
|
PUSH AF
|
|
INC SP
|
|
PUSH BC
|
|
JP MB_GOTO2
|
|
MB_RUNC2:
|
|
PUSH BC
|
|
MB_GOTO:
|
|
CALL MB_LINGET
|
|
MB_GOTO2:
|
|
LD A, (MB_CONSAV)
|
|
CP PTRCON
|
|
EX DE, HL
|
|
RET Z
|
|
CP LINCON
|
|
JP NZ, MB_SNERR
|
|
EX DE, HL
|
|
PUSH HL
|
|
LD HL, (MB_CONTXT)
|
|
EX (SP), HL
|
|
CALL MB_REM
|
|
INC HL
|
|
PUSH HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
CALL C, MB_FL_LOOP
|
|
CALL NC, MB_FNDLIN
|
|
JP NC, MB_USERR
|
|
DEC BC
|
|
LD A, PTRCON
|
|
LD (MB_PTRFLG), A
|
|
POP HL
|
|
CALL MB_CONCH2
|
|
LD H, B
|
|
LD L, C
|
|
RET
|
|
MB_USERR:
|
|
LD E, ERRUS
|
|
JP MB_ERROR
|
|
MB_RETURN:
|
|
RET NZ
|
|
|
|
LD D, 255
|
|
CALL MB_FNDFOR
|
|
LD SP, HL
|
|
LD (MB_SAVSTK), HL
|
|
CP _GOSUB
|
|
LD E, ERRRG
|
|
JP NZ, MB_ERROR
|
|
POP HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
LD HL, MB_NEWSTT
|
|
EX (SP), HL
|
|
DB 3Eh
|
|
MB_DATAH:
|
|
POP HL
|
|
|
|
MB_DATAS:
|
|
DB 1
|
|
DB ':'
|
|
|
|
MB_REM:
|
|
LD C, 0x0
|
|
MB_REMZER:
|
|
LD B, 0x0
|
|
MB_EXCHQT:
|
|
LD A, C
|
|
LD C, B
|
|
LD B, A
|
|
MB_REMER:
|
|
DEC HL
|
|
MB_REMER1:
|
|
CALL MB_CHRGTR
|
|
OR A
|
|
RET Z
|
|
|
|
CP B
|
|
RET Z
|
|
|
|
INC HL
|
|
CP '"'
|
|
JP Z, MB_EXCHQT
|
|
INC A
|
|
JP Z, MB_REMER1
|
|
SUB _IF+1
|
|
JP NZ, MB_REMER
|
|
CP B
|
|
ADC A, D
|
|
LD D, A
|
|
JP MB_REMER
|
|
|
|
; ===================================================
|
|
; LET
|
|
; ===================================================
|
|
MB_LETCON:
|
|
POP AF
|
|
ADD A, 0x3
|
|
JP MB_LETCN2
|
|
|
|
MB_LET:
|
|
CALL MB_PTRGET
|
|
CALL MB_SYNCHR
|
|
DB EQULTK ; CHECK FOR "="
|
|
EX DE, HL ; MUST SET UP TEMP FOR "FOR"
|
|
LD (MB_TEMP), HL
|
|
EX DE, HL
|
|
PUSH DE
|
|
LD A, (MB_VALTYP)
|
|
PUSH AF
|
|
CALL MB_FRMEVL
|
|
POP AF
|
|
|
|
MB_LETCN2:
|
|
EX (SP), HL
|
|
|
|
MB_INPCOM:
|
|
LD B, A
|
|
LD A, (MB_VALTYP)
|
|
CP B
|
|
LD A, B
|
|
JP Z, MB_LETCN5
|
|
CALL MB_DOCNVF
|
|
MB_LETCN4:
|
|
LD A, (MB_VALTYP)
|
|
MB_LETCN5:
|
|
LD DE, MB_FACLO
|
|
CP 0x5
|
|
JP C, MB_LETCN6
|
|
LD DE, MB_DFACLO
|
|
MB_LETCN6:
|
|
PUSH HL
|
|
CP 0x3
|
|
JP NZ, MB_COPNUM
|
|
LD HL, (MB_FACLO)
|
|
PUSH HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_INBUFC
|
|
LD HL, (MB_STREND)
|
|
CALL MB_DCOMPR
|
|
POP DE
|
|
JP NC, MB_DNTCPY
|
|
LD HL, MB_DSCTMP
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_DNTCPY
|
|
DB 0x3E
|
|
MB_INBUFC:
|
|
POP DE
|
|
CALL MB_FRETMS
|
|
EX DE, HL
|
|
CALL MB_STRCPY
|
|
MB_DNTCPY:
|
|
CALL MB_FRETMS
|
|
EX (SP), HL
|
|
MB_COPNUM:
|
|
CALL MB_VMOVE
|
|
POP DE
|
|
POP HL
|
|
RET
|
|
|
|
; ===================================================
|
|
; ON..GOTO, ON ERROR GOTO CODE
|
|
; ===================================================
|
|
MB_ONGOTO:
|
|
CP _ERROR
|
|
JP NZ, MB_NTOERR
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB _GOTO
|
|
CALL MB_LINGET
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_RESTRP
|
|
CALL MB_FNDLN1
|
|
LD D, B
|
|
LD E, C
|
|
POP HL
|
|
JP NC, MB_USERR
|
|
MB_RESTRP:
|
|
EX DE, HL
|
|
LD (MB_ONELIN), HL
|
|
EX DE, HL
|
|
RET C
|
|
|
|
LD A, (MB_ONEFLG)
|
|
OR A
|
|
LD A, E
|
|
RET Z
|
|
|
|
LD A, (MB_ERRFLG)
|
|
LD E, A
|
|
JP MB_ERRESM
|
|
|
|
MB_NTOERR:
|
|
CALL MB_GETBYT
|
|
LD A, (HL)
|
|
LD B, A
|
|
CP _GOSUB
|
|
JP Z, MB_ISGOSU
|
|
CALL MB_SYNCHR
|
|
DB _GOTO
|
|
DEC HL
|
|
MB_ISGOSU:
|
|
LD C, E
|
|
MB_LOOPON:
|
|
DEC C
|
|
LD A, B
|
|
JP Z, MB_GONE2
|
|
CALL MB_LINGT2
|
|
CP ','
|
|
RET NZ
|
|
JP MB_LOOPON
|
|
MB_RESUME:
|
|
LD DE, MB_ONEFLG
|
|
LD A, (DE)
|
|
OR A
|
|
JP Z, MB_REERR
|
|
INC A
|
|
LD (MB_ERRFLG), A
|
|
LD (DE), A
|
|
LD A, (HL)
|
|
CP _NEXT
|
|
JP Z, MB_RESNXT
|
|
CALL MB_LINGET
|
|
RET NZ
|
|
|
|
LD A, D
|
|
OR E
|
|
JP NZ, MB_GOTO2
|
|
INC A
|
|
JP MB_RESTXT
|
|
MB_RESNXT:
|
|
CALL MB_CHRGTR
|
|
RET NZ
|
|
MB_RESTXT:
|
|
LD HL, (MB_ERRTXT)
|
|
EX DE, HL
|
|
LD HL, (MB_ERRLIN)
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
EX DE, HL
|
|
RET NZ
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_NOTBGL
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
MB_NOTBGL:
|
|
INC HL
|
|
JP MB_DATAS
|
|
MB_ERRORS:
|
|
CALL MB_GETBYT
|
|
RET NZ
|
|
OR A
|
|
JP Z, MB_FCERR
|
|
JP MB_ERROR
|
|
MB_AUTO:
|
|
LD DE, 10
|
|
PUSH DE
|
|
JP Z, MB_SNGAUT
|
|
CALL MB_LINSPC
|
|
EX DE, HL
|
|
EX (SP), HL
|
|
JP Z, MB_SNGAU1
|
|
EX DE, HL
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
EX DE, HL
|
|
LD HL, (MB_AUTINC)
|
|
EX DE, HL
|
|
JP Z, MB_SNGAUT
|
|
CALL MB_LINGET
|
|
JP NZ, MB_SNERR
|
|
MB_SNGAUT:
|
|
EX DE, HL
|
|
MB_SNGAU1:
|
|
LD A, H
|
|
OR L
|
|
JP Z, MB_FCERR
|
|
LD (MB_AUTINC), HL
|
|
LD (MB_AUTFLG), A
|
|
POP HL
|
|
LD (MB_AUTLIN), HL
|
|
POP BC
|
|
JP MB_MAIN
|
|
|
|
;IF ... THEN code
|
|
MB_IFS:
|
|
CALL MB_FRMEVL
|
|
LD A, (HL)
|
|
CP ','
|
|
CALL Z, MB_CHRGTR
|
|
CP _GOTO
|
|
JP Z, MB_OKGOTO
|
|
CALL MB_SYNCHR
|
|
DB THENTK
|
|
DEC HL
|
|
|
|
MB_OKGOTO:
|
|
PUSH HL
|
|
CALL MB_VSIGN
|
|
POP HL
|
|
JP Z, MB_FALSIF
|
|
|
|
MB_DOCOND:
|
|
CALL MB_CHRGTR
|
|
RET Z
|
|
CP LINCON
|
|
JP Z, MB_GOTO
|
|
CP PTRCON
|
|
JP NZ, MB_GONE2
|
|
LD HL, (MB_CONLO)
|
|
RET
|
|
|
|
MB_FALSIF:
|
|
LD D, 0x1
|
|
MB_SKPMRF:
|
|
CALL MB_DATAS
|
|
OR A
|
|
RET Z
|
|
CALL MB_CHRGTR
|
|
CP _ELSE
|
|
JP NZ, MB_SKPMRF
|
|
DEC D
|
|
JP NZ, MB_SKPMRF
|
|
JP MB_DOCOND
|
|
|
|
MB_LPRINT:
|
|
LD A, 0x1
|
|
LD (MB_PRTFLG), A
|
|
JP MB_NEWCHAR
|
|
|
|
MB_PRINT:
|
|
LD C, 0x2
|
|
CALL MB_FILGET
|
|
|
|
MB_NEWCHAR:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
CALL Z, MB_CRDO
|
|
|
|
MB_PRINTC:
|
|
JP Z, MB_FINPRT
|
|
CP USINTK
|
|
JP Z, MB_PRINUS
|
|
CP TABTK
|
|
JP Z, MB_TABER
|
|
CP SPCTK
|
|
JP Z, MB_TABER
|
|
PUSH HL
|
|
CP ','
|
|
JP Z, MB_COMPRT
|
|
CP ';'
|
|
JP Z, MB_NOTABR
|
|
POP BC
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_GETYPR
|
|
JP Z, MB_STRDON
|
|
CALL MB_FOUT
|
|
CALL MB_STRLIT
|
|
LD (HL), ASCII_SP
|
|
LD HL, (MB_FACLO)
|
|
INC (HL)
|
|
|
|
MB_STRDON:
|
|
CALL MB_PTRFILZ
|
|
JP NZ, MB_LINCH2
|
|
LD HL, (MB_FACLO)
|
|
LD A, (MB_PRTFLG)
|
|
OR A
|
|
JP Z, MB_ISTTY
|
|
LD A, (MB_LPTSIZ) ;= 132
|
|
LD B, A
|
|
INC A
|
|
JP Z, MB_LINCH2
|
|
LD A, (MB_LPTPOS)
|
|
OR A
|
|
JP Z, MB_LINCH2
|
|
ADD A, (HL)
|
|
CCF
|
|
JP NC, MB_LINCHK
|
|
DEC A
|
|
CP B
|
|
JP MB_LINCHK
|
|
|
|
MB_ISTTY:
|
|
LD A, (MB_LINLEN) ;= 80
|
|
LD B, A
|
|
INC A
|
|
JP Z, MB_LINCH2
|
|
LD A, (MB_TTYPOS)
|
|
OR A
|
|
JP Z, MB_LINCH2
|
|
ADD A, (HL)
|
|
CCF
|
|
JP NC, MB_LINCHK
|
|
DEC A
|
|
CP B
|
|
|
|
MB_LINCHK:
|
|
CALL NC, MB_CRDO
|
|
|
|
MB_LINCH2:
|
|
CALL MB_STRPRT
|
|
POP HL
|
|
JP MB_NEWCHAR
|
|
|
|
MB_COMPRT:
|
|
LD BC, NMLO.C
|
|
LD HL, (MB_PTRFIL)
|
|
ADD HL, BC
|
|
CALL MB_PTRFILZ
|
|
LD A, (HL)
|
|
JP NZ, MB_MORCOM
|
|
LD A, (MB_PRTFLG)
|
|
OR A
|
|
JP Z, ISCTTY
|
|
LD A, (MB_NLPPOS) ;= 112
|
|
LD B, A
|
|
INC A
|
|
LD A, (MB_LPTPOS)
|
|
JP Z, MB_MORCOM
|
|
CP B
|
|
JP MB_CHKCOM
|
|
|
|
ISCTTY:
|
|
LD A, (MB_CLMLST) ;= 56
|
|
LD B, A
|
|
LD A, (MB_TTYPOS)
|
|
CP 0xff
|
|
JP Z, MB_MORCOM
|
|
CP B
|
|
MB_CHKCOM:
|
|
CALL NC, MB_CRDO
|
|
JP NC, MB_NOTABR
|
|
MB_MORCOM:
|
|
SUB CLMWID
|
|
JP NC, MB_MORCOM
|
|
CPL
|
|
JP MB_ASPA2
|
|
|
|
; --------------------------------------------------
|
|
; TAB or SPC fn
|
|
; --------------------------------------------------
|
|
MB_TABER:
|
|
PUSH AF
|
|
CALL MB_CHRGTR
|
|
CALL MB_GETIN2
|
|
POP AF
|
|
PUSH AF
|
|
CP SPCTK
|
|
JP Z, MB_SPCNDC
|
|
DEC DE
|
|
|
|
MB_SPCNDC:
|
|
LD A, D
|
|
OR A
|
|
JP P, MB_TBNONG
|
|
LD DE, 0x0000
|
|
|
|
MB_TBNONG:
|
|
PUSH HL
|
|
CALL MB_PTRFILZ
|
|
JP NZ, MB_LNOMOD
|
|
LD A, (MB_PRTFLG)
|
|
OR A
|
|
LD A, (MB_LPTSIZ) ;= 132
|
|
JP NZ, MB_LPTMDF
|
|
LD A, (MB_LINLEN) ;= 80
|
|
|
|
MB_LPTMDF:
|
|
LD L, A
|
|
INC A
|
|
JP Z, MB_LNOMOD
|
|
LD H, 0x0
|
|
CALL MB_IMOD
|
|
EX DE, HL
|
|
|
|
MB_LNOMOD:
|
|
POP HL
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
DEC HL
|
|
POP AF
|
|
SUB SPCTK
|
|
PUSH HL
|
|
JP Z, MB_DOSIZT
|
|
LD BC, NMLO.C
|
|
LD HL, (MB_PTRFIL)
|
|
ADD HL, BC
|
|
CALL MB_PTRFILZ
|
|
LD A, (HL)
|
|
JP NZ, MB_DOSIZT
|
|
LD A, (MB_PRTFLG)
|
|
OR A
|
|
JP Z, MB_TTYIST
|
|
LD A, (MB_LPTPOS)
|
|
JP MB_DOSIZT
|
|
|
|
MB_TTYIST:
|
|
LD A, (MB_TTYPOS)
|
|
|
|
MB_DOSIZT:
|
|
CPL
|
|
ADD A, E
|
|
JP C, MB_ASPA2
|
|
INC A
|
|
JP Z, MB_NOTABR
|
|
CALL MB_CRDO
|
|
LD A, E
|
|
DEC A
|
|
JP M, MB_NOTABR
|
|
|
|
MB_ASPA2:
|
|
INC A
|
|
|
|
MB_ASPAC:
|
|
LD B, A
|
|
LD A, ASCII_SP
|
|
|
|
MB_REPOUT:
|
|
CALL MB_OUTDO
|
|
DEC B
|
|
JP NZ, MB_REPOUT
|
|
|
|
MB_NOTABR:
|
|
POP HL
|
|
CALL MB_CHRGTR
|
|
JP MB_PRINTC
|
|
|
|
; ===================================================
|
|
MB_FINPRT:
|
|
XOR A
|
|
LD (MB_PRTFLG), A
|
|
PUSH HL
|
|
LD H, A
|
|
LD L, A
|
|
LD (MB_PTRFIL), HL
|
|
POP HL
|
|
RET
|
|
|
|
MB_LINE:
|
|
CALL MB_SYNCHR
|
|
DB _INPUT
|
|
CP '#'
|
|
JP Z, MB_DLINE
|
|
CALL MB_SCNSEM
|
|
CALL MB_QTINP
|
|
CALL MB_PTRGET
|
|
CALL MB_CHKSTR
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL MB_SINLIN
|
|
POP DE
|
|
POP BC
|
|
JP C, MB_STPEND
|
|
PUSH BC
|
|
PUSH DE
|
|
LD B, 0x0
|
|
CALL MB_STRLT3
|
|
POP HL
|
|
LD A, 0x3
|
|
JP MB_LETCN2
|
|
|
|
MB_TRYAGN:
|
|
DB "?Redo from start\r\n",0
|
|
|
|
MB_SCNSTR:
|
|
INC HL
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_SNERR
|
|
CP '"'
|
|
JP NZ, MB_SCNSTR
|
|
JP MB_SCNCON
|
|
|
|
MB_INPBAK:
|
|
POP HL
|
|
POP HL
|
|
JP MB_RDOIN2
|
|
MB_TRMNOK:
|
|
LD A, (MB_FLGINP)
|
|
OR A
|
|
JP NZ, MB_DATSNE
|
|
MB_RDOIN2:
|
|
POP BC
|
|
LD HL, MB_TRYAGN ;= "?Redo from start"
|
|
CALL MB_STROUT
|
|
LD HL, (MB_SAVTXT)
|
|
RET
|
|
MB_FILSTI:
|
|
CALL MB_FILINP
|
|
PUSH HL
|
|
LD HL, MB_BUFMIN ;= 44
|
|
JP MB_INPCN3
|
|
MB_INPUT:
|
|
CP '#'
|
|
JP Z, MB_FILSTI
|
|
CALL MB_SCNSEM
|
|
LD BC, MB_NOTQTI
|
|
PUSH BC
|
|
MB_QTINP:
|
|
CP '"'
|
|
LD A, 0x0
|
|
LD (MB_CNTOFL), A
|
|
LD A, 0xff
|
|
LD (MB_TEMPA+1), A
|
|
RET NZ
|
|
CALL MB_STRLTI
|
|
LD A, (HL)
|
|
CP ','
|
|
JP NZ, MB_NTICMA
|
|
XOR A
|
|
LD (MB_TEMPA+1), A
|
|
CALL MB_CHRGTR
|
|
JP MB_INPCMA
|
|
MB_NTICMA:
|
|
CALL MB_SYNCHR
|
|
DB ';'
|
|
MB_INPCMA:
|
|
PUSH HL
|
|
CALL MB_STRPRT
|
|
POP HL
|
|
RET
|
|
|
|
MB_NOTQTI:
|
|
PUSH HL
|
|
MB_GETAGN:
|
|
LD A, (MB_TEMPA+1)
|
|
OR A
|
|
JP Z, MB_SUPPRS
|
|
LD A, '?'
|
|
CALL MB_OUTDO
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
MB_SUPPRS:
|
|
CALL MB_SINLIN
|
|
POP BC
|
|
JP C, MB_STPEND
|
|
PUSH BC
|
|
XOR A
|
|
LD (MB_FLGINP), A
|
|
LD (HL), ','
|
|
EX DE, HL
|
|
POP HL
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH DE
|
|
DEC HL
|
|
|
|
MB_VARLOP:
|
|
LD A, 0x80
|
|
LD (MB_SUBFLG), A
|
|
CALL MB_CHRGTR
|
|
CALL MB_NVRFIL
|
|
LD A, (HL)
|
|
DEC HL
|
|
CP '['
|
|
JP Z, MB_IS_ARR
|
|
CP '('
|
|
JP NZ, MB_ENDSCN
|
|
MB_IS_ARR:
|
|
INC HL
|
|
LD B, 0x0
|
|
MB_SCNOPN:
|
|
INC B
|
|
MB_SCNCON:
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_SNERR
|
|
CP '"'
|
|
JP Z, MB_SCNSTR
|
|
CP '('
|
|
JP Z, MB_SCNOPN
|
|
CP '['
|
|
JP Z, MB_SCNCON
|
|
CP ']'
|
|
JP Z, MB_ARR_CLOS
|
|
CP ')'
|
|
JP NZ, MB_SCNCON
|
|
MB_ARR_CLOS:
|
|
DEC B
|
|
JP NZ, MB_SCNCON
|
|
MB_ENDSCN:
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_OKVLST
|
|
CP ','
|
|
JP NZ, MB_SNERR
|
|
MB_OKVLST:
|
|
EX (SP), HL
|
|
LD A, (HL)
|
|
CP ','
|
|
JP NZ, MB_INPBAK
|
|
LD A, 0x1
|
|
LD (MB_OVCSTR), A
|
|
CALL SCNVAL
|
|
LD A, (MB_OVCSTR)
|
|
DEC A
|
|
JP NZ, MB_INPBAK
|
|
PUSH HL
|
|
CALL MB_GETYPR
|
|
CALL Z, MB_FREFAC
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
EX (SP), HL
|
|
LD A, (HL)
|
|
CP ','
|
|
JP Z, MB_VARLOP
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
OR A
|
|
POP HL
|
|
JP NZ, MB_RDOIN2
|
|
MB_INPCN3:
|
|
LD (HL), ',' ; = 44
|
|
JP MB_INPCON
|
|
MB_READ:
|
|
PUSH HL
|
|
LD HL, (MB_DATPTR)
|
|
DB 0xF6 ; OR i
|
|
MB_INPCON:
|
|
XOR A
|
|
LD (MB_FLGINP), A
|
|
EX (SP), HL
|
|
JP MB_LOPDAT
|
|
MB_LOPDT2:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
MB_LOPDAT:
|
|
CALL MB_PTRGET
|
|
EX (SP), HL
|
|
PUSH DE
|
|
LD A, (HL) ;= 44
|
|
CP ','
|
|
JP Z, MB_DATBK
|
|
LD A, (MB_FLGINP)
|
|
OR A
|
|
JP NZ, MB_DATLOP
|
|
|
|
MB_DATBK:
|
|
DB 0xF6 ; SET A NON-ZERO
|
|
|
|
SCNVAL:
|
|
XOR A
|
|
LD (MB_INPPAS), A
|
|
CALL MB_PTRFILZ
|
|
JP NZ, MB_FILIND
|
|
CALL MB_GETYPR
|
|
PUSH AF
|
|
JP NZ, MB_NUMINS
|
|
CALL MB_CHRGTR
|
|
LD D, A
|
|
LD B, A
|
|
CP '"'
|
|
JP Z, MB_NOWGET
|
|
LD A, (MB_FLGINP)
|
|
OR A
|
|
LD D, A
|
|
JP Z, MB_NCOLST
|
|
LD D, ':'
|
|
|
|
MB_NCOLST:
|
|
LD B, ','
|
|
DEC HL
|
|
|
|
MB_NOWGET:
|
|
CALL MB_STRLT2
|
|
|
|
MB_DOASIG:
|
|
POP AF
|
|
ADD A, 0x3
|
|
LD C, A
|
|
LD A, (MB_INPPAS)
|
|
OR A
|
|
RET Z
|
|
|
|
LD A, C
|
|
EX DE, HL
|
|
LD HL, MB_STRDN2
|
|
EX (SP), HL
|
|
PUSH DE
|
|
JP MB_INPCOM
|
|
MB_NUMINS:
|
|
CALL MB_CHRGTR
|
|
POP AF
|
|
PUSH AF
|
|
LD BC, MB_DOASIG
|
|
PUSH BC
|
|
JP C, MB_FIN
|
|
JP MB_FINDBL
|
|
|
|
MB_STRDN2:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_TRMOK
|
|
CP ','
|
|
JP NZ, MB_TRMNOK
|
|
|
|
MB_TRMOK:
|
|
EX (SP), HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP NZ, MB_LOPDT2
|
|
POP DE
|
|
LD A, (MB_FLGINP)
|
|
OR A
|
|
EX DE, HL
|
|
JP NZ, MB_RESFIN
|
|
PUSH DE
|
|
POP HL
|
|
JP MB_FINPRT
|
|
|
|
MB_DATLOP:
|
|
CALL MB_DATAS
|
|
OR A
|
|
JP NZ, MB_NOWLIN
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
LD E, ERROD
|
|
JP Z, MB_ERROR
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (MB_DATLIN), HL
|
|
EX DE, HL
|
|
MB_NOWLIN:
|
|
CALL MB_CHRGTR
|
|
CP _DATA
|
|
JP NZ, MB_DATLOP
|
|
JP MB_DATBK
|
|
|
|
; ===================================================
|
|
MB_FRMEQL:
|
|
CALL MB_SYNCHR
|
|
DB EQULTK
|
|
JP MB_FRMEVL
|
|
|
|
MB_FRMPRN:
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
|
|
; --------------------------------------------------
|
|
; EVALUATE A FORMULA
|
|
; --------------------------------------------------
|
|
MB_FRMEVL:
|
|
DEC HL
|
|
|
|
MB_FRMCHK:
|
|
LD D, 0x0
|
|
|
|
; ==================================================
|
|
MB_LPOPER:
|
|
PUSH DE
|
|
LD C, 0x1
|
|
CALL MB_GETSTK
|
|
CALL MB_EVAL
|
|
XOR A
|
|
LD (MB_FLGOVC), A
|
|
MB_TSTOP:
|
|
LD (MB_TEMP2), HL
|
|
|
|
MB_RETAOP:
|
|
LD HL, (MB_TEMP2)
|
|
POP BC
|
|
LD A, (HL)
|
|
LD (MB_TEMP3), HL
|
|
CP GREATK
|
|
RET C
|
|
|
|
CP LESSTK+1
|
|
JP C, MB_DORELS
|
|
SUB PLUSTK
|
|
LD E, A
|
|
JP NZ, MB_NTPLUS ; not +
|
|
LD A, (MB_VALTYP)
|
|
CP 0x3
|
|
LD A, E
|
|
JP Z, MB_CAT
|
|
|
|
MB_NTPLUS:
|
|
CP LSTOPK ; last op?
|
|
RET NC
|
|
|
|
LD HL, MB_OPTAB
|
|
LD D, 0x0
|
|
ADD HL, DE
|
|
LD A, B
|
|
LD D, (HL) ; op precedence in D, old in A
|
|
CP D
|
|
RET NC ; ret if old op has precedence
|
|
; else new op
|
|
PUSH BC
|
|
LD BC, MB_RETAOP ; return after op
|
|
PUSH BC ; on stack
|
|
LD A, D
|
|
CP 127 ; new has precedence 127?
|
|
JP Z, MB_EXPSTK ; make special stack entry
|
|
CP 81 ; Op is "AND" or "OR"?
|
|
JP C, MB_ANDORD
|
|
AND 0xfe ; 0x7A, 0x7B -> 0x7A
|
|
CP 122 ; 0x7A?
|
|
JP Z, MB_ANDORD
|
|
|
|
MB_NUMREL:
|
|
LD HL, MB_FACLO
|
|
LD A, (MB_VALTYP)
|
|
SUB 0x3
|
|
JP Z, MB_TMERR
|
|
OR A
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
PUSH BC
|
|
JP M, MB_VPUSHD
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
PUSH BC
|
|
JP PO, MB_VPUSHD
|
|
LD HL, MB_DFACLO
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
PUSH BC
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
PUSH BC
|
|
MB_VPUSHD:
|
|
ADD A, 0x3
|
|
LD C, E
|
|
LD B, A
|
|
PUSH BC
|
|
LD BC, MB_APPLOP
|
|
MB_FINTMP:
|
|
PUSH BC
|
|
LD HL, (MB_TEMP3)
|
|
JP MB_LPOPER
|
|
MB_DORELS:
|
|
LD D, 0x0
|
|
MB_LOPREL:
|
|
SUB GREATK
|
|
JP C, MB_FINREL
|
|
CP NMREL
|
|
JP NC, MB_FINREL
|
|
CP 0x1
|
|
RLA
|
|
XOR D
|
|
CP D
|
|
LD D, A
|
|
JP C, MB_SNERR
|
|
LD (MB_TEMP3), HL
|
|
CALL MB_CHRGTR
|
|
JP MB_LOPREL
|
|
|
|
MB_EXPSTK:
|
|
CALL MB_FRCSNG
|
|
CALL MB_PUSHF
|
|
LD BC, MB_FPWRQ
|
|
LD D, 0x7f
|
|
JP MB_FINTMP
|
|
|
|
MB_ANDORD:
|
|
PUSH DE
|
|
CALL MB_FRCINT
|
|
POP DE
|
|
PUSH HL
|
|
LD BC, MB_DANDOR
|
|
JP MB_FINTMP
|
|
|
|
MB_FINREL:
|
|
LD A, B
|
|
CP 100
|
|
RET NC
|
|
PUSH BC
|
|
PUSH DE
|
|
LD DE, 0x6404 ;0+256*100+OPCNT
|
|
LD HL, MB_DOCMP
|
|
PUSH HL
|
|
CALL MB_GETYPR
|
|
JP NZ, MB_NUMREL
|
|
LD HL, (MB_FACLO)
|
|
PUSH HL
|
|
LD BC, MB_STRCMP
|
|
JP MB_FINTMP
|
|
MB_APPLOP:
|
|
POP BC
|
|
LD A, C
|
|
LD (MB_OPRTYP), A
|
|
LD A, (MB_VALTYP)
|
|
CP B
|
|
JP NZ, MB_VALNSM
|
|
CP 0x2
|
|
JP Z, MB_INTDPC
|
|
CP 0x4
|
|
JP Z, MB_SNGDPC
|
|
JP NC, MB_DBLDPC
|
|
MB_VALNSM:
|
|
LD D, A
|
|
LD A, B
|
|
CP 0x8
|
|
JP Z, MB_STKDBL
|
|
LD A, D
|
|
CP 0x8
|
|
JP Z, MB_FACDBL
|
|
LD A, B
|
|
CP 0x4
|
|
JP Z, MB_STKSNG
|
|
LD A, D
|
|
CP 0x3
|
|
JP Z, MB_TMERR
|
|
JP NC, MB_FACSNG
|
|
MB_INTDPC:
|
|
LD HL, MB_INTDSP ;= 2B31h
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
ADD HL, BC
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
POP DE
|
|
LD HL, (MB_FACLO)
|
|
PUSH BC
|
|
RET
|
|
MB_STKDBL:
|
|
CALL MB_FRCDBL
|
|
MB_DBLDPC:
|
|
CALL MB_VMOVAF
|
|
POP HL
|
|
LD (MB_DFACLO+2), HL
|
|
POP HL
|
|
LD (MB_DFACLO), HL
|
|
MB_SNGDBL:
|
|
POP BC
|
|
POP DE
|
|
CALL MB_MOVFR
|
|
MB_SETDBL:
|
|
CALL MB_FRCDBL
|
|
LD HL, MB_DBLDSP ;= 2C26h
|
|
MB_DODSP:
|
|
LD A, (MB_OPRTYP)
|
|
RLCA
|
|
ADD A, L
|
|
LD L, A
|
|
ADC A, H
|
|
SUB L
|
|
LD H, A
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
JP (HL)
|
|
MB_FACDBL:
|
|
LD A, B
|
|
PUSH AF
|
|
CALL MB_VMOVAF
|
|
POP AF
|
|
LD (MB_VALTYP), A
|
|
CP 0x4
|
|
JP Z, MB_SNGDBL
|
|
POP HL
|
|
LD (MB_FACLO), HL
|
|
JP MB_SETDBL
|
|
|
|
MB_STKSNG:
|
|
CALL MB_FRCSNG
|
|
|
|
MB_SNGDPC:
|
|
POP BC
|
|
POP DE
|
|
|
|
MB_SNGDO:
|
|
LD HL, MB_SNGDSP ;= 2588h
|
|
JP MB_DODSP
|
|
MB_FACSNG:
|
|
POP HL
|
|
CALL MB_PUSHF
|
|
CALL MB_CONSIH
|
|
CALL MB_MOVRF
|
|
POP HL
|
|
LD (MB_FAC-1), HL
|
|
POP HL
|
|
LD (MB_FACLO), HL
|
|
JP MB_SNGDO
|
|
|
|
MB_INTDIV:
|
|
PUSH HL
|
|
EX DE, HL
|
|
CALL MB_CONSIH
|
|
POP HL
|
|
CALL MB_PUSHF
|
|
CALL MB_CONSIH
|
|
JP MB_FDIVT
|
|
|
|
; ===================================================
|
|
; EVAL - EVALUATE VARIABLE, CONSTANT, FUNCTION CALL
|
|
; ===================================================
|
|
MB_EVAL:
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_MOERR
|
|
JP C, MB_FIN
|
|
CALL MB_ISLET2
|
|
JP NC, MB_ISVAR
|
|
CP DBLCON+1
|
|
JP C, MB_RETOKN
|
|
INC A
|
|
JP Z, MB_ISFUN
|
|
DEC A
|
|
CP PLUSTK
|
|
JP Z, MB_EVAL
|
|
CP MINUTK
|
|
JP Z, MB_DOMIN
|
|
CP '"'
|
|
JP Z, MB_STRLTI
|
|
CP NOTTK
|
|
JP Z, MB_NOTER
|
|
CP '&'
|
|
JP Z, MB_OCTCNS
|
|
CP ERCTK
|
|
JP NZ, MB_NTERC
|
|
CALL MB_CHRGTR
|
|
LD A, (MB_ERRFLG)
|
|
|
|
MB_NTDERC:
|
|
PUSH HL
|
|
CALL MB_SNGFLT
|
|
POP HL
|
|
RET
|
|
MB_NTERC:
|
|
CP ERLTK
|
|
JP NZ, MB_NTERL
|
|
CALL MB_CHRGTR
|
|
PUSH HL
|
|
LD HL, (MB_ERRLIN)
|
|
CALL MB_INEG2
|
|
POP HL
|
|
RET
|
|
MB_NTERL:
|
|
CP _VARPTR
|
|
JP NZ, MB_NTVARP
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
CP '#'
|
|
JP NZ, MB_NVRFIL1
|
|
CALL MB_GTBYTC
|
|
PUSH HL
|
|
CALL MB_GETPTR
|
|
POP HL
|
|
JP MB_VARRET
|
|
|
|
MB_NVRFIL1:
|
|
CALL MB_NVRFIL
|
|
|
|
MB_VARRET:
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
PUSH HL
|
|
EX DE, HL
|
|
LD A, H
|
|
OR L
|
|
JP Z, MB_FCERR
|
|
CALL MB_MAKINT
|
|
POP HL
|
|
RET
|
|
|
|
MB_NTVARP:
|
|
CP USRTK
|
|
JP Z, MB_USRFN
|
|
CP INSRTK
|
|
JP Z, MB_INSTR
|
|
CP _INKEY
|
|
JP Z, MB_INKEY
|
|
CP _STRIN
|
|
JP Z, MB_STRNG_
|
|
CP _INPUT
|
|
JP Z, MB_FIXINP
|
|
CP FNTK
|
|
JP Z, MB_FNDOER
|
|
|
|
MB_PARCHK:
|
|
CALL MB_FRMPRN
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
RET
|
|
|
|
MB_DOMIN:
|
|
LD D, 0x7d
|
|
CALL MB_LPOPER
|
|
LD HL, (MB_TEMP2)
|
|
PUSH HL
|
|
CALL MB_VNEG
|
|
MB_LABBCK:
|
|
POP HL
|
|
RET
|
|
MB_ISVAR:
|
|
CALL MB_PTRGET
|
|
|
|
MB_RETVAR:
|
|
PUSH HL
|
|
EX DE, HL
|
|
LD (MB_FACLO), HL
|
|
CALL MB_GETYPR
|
|
CALL NZ, MB_VMOVFM
|
|
POP HL
|
|
RET
|
|
|
|
MB_MAKUPL:
|
|
LD A, (HL)
|
|
|
|
; --------------------------------------------------
|
|
; UprrerCase character in [A]
|
|
; --------------------------------------------------
|
|
MB_MAKUPS:
|
|
CP 'A' + 0x20 ; Lower case range?
|
|
RET C ; ret if Upper
|
|
CP 'Z' + 0x21
|
|
RET NC ; ret if Upper
|
|
AND 0x5f ; make Upper case
|
|
RET
|
|
|
|
MB_CNSGET:
|
|
CP '&'
|
|
JP NZ, MB_LINGET
|
|
|
|
MB_OCTCNS:
|
|
LD DE, 0x0
|
|
CALL MB_CHRGTR
|
|
CALL MB_MAKUPS
|
|
CP 'O'
|
|
JP Z, MB_LOPOCT
|
|
CP 'H'
|
|
JP NZ, MB_LOPOC2
|
|
LD B, 5
|
|
|
|
MB_LOPHEX:
|
|
INC HL
|
|
LD A, (HL)
|
|
CALL MB_MAKUPS
|
|
CALL MB_ISLET2
|
|
EX DE, HL
|
|
JP NC, MB_ALPTST
|
|
CP ':'
|
|
JP NC, MB_OCTFIN
|
|
SUB '0'
|
|
JP C, MB_OCTFIN
|
|
JP MB_NXTHEX
|
|
|
|
MB_ALPTST:
|
|
CP 'G' ;'F'+1 last hex digit
|
|
JP NC, MB_OCTFIN
|
|
SUB 0x37
|
|
|
|
MB_NXTHEX:
|
|
ADD HL, HL
|
|
ADD HL, HL
|
|
ADD HL, HL
|
|
ADD HL, HL
|
|
OR L
|
|
LD L, A
|
|
EX DE, HL
|
|
DEC B
|
|
JP NZ, MB_LOPHEX
|
|
JP MB_OVERR
|
|
|
|
MB_LOPOC2:
|
|
DEC HL
|
|
|
|
MB_LOPOCT:
|
|
CALL MB_CHRGTR
|
|
EX DE, HL
|
|
JP NC, MB_OCTFIN
|
|
CP '8'
|
|
JP NC, MB_SNERR
|
|
LD BC, MB_OVERR
|
|
PUSH BC
|
|
ADD HL, HL
|
|
RET C
|
|
ADD HL, HL
|
|
RET C
|
|
ADD HL, HL
|
|
RET C
|
|
POP BC
|
|
LD B, 0x0
|
|
SUB 0x30
|
|
LD C, A
|
|
ADD HL, BC
|
|
EX DE, HL
|
|
JP MB_LOPOCT
|
|
|
|
MB_OCTFIN:
|
|
CALL MB_MAKINT
|
|
EX DE, HL
|
|
RET
|
|
|
|
MB_ISFUN:
|
|
INC HL
|
|
LD A, (HL)
|
|
SUB ONEFUN
|
|
CP 7 ; _RND-ONEFUN
|
|
JP NZ, MB_NTMRND
|
|
PUSH HL
|
|
CALL MB_CHRGTR
|
|
CP '('
|
|
POP HL
|
|
JP NZ, MB_RNDMON
|
|
LD A, 0x7 ; _RND-ONEFUN
|
|
|
|
MB_NTMRND:
|
|
LD B, 0x0
|
|
RLCA
|
|
LD C, A
|
|
PUSH BC
|
|
CALL MB_CHRGTR
|
|
LD A, C
|
|
CP NUMGFN
|
|
JP NC, MB_OKNORM
|
|
CALL MB_FRMPRN
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_CHKSTR
|
|
EX DE, HL
|
|
LD HL, (MB_FACLO)
|
|
EX (SP), HL
|
|
PUSH HL
|
|
EX DE, HL
|
|
CALL MB_GETBYT
|
|
EX DE, HL
|
|
EX (SP), HL
|
|
JP MB_FINGO
|
|
|
|
MB_OKNORM:
|
|
CALL MB_PARCHK
|
|
EX (SP), HL
|
|
LD A, L
|
|
CP 0xc
|
|
JP C, MB_NOTFRF
|
|
CP 0x1b
|
|
PUSH HL
|
|
CALL C, MB_FRCSNG
|
|
POP HL
|
|
|
|
MB_NOTFRF:
|
|
LD DE, MB_LABBCK
|
|
PUSH DE
|
|
LD A, 0x1
|
|
LD (MB_FLGOVC), A
|
|
MB_FINGO:
|
|
LD BC, MB_FUNDSP ;= 4948h
|
|
MB_DISPAT:
|
|
ADD HL, BC
|
|
LD C, (HL) ;= 4948h
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, C
|
|
JP (HL)
|
|
|
|
; ===================================================
|
|
MB_MINPLS:
|
|
DEC D
|
|
CP MINUTK
|
|
RET Z
|
|
CP '-'
|
|
RET Z
|
|
INC D
|
|
CP '+'
|
|
RET Z
|
|
CP PLUSTK
|
|
RET Z
|
|
DEC HL
|
|
RET
|
|
|
|
; ===================================================
|
|
; MORE FORMULA EVALUATION - LOGICAL, RELATIONAL OPS
|
|
; ===================================================
|
|
MB_DOCMP:
|
|
INC A
|
|
ADC A, A
|
|
POP BC
|
|
AND B
|
|
ADD A, 0xff
|
|
SBC A, A
|
|
CALL MB_CONIA
|
|
JP MB_RETAPG
|
|
MB_NOTER:
|
|
LD D, 90
|
|
CALL MB_LPOPER
|
|
CALL MB_FRCINT
|
|
LD A, L
|
|
CPL
|
|
LD L, A
|
|
LD A, H
|
|
CPL
|
|
LD H, A
|
|
LD (MB_FACLO), HL
|
|
POP BC
|
|
MB_RETAPG:
|
|
JP MB_RETAOP
|
|
|
|
; ===================================================
|
|
MB_GETYPR:
|
|
LD A, (MB_VALTYP)
|
|
CP 0x8
|
|
JP NC, MB_NCASE
|
|
SUB 0x3
|
|
OR A
|
|
SCF
|
|
RET
|
|
|
|
MB_NCASE:
|
|
SUB 0x3
|
|
OR A
|
|
RET
|
|
|
|
; DANDOR APPLIES THE "AND" AND "OR" OPERATORS
|
|
; AND SHOULD BE USED TO IMPLEMENT ALL LOGICAL OPERATORS.
|
|
MB_DANDOR:
|
|
LD A, B
|
|
PUSH AF
|
|
CALL MB_FRCINT
|
|
POP AF
|
|
POP DE
|
|
CP 122
|
|
JP Z, MB_IMOD
|
|
CP 123
|
|
JP Z, MB_IDIV
|
|
LD BC, MB_GIVINT
|
|
PUSH BC
|
|
CP 70
|
|
JP NZ, MB_NOTOR
|
|
LD A, E
|
|
OR L
|
|
LD L, A
|
|
LD A, H
|
|
OR D
|
|
RET
|
|
|
|
MB_NOTOR:
|
|
CP 80
|
|
JP NZ, MB_NOTAND
|
|
LD A, E
|
|
AND L
|
|
LD L, A
|
|
LD A, H
|
|
AND D
|
|
RET
|
|
|
|
MB_NOTAND:
|
|
CP 60
|
|
JP NZ, MB_NOTXOR
|
|
LD A, E
|
|
XOR L
|
|
LD L, A
|
|
LD A, H
|
|
XOR D
|
|
RET
|
|
|
|
MB_NOTXOR:
|
|
CP 50
|
|
JP NZ, MB_NOTEQV
|
|
LD A, E
|
|
XOR L
|
|
CPL
|
|
LD L, A
|
|
LD A, H
|
|
XOR D
|
|
CPL
|
|
RET
|
|
|
|
MB_NOTEQV:
|
|
LD A, L
|
|
CPL
|
|
AND E
|
|
CPL
|
|
LD L, A
|
|
LD A, H
|
|
CPL
|
|
AND D
|
|
CPL
|
|
RET
|
|
|
|
; THIS ROUTINE SUBTRACTS [DE] FROM [HL]
|
|
; AND FLOATS THE RESULT LEAVING IT IN FAC.
|
|
MB_GIVDBL:
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
JP MB_INEG2
|
|
MB_LPOS:
|
|
LD A, (MB_LPTPOS)
|
|
JP MB_SNGFLI
|
|
MB_POS:
|
|
LD A, (MB_TTYPOS)
|
|
MB_SNGFLI:
|
|
INC A
|
|
MB_SNGFLT:
|
|
LD L, A
|
|
XOR A
|
|
MB_GIVINT:
|
|
LD H, A
|
|
JP MB_MAKINT
|
|
MB_USRFN:
|
|
CALL MB_SCNUSR
|
|
PUSH DE
|
|
CALL MB_PARCHK
|
|
EX (SP), HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD HL, MB_POPHRT
|
|
PUSH HL
|
|
PUSH DE
|
|
LD A, (MB_VALTYP)
|
|
PUSH AF
|
|
CP 0x3
|
|
CALL Z, MB_FREFAC
|
|
POP AF
|
|
EX DE, HL
|
|
LD HL, MB_FACLO
|
|
RET
|
|
MB_SCNUSR:
|
|
CALL MB_CHRGTR
|
|
LD BC, 0x0
|
|
CP ONECON+10
|
|
JP NC, MB_NOARGU
|
|
CP ONECON
|
|
JP C, MB_NOARGU
|
|
CALL MB_CHRGTR
|
|
LD A, (MB_CONLO)
|
|
OR A
|
|
RLA
|
|
LD C, A
|
|
MB_NOARGU:
|
|
EX DE, HL
|
|
LD HL, MB_USRTAB ;= 1418h
|
|
ADD HL, BC
|
|
EX DE, HL
|
|
RET
|
|
|
|
MB_DEFUSR:
|
|
CALL MB_SCNUSR
|
|
PUSH DE
|
|
CALL MB_SYNCHR
|
|
DB EQULTK
|
|
CALL MB_GETIN22
|
|
EX (SP), HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
POP HL
|
|
RET
|
|
|
|
; ---------------------------------------------------
|
|
; SIMPLE-USER-DEFINED-FUNCTION CODE
|
|
; ---------------------------------------------------
|
|
MB_DEF:
|
|
CP USRTK
|
|
JP Z, MB_DEFUSR
|
|
CALL MB_GETFNM
|
|
CALL MB_ERRDIR
|
|
EX DE, HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
EX DE, HL
|
|
LD A, (HL)
|
|
CP '('
|
|
JP NZ, MB_DATAS
|
|
CALL MB_CHRGTR
|
|
MB_DATA:
|
|
CALL MB_PTRGET
|
|
LD A, (HL)
|
|
CP ')'
|
|
JP Z, MB_DATAS
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
JP MB_DATA
|
|
MB_FNDOER:
|
|
CALL MB_GETFNM
|
|
LD A, (MB_VALTYP)
|
|
OR A
|
|
PUSH AF
|
|
LD (MB_TEMP2), HL
|
|
EX DE, HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
LD A, H
|
|
OR L
|
|
JP Z, MB_UFERR
|
|
LD A, (HL)
|
|
CP '('
|
|
JP NZ, MB_FINVLS
|
|
CALL MB_CHRGTR
|
|
LD (MB_TEMP3), HL
|
|
EX DE, HL
|
|
LD HL, (MB_TEMP2)
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
XOR A
|
|
PUSH AF
|
|
PUSH HL
|
|
EX DE, HL
|
|
MB_ASGMOR:
|
|
LD A, 128
|
|
LD (MB_SUBFLG), A
|
|
CALL MB_PTRGET
|
|
EX DE, HL
|
|
EX (SP), HL
|
|
LD A, (MB_VALTYP)
|
|
PUSH AF
|
|
PUSH DE
|
|
CALL MB_FRMEVL
|
|
LD (MB_TEMP2), HL
|
|
POP HL
|
|
LD (MB_TEMP3), HL
|
|
POP AF
|
|
CALL MB_DOCNVF
|
|
LD C, 0x4
|
|
CALL MB_GETSTK
|
|
LD HL, 0xfff8
|
|
ADD HL, SP
|
|
LD SP, HL
|
|
CALL MB_VMOVMF
|
|
LD A, (MB_VALTYP)
|
|
PUSH AF
|
|
LD HL, (MB_TEMP2)
|
|
LD A, (HL)
|
|
CP ')'
|
|
JP Z, MB_POPASG
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
PUSH HL
|
|
LD HL, (MB_TEMP3)
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
JP MB_ASGMOR
|
|
MB_POPAS2:
|
|
POP AF
|
|
LD (MB_PRMLN2), A
|
|
MB_POPASG:
|
|
POP AF
|
|
OR A
|
|
JP Z, MB_FINASG
|
|
LD (MB_VALTYP), A
|
|
LD HL, 0x0
|
|
ADD HL, SP
|
|
CALL MB_VMOVFM
|
|
LD HL, 0x8
|
|
ADD HL, SP
|
|
LD SP, HL
|
|
POP DE
|
|
LD L, 0x3
|
|
MB_LPSIZL:
|
|
INC L
|
|
DEC DE
|
|
LD A, (DE)
|
|
OR A
|
|
JP M, MB_LPSIZL
|
|
DEC DE
|
|
DEC DE
|
|
DEC DE
|
|
LD A, (MB_VALTYP)
|
|
ADD A, L
|
|
LD B, A
|
|
LD A, (MB_PRMLN2)
|
|
LD C, A
|
|
ADD A, B
|
|
CP PRMSIZ
|
|
JP NC, MB_FCERR
|
|
PUSH AF
|
|
LD A, L
|
|
LD B, 0x0
|
|
LD HL, MB_PARM2
|
|
ADD HL, BC
|
|
LD C, A
|
|
CALL MB_BCTRAN
|
|
LD BC, MB_POPAS2
|
|
PUSH BC
|
|
PUSH BC
|
|
JP MB_LETCN4
|
|
MB_FINASG:
|
|
LD HL, (MB_TEMP2)
|
|
CALL MB_CHRGTR
|
|
PUSH HL
|
|
LD HL, (MB_TEMP3)
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
DB 3Eh
|
|
|
|
; --------------------------------------------------
|
|
MB_FINVLS:
|
|
PUSH DE
|
|
LD (MB_TEMP3), HL
|
|
LD A, (MB_PRMLEN)
|
|
ADD A, 0x4
|
|
PUSH AF
|
|
RRCA
|
|
LD C, A
|
|
CALL MB_GETSTK
|
|
POP AF
|
|
LD C, A
|
|
CPL
|
|
INC A
|
|
LD L, A
|
|
LD H, 0xff
|
|
ADD HL, SP
|
|
LD SP, HL
|
|
PUSH HL
|
|
LD DE, MB_PRMSTK
|
|
CALL MB_BCTRAN
|
|
POP HL
|
|
LD (MB_PRMSTK), HL
|
|
LD HL, (MB_PRMLN2)
|
|
LD (MB_PRMLEN), HL
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, MB_PARM1
|
|
LD DE, MB_PARM2
|
|
CALL MB_BCTRAN
|
|
LD H, A
|
|
LD L, A
|
|
LD (MB_PRMLN2), HL
|
|
LD HL, (MB_FUNACT)
|
|
INC HL
|
|
LD (MB_FUNACT), HL
|
|
LD A, H
|
|
OR L
|
|
LD (MB_NOFUNS), A
|
|
LD HL, (MB_TEMP3)
|
|
CALL MB_FRMEQL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP NZ, MB_SNERR
|
|
CALL MB_GETYPR
|
|
JP NZ, MB_NOCPRS
|
|
LD DE, MB_DSCTMP
|
|
LD HL, (MB_FACLO)
|
|
CALL MB_DCOMPR
|
|
JP C, MB_NOCPRS
|
|
CALL MB_STRCPY
|
|
CALL MB_PUTTMP
|
|
MB_NOCPRS:
|
|
LD HL, (MB_PRMSTK)
|
|
LD D, H
|
|
LD E, L
|
|
INC HL
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC BC
|
|
INC BC
|
|
INC BC
|
|
INC BC
|
|
LD HL, MB_PRMSTK
|
|
CALL MB_BCTRAN
|
|
EX DE, HL
|
|
LD SP, HL
|
|
LD HL, (MB_FUNACT)
|
|
DEC HL
|
|
LD (MB_FUNACT), HL
|
|
LD A, H
|
|
OR L
|
|
LD (MB_NOFUNS), A
|
|
POP HL
|
|
POP AF
|
|
MB_DOCNVF:
|
|
PUSH HL
|
|
AND 0x7
|
|
LD HL, MB_FRCTBL ;= 2A20h
|
|
LD C, A
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
CALL MB_DISPAT
|
|
POP HL
|
|
RET
|
|
|
|
; ---------------------------------------------------
|
|
; BLOCK TRANSFER ROUTINE WITH SOURCE IN [DE] DESTINATION IN [HL]
|
|
; AND COUNT IN [BC]. TRANSFER IS FORWARD.
|
|
; ---------------------------------------------------
|
|
MB_BCTRAL:
|
|
LD A, (DE)
|
|
LD (HL), A
|
|
INC HL
|
|
INC DE
|
|
DEC BC
|
|
MB_BCTRAN:
|
|
LD A, B
|
|
OR C
|
|
JP NZ, MB_BCTRAL
|
|
RET
|
|
|
|
MB_ERRDIR:
|
|
PUSH HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
INC HL
|
|
LD A, H
|
|
OR L
|
|
POP HL
|
|
RET NZ
|
|
LD E, ERRID
|
|
JP MB_ERROR
|
|
|
|
; ---------------------------------------------------
|
|
; SUBROUTINE TO GET A POINTER TO A FUNCTION NAME
|
|
; ---------------------------------------------------
|
|
MB_GETFNM:
|
|
CALL MB_SYNCHR
|
|
DB FNTK
|
|
LD A, 0x80
|
|
LD (MB_SUBFLG), A
|
|
OR (HL)
|
|
LD C, A
|
|
JP MB_PTRGT2
|
|
|
|
; ---------------------------------------------------
|
|
; STRING FUNCTIONS - LEFT HAND SIDE MID$
|
|
; ---------------------------------------------------
|
|
MB_ISMID:
|
|
CP 0xff-_END ;377O-$END
|
|
JP NZ, MB_SNERR
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
CP MIDTK
|
|
JP Z, MB_MIDFN
|
|
JP MB_SNERR
|
|
|
|
MB_FNINP:
|
|
CALL MB_CONINT
|
|
LD (MB_INPWRD+1), A
|
|
|
|
MB_INPWRD:
|
|
IN A, (0x0)
|
|
JP MB_SNGFLT
|
|
|
|
MB_FNOUT:
|
|
CALL MB_SETIO
|
|
|
|
MB_OUTWRD:
|
|
OUT (0x0), A
|
|
RET
|
|
|
|
MB_FNWAIT:
|
|
CALL MB_SETIO
|
|
PUSH AF
|
|
LD E, 0x0
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_NOTTHR
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_GETBYT
|
|
MB_NOTTHR:
|
|
POP AF
|
|
LD D, A
|
|
MB_STAINP:
|
|
IN A, (0x0)
|
|
XOR E
|
|
AND D
|
|
JP Z, MB_STAINP
|
|
RET
|
|
|
|
MB_CONSOL:
|
|
JP MB_SNERR
|
|
|
|
MB_WIDTH:
|
|
CP _LPRINT
|
|
JP NZ, MB_NOTWLP
|
|
CALL MB_CHRGTR
|
|
CALL MB_GETBYT
|
|
LD (MB_LPTSIZ), A ;= 132
|
|
LD E, A
|
|
CALL MB_MORCP3
|
|
LD (MB_NLPPOS), A ;= 112
|
|
RET
|
|
|
|
MB_NOTWLP:
|
|
CALL MB_GETBYT
|
|
LD (MB_LINLEN), A ;= 80
|
|
LD E, A
|
|
CALL MB_MORCP3
|
|
LD (MB_CLMLST), A ;= 56
|
|
RET
|
|
|
|
MB_MORCP3:
|
|
SUB CLMWID
|
|
JP NC, MB_MORCP3
|
|
ADD A, CLMWID*2
|
|
CPL
|
|
INC A
|
|
ADD A, E
|
|
RET
|
|
|
|
MB_GETINT:
|
|
CALL MB_CHRGTR
|
|
MB_GETIN2:
|
|
CALL MB_FRMEVL
|
|
|
|
; --------------------------------------------------
|
|
; CONVERT THE FAC TO AN INTEGER IN [DE]
|
|
; --------------------------------------------------
|
|
MB_INTFR2:
|
|
PUSH HL
|
|
CALL MB_FRCINT
|
|
EX DE, HL
|
|
POP HL
|
|
LD A, D
|
|
OR A
|
|
RET
|
|
|
|
MB_SETIO:
|
|
CALL MB_GETBYT
|
|
LD (MB_STAINP + 1), A
|
|
LD (MB_OUTWRD + 1), A
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
JP MB_GETBYT
|
|
|
|
MB_GTBYTC:
|
|
CALL MB_CHRGTR
|
|
|
|
; ===================================================
|
|
MB_GETBYT:
|
|
CALL MB_FRMEVL
|
|
|
|
; ===================================================
|
|
MB_CONINT:
|
|
CALL MB_INTFR2
|
|
JP NZ, MB_FCERR
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
LD A, E
|
|
RET
|
|
|
|
; ===================================================
|
|
; EXTENDED LIST, DELETE, LLIST
|
|
; ===================================================
|
|
MB_LLIST:
|
|
LD A, 0x1
|
|
LD (MB_PRTFLG), A
|
|
MB_LIST:
|
|
POP BC
|
|
CALL MB_SCNLIN
|
|
PUSH BC
|
|
CALL MB_PROCHK
|
|
MB_LIST4:
|
|
LD HL, 0xffff
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
POP HL
|
|
POP DE
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
LD A, B
|
|
OR C
|
|
JP Z, MB_READY
|
|
CALL MB_PTRFILZ
|
|
CALL Z, MB_ISCNTC
|
|
PUSH BC
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
PUSH BC
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
POP BC
|
|
JP C, MB_STPRDY
|
|
EX (SP), HL
|
|
PUSH HL
|
|
PUSH BC
|
|
EX DE, HL
|
|
LD (MB_DOT), HL
|
|
CALL MB_LINPTR
|
|
POP HL
|
|
LD A, (HL)
|
|
CP ASCII_TAB
|
|
JP Z, MB_NOSPAL
|
|
LD A, ' '
|
|
CALL MB_OUTDO
|
|
MB_NOSPAL:
|
|
CALL MB_BUFLIN
|
|
LD HL, MB_BUF
|
|
CALL MB_LISPRT
|
|
CALL MB_CRDO
|
|
JP MB_LIST4
|
|
MB_LISPRT:
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
CALL MB_OUTCH1
|
|
INC HL
|
|
JP MB_LISPRT
|
|
MB_BUFLIN:
|
|
LD BC, MB_BUF
|
|
LD D, 0xff
|
|
XOR A
|
|
LD (MB_TEMPA), A
|
|
CALL MB_PROCHK
|
|
JP MB_PLOOP2
|
|
MB_PLOOP:
|
|
INC BC
|
|
INC HL
|
|
DEC D
|
|
RET Z
|
|
|
|
MB_PLOOP2:
|
|
LD A, (HL)
|
|
OR A
|
|
LD (BC), A ;= 44
|
|
RET Z
|
|
|
|
CP OCTCON
|
|
JP C, MB_NTEMBL
|
|
CP ' '
|
|
LD E, A
|
|
JP C, MB_PRTVAR
|
|
MB_NTEMBL:
|
|
OR A
|
|
JP M, MB_PLOOPR
|
|
LD E, A
|
|
CP '.'
|
|
JP Z, MB_PRTVAR
|
|
CALL MB_TSTANM
|
|
JP NC, MB_PRTVAR
|
|
XOR A
|
|
JP MB_PLOOPH
|
|
MB_PRTVAR:
|
|
LD A, (MB_TEMPA)
|
|
OR A
|
|
JP Z, MB_PLOOPG
|
|
INC A
|
|
JP NZ, MB_PLOOPG
|
|
LD A, ' '
|
|
LD (BC), A ;= 44
|
|
INC BC
|
|
DEC D
|
|
RET Z
|
|
|
|
MB_PLOOPG:
|
|
LD A, 0x1
|
|
MB_PLOOPH:
|
|
LD (MB_TEMPA), A
|
|
LD A, E
|
|
CP OCTCON
|
|
JP C, MB_PLOOPZ
|
|
CP ' '
|
|
JP C, MB_NUMLIN
|
|
|
|
MB_PLOOPZ:
|
|
LD (BC), A
|
|
JP MB_PLOOP
|
|
|
|
MB_PLOOPR:
|
|
INC A
|
|
LD A, (HL)
|
|
JP NZ, MB_NTFNTK
|
|
INC HL
|
|
LD A, (HL)
|
|
AND 0x7f
|
|
MB_NTFNTK:
|
|
INC HL
|
|
CP SNGQTK
|
|
JP NZ, MB_NTQTTK
|
|
DEC BC
|
|
DEC BC
|
|
DEC BC
|
|
DEC BC
|
|
INC D
|
|
INC D
|
|
INC D
|
|
INC D
|
|
|
|
MB_NTQTTK:
|
|
CP _ELSE
|
|
CALL Z, MB_DCXBRT
|
|
CP _WHILE
|
|
;LAB_ram_215f:
|
|
JP NZ, MB_RESSR0
|
|
LD A, (HL)
|
|
INC HL
|
|
CP PLUSTK
|
|
LD A, _WHILE
|
|
JP Z, MB_RESSR0
|
|
DEC HL
|
|
|
|
MB_RESSR0:
|
|
PUSH HL
|
|
PUSH BC
|
|
PUSH DE
|
|
LD HL, MB_RESLST-1
|
|
LD B, A
|
|
LD C, 'A' - 1
|
|
|
|
MB_RESSR3:
|
|
INC C
|
|
|
|
MB_RESSR1:
|
|
INC HL
|
|
LD D, H
|
|
LD E, L
|
|
|
|
MB_RESSR2:
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_RESSR3
|
|
INC HL
|
|
JP P, MB_RESSR2
|
|
LD A, (HL)
|
|
CP B
|
|
JP NZ, MB_RESSR1
|
|
EX DE, HL
|
|
CP USRTK
|
|
JP Z, MB_NOISPA
|
|
CP FNTK
|
|
|
|
MB_NOISPA:
|
|
LD A, C
|
|
POP DE
|
|
POP BC
|
|
LD E, A
|
|
JP NZ, MB_NTFNEX
|
|
LD A, (MB_TEMPA)
|
|
OR A
|
|
LD A, 0
|
|
LD (MB_TEMPA), A
|
|
JP MB_MORLNZ
|
|
|
|
MB_NTFNEX:
|
|
CP 'Z' + 1 ; WAS IT A SPECIAL CHAR?
|
|
JP NZ, MB_NTSPCH
|
|
XOR A
|
|
LD (MB_TEMPA), A
|
|
JP MB_MORPUR
|
|
MB_NTSPCH:
|
|
LD A, (MB_TEMPA)
|
|
OR A
|
|
LD A, 0xff
|
|
LD (MB_TEMPA), A
|
|
MB_MORLNZ:
|
|
JP Z, MB_MORLN0
|
|
LD A, ' '
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
JP Z, MB_PPSWRT
|
|
|
|
MB_MORLN0:
|
|
LD A, E
|
|
JP MB_MORLN1
|
|
|
|
MB_MORPUR:
|
|
LD A, (HL) ; = "UT"
|
|
INC HL
|
|
LD E, A
|
|
MB_MORLN1:
|
|
AND 0x7f
|
|
LD (BC), A ; = 44
|
|
INC BC
|
|
DEC D
|
|
JP Z, MB_PPSWRT
|
|
OR E
|
|
JP P, MB_MORPUR
|
|
CP '(' + 0x80
|
|
JP NZ, MB_NTSPCT
|
|
XOR A
|
|
LD (MB_TEMPA), A
|
|
MB_NTSPCT:
|
|
POP HL
|
|
JP MB_PLOOP2
|
|
MB_TSTANM:
|
|
CALL MB_ISLET2
|
|
RET NC
|
|
CP '0'
|
|
RET C
|
|
CP ':'
|
|
CCF
|
|
RET
|
|
|
|
MB_NUMLIN:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
CALL MB_CONFAC
|
|
POP AF
|
|
LD BC, MB_CONLIN
|
|
PUSH BC
|
|
CP OCTCON
|
|
JP Z, MB_FOUTO
|
|
CP HEXCON
|
|
JP Z, MB_FOUTH
|
|
LD HL, (MB_CONLO)
|
|
JP MB_FOUT
|
|
MB_CONLIN:
|
|
POP BC
|
|
POP DE
|
|
LD A, (MB_CONSAV)
|
|
LD E, 'O'
|
|
CP OCTCON
|
|
JP Z, MB_SAVBAS
|
|
CP HEXCON
|
|
LD E, 'H'
|
|
JP NZ, MB_NUMSLN
|
|
MB_SAVBAS:
|
|
LD A, '&'
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
RET Z
|
|
LD A, E
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
RET Z
|
|
|
|
MB_NUMSLN:
|
|
LD A, (MB_CONTYP)
|
|
CP 0x4
|
|
LD E, 0x0
|
|
JP C, MB_TYPSET
|
|
LD E, '!'
|
|
JP Z, MB_TYPSET
|
|
LD E, '#'
|
|
MB_TYPSET:
|
|
LD A, (HL)
|
|
CP ASCII_SP
|
|
CALL Z, MB_INXHRT
|
|
MB_NUMSL2:
|
|
LD A, (HL)
|
|
INC HL
|
|
OR A
|
|
JP Z, MB_NUMDN
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
RET Z
|
|
LD A, (MB_CONTYP)
|
|
CP 0x4
|
|
JP C, MB_NUMSL2
|
|
DEC BC
|
|
LD A, (BC)
|
|
INC BC
|
|
JP NZ, MB_DBLSCN
|
|
CP '.'
|
|
JP Z, MB_ZERE
|
|
MB_DBLSCN:
|
|
CP 'D'
|
|
JP Z, MB_ZERE
|
|
CP 'E'
|
|
JP NZ, MB_NUMSL2
|
|
MB_ZERE:
|
|
LD E, 0x0
|
|
JP MB_NUMSL2
|
|
MB_NUMDN:
|
|
LD A, E
|
|
OR A
|
|
JP Z, MB_NOD
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
RET Z
|
|
|
|
MB_NOD:
|
|
LD HL, (MB_CONTXT)
|
|
JP MB_PLOOP2
|
|
MB_DELETE:
|
|
CALL MB_SCNLIN
|
|
PUSH BC
|
|
CALL MB_DEPTR
|
|
POP BC
|
|
POP DE
|
|
PUSH BC
|
|
PUSH BC
|
|
CALL MB_FNDLIN
|
|
JP NC, MB_FCERRG
|
|
LD D, H
|
|
LD E, L
|
|
EX (SP), HL
|
|
PUSH HL
|
|
CALL MB_DCOMPR
|
|
MB_FCERRG:
|
|
JP NC, MB_FCERR
|
|
LD HL, MB_OKTXT ;= "OK\r\n"
|
|
CALL MB_STROUT
|
|
POP BC
|
|
LD HL, MB_FINI ;= D1h
|
|
EX (SP), HL
|
|
MB_DEL:
|
|
EX DE, HL
|
|
LD HL, (MB_VARTAB)
|
|
MB_MLOOP:
|
|
LD A, (DE)
|
|
LD (BC), A
|
|
INC BC
|
|
INC DE
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_MLOOP
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_VARTAB), HL
|
|
RET
|
|
|
|
; ===================================================
|
|
; PEEK AND POKE
|
|
; ===================================================
|
|
MB_PEEK:
|
|
CALL MB_FRQINT
|
|
CALL MB_PRODIR
|
|
LD A, (HL)
|
|
JP MB_SNGFLT
|
|
|
|
MB_POKE:
|
|
CALL MB_GETIN22
|
|
PUSH DE
|
|
CALL MB_PRODIR
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_GETBYT
|
|
POP DE
|
|
LD (DE), A
|
|
RET
|
|
|
|
MB_GETIN22:
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_FRQINT
|
|
EX DE, HL
|
|
POP HL
|
|
RET
|
|
|
|
MB_FRQINT:
|
|
LD BC, MB_FRCINT
|
|
PUSH BC
|
|
CALL MB_GETYPR
|
|
RET M
|
|
LD A, (MB_FAC)
|
|
CP 0x90
|
|
RET NZ
|
|
CALL MB_SIGN
|
|
RET M
|
|
CALL MB_FRCSNG
|
|
LD BC, 0x9180
|
|
LD DE, 0x0
|
|
JP MB_FADD
|
|
|
|
; ===================================================
|
|
; RENUMBER
|
|
; ===================================================
|
|
MB_RESEQ:
|
|
LD BC, 10 ; ASSUME INC=10
|
|
PUSH BC
|
|
LD D, B
|
|
LD E, B
|
|
JP Z, MB_RESNN
|
|
CP ','
|
|
JP Z, MB_EATCOM
|
|
PUSH DE
|
|
CALL MB_LINSPC
|
|
LD B, D
|
|
LD C, E
|
|
POP DE
|
|
JP Z, MB_RESNN
|
|
|
|
MB_EATCOM:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_LINSPC
|
|
JP Z, MB_RESNN
|
|
POP AF
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
PUSH DE
|
|
CALL MB_LINGET
|
|
JP NZ, MB_SNERR
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_FCERR
|
|
EX DE, HL
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
|
|
MB_RESNN:
|
|
PUSH BC
|
|
CALL MB_FNDLIN
|
|
POP DE
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_FNDLIN
|
|
LD H, B
|
|
LD L, C
|
|
POP DE
|
|
CALL MB_DCOMPR
|
|
EX DE, HL
|
|
JP C, MB_FCERR
|
|
POP DE
|
|
POP BC
|
|
POP AF
|
|
PUSH HL
|
|
PUSH DE
|
|
JP MB_NXTRSL
|
|
|
|
MB_NXTRSC:
|
|
ADD HL, BC
|
|
JP C, MB_FCERR
|
|
EX DE, HL
|
|
PUSH HL
|
|
LD HL, 65529
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
JP C, MB_FCERR
|
|
MB_NXTRSL:
|
|
PUSH DE
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD A, D
|
|
OR E
|
|
EX DE, HL
|
|
POP DE
|
|
JP Z, MB_RESSD1
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
DEC HL
|
|
EX DE, HL
|
|
JP NZ, MB_NXTRSC
|
|
MB_RESSD1:
|
|
PUSH BC
|
|
CALL SCCLIN
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
MB_RESNX1:
|
|
PUSH DE
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_SCCALL
|
|
EX DE, HL
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
INC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
EX DE, HL
|
|
ADD HL, BC
|
|
EX DE, HL
|
|
POP HL
|
|
JP MB_RESNX1
|
|
MB_SCCALL:
|
|
LD BC, MB_STPRDY
|
|
PUSH BC
|
|
DB 0xFE
|
|
SCCLIN:
|
|
DB 0xF6
|
|
|
|
; ===================================================
|
|
MB_SCCPTR:
|
|
XOR A
|
|
LD (MB_PTRFLG), A
|
|
MB_SCNPGM:
|
|
LD HL, (MB_TXTTAB) ;TXTTAB
|
|
DEC HL
|
|
MB_SCNPLN:
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
RET Z
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
MB_SCNEXT:
|
|
CALL MB_CHRGTR
|
|
MB_SCNEX2:
|
|
OR A
|
|
JP Z, MB_SCNPLN
|
|
LD C, A
|
|
LD A, (MB_PTRFLG)
|
|
OR A
|
|
LD A, C
|
|
JP Z, MB_SCNPT2
|
|
CP _ERROR
|
|
JP NZ, MB_NTERRG
|
|
CALL MB_CHRGTR
|
|
CP _GOTO
|
|
JP NZ, MB_SCNEX2
|
|
CALL MB_CHRGTR
|
|
CP LINCON
|
|
JP NZ, MB_SCNEX2
|
|
PUSH DE
|
|
CALL MB_LINGT3
|
|
LD A, D
|
|
OR E
|
|
JP NZ, MB_CHGPTR
|
|
JP MB_SCNEX3
|
|
MB_NTERRG:
|
|
CP LINCON
|
|
JP NZ, MB_SCNEXT
|
|
PUSH DE
|
|
CALL MB_LINGT3
|
|
MB_CHGPTR:
|
|
PUSH HL
|
|
CALL MB_FNDLIN
|
|
DEC BC
|
|
LD A, PTRCON
|
|
JP C, MB_MAKPTR
|
|
CALL MB_CRDONZ
|
|
LD HL, MB_LINM ;= "Undefined line "
|
|
PUSH DE
|
|
CALL MB_STROUT
|
|
POP HL
|
|
CALL MB_LINPTR
|
|
POP BC
|
|
POP HL
|
|
PUSH HL
|
|
PUSH BC
|
|
CALL MB_INPRT
|
|
MB_SCNPOP:
|
|
POP HL
|
|
MB_SCNEX3:
|
|
POP DE
|
|
DEC HL
|
|
MB_SCNEXT0:
|
|
JP MB_SCNEXT
|
|
|
|
MB_LINM:
|
|
DB "Undefined line ", 0
|
|
|
|
MB_SCNPT2:
|
|
CP PTRCON
|
|
JP NZ, MB_SCNEXT0
|
|
PUSH DE
|
|
CALL MB_LINGT3
|
|
PUSH HL
|
|
EX DE, HL
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
LD A, LINCON
|
|
MB_MAKPTR:
|
|
LD HL, MB_SCNPOP
|
|
PUSH HL
|
|
MB_CONCHG:
|
|
LD HL, (MB_CONTXT)
|
|
MB_CONCH2:
|
|
PUSH HL
|
|
DEC HL
|
|
LD (HL), B
|
|
DEC HL
|
|
LD (HL), C
|
|
DEC HL
|
|
LD (HL), A
|
|
POP HL
|
|
RET
|
|
|
|
; ===================================================
|
|
MB_DEPTR:
|
|
LD A, (MB_PTRFLG)
|
|
OR A
|
|
RET Z
|
|
JP MB_SCCPTR
|
|
|
|
; ---------------------------------------------------
|
|
; ANSI - THE ROUTINES TO HANDLE ANSI FEATURES
|
|
; ---------------------------------------------------
|
|
MB_OPTION:
|
|
CALL MB_SYNCHR
|
|
DB 'B'
|
|
CALL MB_SYNCHR
|
|
DB 'A'
|
|
CALL MB_SYNCHR
|
|
DB 'S'
|
|
CALL MB_SYNCHR
|
|
DB 'E'
|
|
LD A, (MB_OPTFLG)
|
|
OR A
|
|
JP NZ, MB_DDERR
|
|
PUSH HL
|
|
LD HL, (MB_ARYTAB)
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_DDERR
|
|
POP HL
|
|
LD A, (HL)
|
|
SUB '0'
|
|
JP C, MB_SNERR
|
|
CP 2
|
|
JP NC, MB_SNERR
|
|
LD (MB_OPTVAL), A
|
|
INC A
|
|
LD (MB_OPTFLG), A
|
|
CALL MB_CHRGTR
|
|
RET
|
|
|
|
MB_STRPRN:
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
CALL MB_CALTTY
|
|
INC HL
|
|
JP MB_STRPRN
|
|
MB_CALTTY:
|
|
PUSH AF
|
|
JP MB_TTYCHR
|
|
MB_RANDOM:
|
|
JP Z, MB_INPRG
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_FRCINT
|
|
JP MB_STRNDS
|
|
MB_INPRG:
|
|
PUSH HL
|
|
MB_INPRAG:
|
|
LD HL, MB_RANMES ;= "Random number seed (-32768 to 32767)"
|
|
CALL MB_STROUT
|
|
CALL MB_QINLIN
|
|
POP DE
|
|
JP C, MB_STPEND
|
|
PUSH DE
|
|
INC HL
|
|
LD A, (HL)
|
|
CALL MB_FIN
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_INPRAG
|
|
CALL MB_FRCINT
|
|
|
|
MB_STRNDS:
|
|
LD (MB_RNDX+1), HL
|
|
CALL MB_RNDMN2
|
|
POP HL
|
|
RET
|
|
|
|
MB_RANMES:
|
|
DB "Random number seed (-32768 to 32767)", 0
|
|
|
|
; ---------------------------------------------------
|
|
; SCANS AHEAD TO FIND THE "NEXT" THAT MATCHES A "FOR"
|
|
; ---------------------------------------------------
|
|
MB_WNDSCN:
|
|
LD C, ERRWH
|
|
JP MB_SCNCNT
|
|
MB_NXTSCN:
|
|
LD C, ERRFN
|
|
MB_SCNCNT:
|
|
LD B, 0
|
|
EX DE, HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
LD (MB_NXTLIN), HL
|
|
EX DE, HL
|
|
MB_FORINC:
|
|
INC B
|
|
MB_FNLOP:
|
|
DEC HL
|
|
MB_SCANWF:
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_FORTRM
|
|
CP _ELSE
|
|
JP Z, MB_FNNWST
|
|
CP _THEN
|
|
JP NZ, MB_SCANWF
|
|
MB_FORTRM:
|
|
OR A
|
|
JP NZ, MB_FNNWST
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
LD E, C
|
|
JP Z, MB_ERROR
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (MB_NXTLIN), HL
|
|
EX DE, HL
|
|
MB_FNNWST:
|
|
CALL MB_CHRGTR
|
|
LD A, C
|
|
CP ERRFN
|
|
LD A, (HL)
|
|
JP Z, MB_NXTLOK
|
|
CP _WHILE
|
|
JP Z, MB_FORINC
|
|
CP _WEND
|
|
JP NZ, MB_FNLOP
|
|
DEC B
|
|
JP NZ, MB_FNLOP
|
|
RET
|
|
MB_NXTLOK:
|
|
CP _FOR
|
|
JP Z, MB_FORINC
|
|
CP _NEXT
|
|
JP NZ, MB_FNLOP
|
|
MB_DECNXT:
|
|
DEC B
|
|
RET Z
|
|
; SCAN THE VARIABLES LISTED IN A "NEXT" STATEMENT
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_FORTRM
|
|
EX DE, HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
PUSH HL
|
|
LD HL, (MB_NXTLIN)
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
EX DE, HL
|
|
PUSH BC
|
|
CALL MB_PTRGET
|
|
POP BC
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
LD DE, MB_FORTRM
|
|
JP Z, MB_TRMNXT
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
DEC HL
|
|
LD DE, MB_DECNXT
|
|
MB_TRMNXT:
|
|
EX (SP), HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
POP HL
|
|
PUSH DE
|
|
RET
|
|
MB_FINOVC:
|
|
PUSH AF
|
|
LD A, (MB_FLGOVC)
|
|
LD (MB_OVCSTR), A
|
|
POP AF
|
|
MB_CLROVC:
|
|
PUSH AF
|
|
XOR A
|
|
LD (MB_FLGOVC), A
|
|
POP AF
|
|
RET
|
|
|
|
; ===================================================
|
|
; FLOATING POINT ADDITION AND SUBTRACTION
|
|
; F4.MAC
|
|
; ===================================================
|
|
|
|
; ---------------------------------------------------
|
|
; ENTRY TO FADD WITH POINTER TO ARG IN (HL)
|
|
; ---------------------------------------------------
|
|
MB_FADDH:
|
|
LD HL, MB_FHALF
|
|
MB_FADDS:
|
|
CALL MB_MOVRM
|
|
JP MB_FADD
|
|
MB_FSUBS:
|
|
CALL MB_MOVRM
|
|
MB_FSUB:
|
|
CALL MB_NEG
|
|
MB_FADD:
|
|
LD A, B
|
|
OR A
|
|
RET Z
|
|
LD A, (MB_FAC)
|
|
OR A
|
|
JP Z, MB_MOVFR
|
|
SUB B
|
|
JP NC, MB_FADD1
|
|
CPL
|
|
INC A
|
|
EX DE, HL
|
|
CALL MB_PUSHF
|
|
EX DE, HL
|
|
CALL MB_MOVFR
|
|
POP BC
|
|
POP DE
|
|
MB_FADD1:
|
|
CP 25
|
|
RET NC
|
|
PUSH AF
|
|
CALL MB_UNPACK
|
|
LD H, A
|
|
POP AF
|
|
CALL MB_SHIFTR
|
|
LD A, H
|
|
OR A
|
|
LD HL, MB_FACLO
|
|
JP P, MB_FADD3
|
|
CALL MB_FADDA
|
|
JP NC, MB_ROUND
|
|
INC HL
|
|
INC (HL)
|
|
JP Z, MB_OVFIN4
|
|
LD L, 0x1
|
|
CALL MB_SHRADD
|
|
JP MB_ROUND
|
|
MB_FADD3:
|
|
XOR A
|
|
SUB B
|
|
LD B, A
|
|
LD A, (HL)
|
|
SBC A, E
|
|
LD E, A
|
|
INC HL
|
|
LD A, (HL)
|
|
SBC A, D
|
|
LD D, A
|
|
INC HL
|
|
LD A, (HL)
|
|
SBC A, C
|
|
LD C, A
|
|
MB_FADFLT:
|
|
CALL C, MB_NEGR
|
|
MB_NORMAL:
|
|
LD L, B
|
|
LD H, E
|
|
XOR A
|
|
MB_NORM1:
|
|
LD B, A
|
|
LD A, C
|
|
OR A
|
|
JP NZ, MB_NORM3
|
|
LD C, D
|
|
LD D, H
|
|
LD H, L
|
|
LD L, A
|
|
LD A, B
|
|
SUB 8
|
|
CP 224
|
|
JP NZ, MB_NORM1
|
|
MB_ZERO:
|
|
XOR A
|
|
MB_ZERO0:
|
|
LD (MB_FAC), A
|
|
RET
|
|
MB_NORM2:
|
|
LD A, H
|
|
OR L
|
|
OR D
|
|
JP NZ, MB_NORM2U
|
|
LD A, C
|
|
MB_NORM2F:
|
|
DEC B
|
|
RLA
|
|
JP NC, MB_NORM2F
|
|
INC B
|
|
RRA
|
|
LD C, A
|
|
JP MB_NORM3A
|
|
MB_NORM2U:
|
|
DEC B
|
|
ADD HL, HL
|
|
LD A, D
|
|
RLA
|
|
LD D, A
|
|
LD A, C
|
|
ADC A, A
|
|
LD C, A
|
|
MB_NORM3:
|
|
JP P, MB_NORM2
|
|
MB_NORM3A:
|
|
LD A, B
|
|
LD E, H
|
|
LD B, L
|
|
OR A
|
|
JP Z, MB_ROUND
|
|
LD HL, MB_FAC
|
|
ADD A, (HL)
|
|
LD (HL), A
|
|
JP NC, MB_ZERO
|
|
JP Z, MB_ZERO
|
|
MB_ROUND:
|
|
LD A, B
|
|
MB_ROUNDB:
|
|
LD HL, MB_FAC
|
|
OR A
|
|
CALL M, MB_ROUNDA
|
|
LD B, (HL)
|
|
INC HL
|
|
LD A, (HL)
|
|
AND 0x80
|
|
XOR C
|
|
LD C, A
|
|
JP MB_MOVFR
|
|
MB_ROUNDA:
|
|
INC E
|
|
RET NZ
|
|
INC D
|
|
RET NZ
|
|
INC C
|
|
RET NZ
|
|
LD C, 0x80
|
|
INC (HL)
|
|
RET NZ
|
|
JP MB_OVFIN8
|
|
MB_FADDA:
|
|
LD A, (HL)
|
|
ADD A, E
|
|
LD E, A
|
|
INC HL
|
|
LD A, (HL)
|
|
ADC A, D
|
|
LD D, A
|
|
INC HL
|
|
LD A, (HL)
|
|
ADC A, C
|
|
LD C, A
|
|
RET
|
|
|
|
; ---------------------------------------------------
|
|
MB_NEGR:
|
|
LD HL, MB_FAC+1
|
|
LD A, (HL)
|
|
CPL
|
|
LD (HL), A
|
|
XOR A
|
|
LD L, A
|
|
SUB B
|
|
LD B, A
|
|
LD A, L
|
|
SBC A, E
|
|
LD E, A
|
|
LD A, L
|
|
SBC A, D
|
|
LD D, A
|
|
LD A, L
|
|
SBC A, C
|
|
LD C, A
|
|
RET
|
|
|
|
MB_SHIFTR:
|
|
LD B, 0x0
|
|
|
|
MB_SHFTR1:
|
|
SUB 0x8
|
|
JP C, MB_SHFTR2
|
|
LD B, E
|
|
LD E, D
|
|
LD D, C
|
|
LD C, 0x0
|
|
JP MB_SHFTR1
|
|
|
|
MB_SHFTR2:
|
|
ADD A, 0x9
|
|
LD L, A
|
|
LD A, D
|
|
OR E
|
|
OR B
|
|
JP NZ, MB_SHFTR3
|
|
LD A, C
|
|
|
|
MB_SHFTRF:
|
|
DEC L
|
|
RET Z
|
|
|
|
RRA
|
|
LD C, A
|
|
JP NC, MB_SHFTRF
|
|
JP MB_SHFTC
|
|
MB_SHFTR3:
|
|
XOR A
|
|
DEC L
|
|
RET Z
|
|
LD A, C
|
|
MB_SHRADD:
|
|
RRA
|
|
LD C, A
|
|
MB_SHFTC:
|
|
LD A, D
|
|
RRA
|
|
LD D, A
|
|
LD A, E
|
|
RRA
|
|
LD E, A
|
|
LD A, B
|
|
RRA
|
|
LD B, A
|
|
JP MB_SHFTR3
|
|
|
|
; ---------------------------------------------------
|
|
; NATURAL LOG FUNCTION
|
|
; ---------------------------------------------------
|
|
MB_FONE:
|
|
DB 0,0,0,0x81 ; CONST 1
|
|
|
|
; 2524 COEFFICIENTS
|
|
MB_LOGP: ; 4.8114746
|
|
DB 0x04, 0x9A, 0xF7, 0x19, 0x83, 0x24, 0x63, 0x43, 0x83
|
|
DB 0x75, 0xCD, 0x8D, 0x84, 0xA9, 0x7F, 0x83, 0x82
|
|
|
|
MB_LOGQ:
|
|
DB 0x04, 0x00, 0x00, 0x00, 0x81, 0xE2, 0xB0, 0x4D
|
|
DB 0x83, 0x0A, 0x72, 0x11, 0x83, 0xF4, 0x04, 0x35
|
|
DB 0x7F
|
|
|
|
MB_LOG:
|
|
CALL MB_SIGN
|
|
OR A
|
|
JP PE, MB_FCERR
|
|
CALL MB_LOG2
|
|
LD BC, 0x8031 ;200Q*256+061Q
|
|
LD DE, 0x7218 ;162Q*256+030Q
|
|
JP MB_FMUL
|
|
MB_LOG2:
|
|
CALL MB_MOVRF
|
|
LD A, 0x80
|
|
LD (MB_FAC), A
|
|
XOR B
|
|
PUSH AF
|
|
CALL MB_PUSHF
|
|
LD HL, MB_LOGP
|
|
CALL MB_POLY
|
|
POP BC
|
|
POP HL
|
|
CALL MB_PUSHF
|
|
EX DE, HL
|
|
CALL MB_MOVFR
|
|
LD HL, MB_LOGQ
|
|
CALL MB_POLY
|
|
POP BC
|
|
POP DE
|
|
CALL MB_FDIV
|
|
POP AF
|
|
CALL MB_PUSHF
|
|
CALL MB_FLOAT
|
|
POP BC
|
|
POP DE
|
|
JP MB_FADD
|
|
|
|
; ---------------------------------------------------
|
|
; FLOATING MULTIPLICATION
|
|
; ---------------------------------------------------
|
|
MB_FMUL:
|
|
CALL MB_SIGN
|
|
RET Z
|
|
LD L, 0x0
|
|
CALL MB_MULDIV
|
|
LD A, C
|
|
LD (MB_FMULTA+1), A
|
|
EX DE, HL
|
|
LD (MB_FMULTB+1), HL
|
|
LD BC, 0x0
|
|
LD D, B
|
|
LD E, B
|
|
LD HL, MB_NORMAL
|
|
PUSH HL
|
|
LD HL, MB_FMULT2
|
|
PUSH HL
|
|
PUSH HL
|
|
LD HL, MB_FACLO
|
|
MB_FMULT2:
|
|
LD A, (HL)
|
|
INC HL
|
|
OR A
|
|
JP Z, MB_FMULT3
|
|
PUSH HL
|
|
EX DE, HL
|
|
LD E, 0x8
|
|
MB_FMULT4:
|
|
RRA
|
|
LD D, A
|
|
LD A, C
|
|
JP NC, MB_FMULT5
|
|
PUSH DE
|
|
MB_FMULTB:
|
|
LD DE, 0x0
|
|
ADD HL, DE
|
|
POP DE
|
|
MB_FMULTA:
|
|
ADC A, 0x0
|
|
MB_FMULT5:
|
|
RRA
|
|
LD C, A
|
|
LD A, H
|
|
RRA
|
|
LD H, A
|
|
LD A, L
|
|
RRA
|
|
LD L, A
|
|
LD A, B
|
|
RRA
|
|
LD B, A
|
|
AND 0x10
|
|
JP Z, MB_FMLT5B
|
|
LD A, B
|
|
OR 0x20
|
|
LD B, A
|
|
MB_FMLT5B:
|
|
DEC E
|
|
LD A, D
|
|
JP NZ, MB_FMULT4
|
|
EX DE, HL
|
|
|
|
; GET POINTER TO NUMBER TO MULTIPLY BY
|
|
MB_POPHRT:
|
|
POP HL
|
|
RET
|
|
MB_FMULT3:
|
|
LD B, E
|
|
LD E, D
|
|
LD D, C
|
|
LD C, A
|
|
RET
|
|
MB_DIV10:
|
|
CALL MB_PUSHF
|
|
LD HL, MB_FTEN ;Const 10.0
|
|
CALL MB_MOVFM
|
|
MB_FDIVT:
|
|
POP BC
|
|
POP DE
|
|
|
|
; ---------------------------------------------------
|
|
; FLOATING DIVISION
|
|
; ---------------------------------------------------
|
|
MB_FDIV:
|
|
CALL MB_SIGN
|
|
JP Z, MB_INTDV1
|
|
LD L, 0xff
|
|
CALL MB_MULDIV
|
|
INC (HL)
|
|
JP Z, MB_OVFIN2
|
|
INC (HL)
|
|
JP Z, MB_OVFIN2
|
|
DEC HL
|
|
LD A, (HL)
|
|
LD (MB_FDIVA+1), A
|
|
DEC HL
|
|
LD A, (HL)
|
|
LD (MB_FDIVB+1), A
|
|
DEC HL
|
|
LD A, (HL)
|
|
LD (MB_FDIVC+1), A
|
|
LD B, C
|
|
EX DE, HL
|
|
XOR A
|
|
LD C, A
|
|
LD D, A
|
|
LD E, A
|
|
LD (MB_FDIVG+1), A
|
|
MB_FDIV1:
|
|
PUSH HL
|
|
PUSH BC
|
|
LD A, L
|
|
MB_FDIVC:
|
|
SUB 0x0
|
|
LD L, A
|
|
LD A, H
|
|
MB_FDIVB:
|
|
SBC A, 0x0
|
|
LD H, A
|
|
LD A, B
|
|
MB_FDIVA:
|
|
SBC A, 0x0
|
|
LD B, A
|
|
MB_FDIVG:
|
|
LD A, 0x0
|
|
SBC A, 0x0
|
|
CCF
|
|
JP NC, MB_FDIV2
|
|
LD (MB_FDIVG+1), A
|
|
POP AF
|
|
POP AF
|
|
SCF
|
|
DB 0xD2
|
|
MB_FDIV2:
|
|
POP BC
|
|
POP HL
|
|
LD A, C
|
|
INC A
|
|
DEC A
|
|
RRA
|
|
JP P, MB_DIV2A
|
|
RLA
|
|
LD A, (MB_FDIVG+1)
|
|
RRA
|
|
AND 0xc0
|
|
PUSH AF
|
|
LD A, B
|
|
OR H
|
|
OR L
|
|
JP Z, MB_DIV2AA
|
|
LD A, 0x20
|
|
MB_DIV2AA:
|
|
POP HL
|
|
OR H
|
|
JP MB_ROUNDB
|
|
MB_DIV2A:
|
|
RLA
|
|
LD A, E
|
|
RLA
|
|
LD E, A
|
|
LD A, D
|
|
RLA
|
|
LD D, A
|
|
LD A, C
|
|
RLA
|
|
LD C, A
|
|
ADD HL, HL
|
|
LD A, B
|
|
MB_FDIV2A:
|
|
RLA
|
|
LD B, A
|
|
LD A, (MB_FDIVG+1)
|
|
RLA
|
|
LD (MB_FDIVG+1), A
|
|
LD A, C
|
|
OR D
|
|
OR E
|
|
JP NZ, MB_FDIV1
|
|
PUSH HL
|
|
LD HL, MB_FAC
|
|
DEC (HL)
|
|
POP HL
|
|
JP NZ, MB_FDIV1
|
|
JP MB_ZERO
|
|
MB_MULDVS:
|
|
LD A, 0xff
|
|
DB 0x2E
|
|
MB_MULDVA:
|
|
XOR A
|
|
LD HL, MB_ARG-1
|
|
LD C, (HL)
|
|
INC HL
|
|
XOR (HL)
|
|
LD B, A
|
|
LD L, 0x0
|
|
MB_MULDIV:
|
|
LD A, B
|
|
OR A
|
|
JP Z, MB_MULDV2
|
|
LD A, L
|
|
LD HL, MB_FAC
|
|
XOR (HL)
|
|
ADD A, B
|
|
LD B, A
|
|
RRA
|
|
XOR B
|
|
LD A, B
|
|
JP P, MB_MULDV1
|
|
ADD A, 0x80
|
|
LD (HL), A
|
|
JP Z, MB_POPHRT
|
|
CALL MB_UNPACK
|
|
LD (HL), A
|
|
MB_DCXHRT:
|
|
DEC HL
|
|
RET
|
|
|
|
|
|
MB_MLDVEX:
|
|
CALL MB_SIGN
|
|
CPL
|
|
POP HL
|
|
MB_MULDV1:
|
|
OR A
|
|
MB_MULDV2:
|
|
POP HL
|
|
JP P, MB_ZERO
|
|
JP MB_OVFIN2
|
|
|
|
; ===================================================
|
|
MB_MUL10:
|
|
CALL MB_MOVRF
|
|
LD A, B
|
|
OR A
|
|
RET Z
|
|
ADD A, 0x2
|
|
JP C, MB_OVFIN3
|
|
LD B, A
|
|
CALL MB_FADD
|
|
LD HL, MB_FAC
|
|
INC (HL)
|
|
RET NZ
|
|
JP MB_OVFIN3
|
|
|
|
; ===================================================
|
|
; SIGN, SGN, FLOAT, NEG AND ABS
|
|
; ===================================================
|
|
MB_SIGN:
|
|
LD A, (MB_FAC)
|
|
OR A
|
|
RET Z
|
|
|
|
MB_SIGNC:
|
|
LD A, (MB_FAC-1) ;FAC-1
|
|
DB 0xFE
|
|
MB_FCOMPS:
|
|
CPL
|
|
MB_ICOMPS:
|
|
RLA
|
|
MB_SIGNS:
|
|
SBC A, A
|
|
RET NZ
|
|
MB_INRART:
|
|
INC A
|
|
RET
|
|
|
|
; ===================================================
|
|
MB_FLOAT:
|
|
LD B, 0x88
|
|
LD DE, 0x0
|
|
MB_FLOATR:
|
|
LD HL, MB_FAC
|
|
LD C, A
|
|
LD (HL), B
|
|
LD B, 0x0
|
|
INC HL
|
|
LD (HL), 0x80
|
|
RLA
|
|
JP MB_FADFLT
|
|
MB_ABS:
|
|
CALL MB_VSIGN
|
|
RET P
|
|
MB_VNEG:
|
|
CALL MB_GETYPR
|
|
JP M, MB_INEG
|
|
JP Z, MB_TMERR
|
|
MB_NEG:
|
|
LD HL, MB_FAC-1
|
|
LD A, (HL)
|
|
XOR 0x80
|
|
LD (HL), A
|
|
RET
|
|
|
|
MB_SGN:
|
|
CALL MB_VSIGN
|
|
MB_CONIA:
|
|
LD L, A
|
|
RLA
|
|
SBC A, A
|
|
LD H, A
|
|
JP MB_MAKINT
|
|
MB_VSIGN:
|
|
CALL MB_GETYPR
|
|
JP Z, MB_TMERR
|
|
JP P, MB_SIGN
|
|
LD HL, (MB_FACLO)
|
|
MB_ISIGN:
|
|
LD A, H
|
|
OR L
|
|
RET Z
|
|
LD A, H
|
|
JP MB_ICOMPS
|
|
|
|
; ===================================================
|
|
MB_PUSHF:
|
|
EX DE, HL
|
|
LD HL, (MB_FACLO)
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD HL, (MB_FAC-1)
|
|
EX (SP), HL
|
|
PUSH HL
|
|
EX DE, HL
|
|
RET
|
|
|
|
MB_MOVFM:
|
|
CALL MB_MOVRM
|
|
MB_MOVFR:
|
|
EX DE, HL
|
|
LD (MB_FACLO), HL
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_FAC-1), HL ;FAC-1
|
|
EX DE, HL
|
|
RET
|
|
|
|
MB_MOVRF:
|
|
LD HL, MB_FACLO
|
|
MB_MOVRM:
|
|
LD E, (HL)
|
|
INC HL
|
|
MB_GETBCD:
|
|
LD D, (HL)
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
MB_INXHRT:
|
|
INC HL
|
|
RET
|
|
|
|
MB_MOVMF:
|
|
LD DE, MB_FACLO
|
|
MB_MOVE:
|
|
LD B, 0x4
|
|
JP MB_MOVE1
|
|
MB_MOVVFM:
|
|
EX DE, HL
|
|
|
|
; ===================================================
|
|
MB_VMOVE:
|
|
LD A, (MB_VALTYP)
|
|
LD B, A
|
|
MB_MOVE1:
|
|
LD A, (DE)
|
|
LD (HL), A
|
|
INC DE
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_MOVE1
|
|
RET
|
|
|
|
MB_UNPACK:
|
|
LD HL, MB_FAC-1 ;FAC-1
|
|
LD A, (HL)
|
|
RLCA
|
|
SCF
|
|
RRA
|
|
LD (HL), A
|
|
CCF
|
|
RRA
|
|
INC HL
|
|
INC HL
|
|
LD (HL), A
|
|
LD A, C
|
|
RLCA
|
|
SCF
|
|
RRA
|
|
LD C, A
|
|
RRA
|
|
XOR (HL)
|
|
RET
|
|
|
|
MB_VMOVFA:
|
|
LD HL, MB_ARGLO
|
|
MB_VMOVFM:
|
|
LD DE, MB_MOVVFM
|
|
JP MB_VMVVFM
|
|
|
|
; ===================================================
|
|
MB_VMOVAF:
|
|
LD HL, MB_ARGLO
|
|
MB_VMOVMF:
|
|
LD DE, MB_VMOVE
|
|
MB_VMVVFM:
|
|
PUSH DE
|
|
LD DE, MB_FACLO
|
|
CALL MB_GETYPR
|
|
RET C
|
|
LD DE, MB_DFACLO
|
|
RET
|
|
|
|
; ===================================================
|
|
MB_FCOMP:
|
|
LD A, B
|
|
OR A
|
|
JP Z, MB_SIGN
|
|
LD HL, MB_FCOMPS
|
|
PUSH HL
|
|
CALL MB_SIGN
|
|
LD A, C
|
|
RET Z
|
|
LD HL, MB_FAC-1 ;FAC-1
|
|
XOR (HL)
|
|
LD A, C
|
|
RET M
|
|
CALL MB_FCOMP2
|
|
MB_FCOMPD:
|
|
RRA
|
|
XOR C
|
|
RET
|
|
|
|
MB_FCOMP2:
|
|
INC HL
|
|
LD A, B
|
|
CP (HL)
|
|
RET NZ
|
|
DEC HL
|
|
LD A, C
|
|
CP (HL)
|
|
RET NZ
|
|
DEC HL
|
|
LD A, D
|
|
CP (HL)
|
|
RET NZ
|
|
DEC HL
|
|
LD A, E
|
|
SUB (HL)
|
|
RET NZ
|
|
POP HL
|
|
POP HL
|
|
RET
|
|
|
|
MB_ICOMP:
|
|
LD A, D
|
|
XOR H
|
|
LD A, H
|
|
JP M, MB_ICOMPS
|
|
CP D
|
|
JP NZ, MB_SIGNS1
|
|
LD A, L
|
|
SUB E
|
|
RET Z
|
|
|
|
MB_SIGNS1:
|
|
JP MB_SIGNS
|
|
|
|
; --------------------------------------------------
|
|
; COMPARE TWO DOUBLE PRECISION NUMBERS
|
|
; A=1 IF ARG .LT. FAC
|
|
; A=0 IF ARG=FAC
|
|
; A=-1 IF ARG .GT. FAC
|
|
; ALTERS A,B,C,D,E,H,L
|
|
; --------------------------------------------------
|
|
MB_DCOMPD:
|
|
LD HL, MB_ARGLO
|
|
CALL MB_VMOVE
|
|
MB_XDCOMP:
|
|
LD DE, MB_ARG
|
|
LD A, (DE)
|
|
OR A
|
|
JP Z, MB_SIGN
|
|
LD HL, MB_FCOMPS
|
|
PUSH HL
|
|
CALL MB_SIGN
|
|
DEC DE
|
|
LD A, (DE)
|
|
LD C, A
|
|
RET Z
|
|
|
|
LD HL, MB_FAC-1 ;FAC-1
|
|
XOR (HL)
|
|
LD A, C
|
|
RET M
|
|
INC DE
|
|
INC HL
|
|
LD B, 0x8
|
|
MB_DCOMP1:
|
|
LD A, (DE)
|
|
SUB (HL)
|
|
JP NZ, MB_FCOMPD
|
|
DEC DE
|
|
DEC HL
|
|
DEC B
|
|
JP NZ, MB_DCOMP1
|
|
POP BC
|
|
RET
|
|
|
|
MB_DCOMP:
|
|
CALL MB_XDCOMP
|
|
JP NZ, MB_FCOMPS
|
|
RET
|
|
|
|
MB_FRCINT:
|
|
CALL MB_GETYPR
|
|
LD HL, (MB_FACLO)
|
|
RET M
|
|
JP Z, MB_TMERR
|
|
JP PO, MB_FRCIN2
|
|
MB_FDBINT:
|
|
CALL MB_VMOVAF
|
|
LD HL, MB_DHALF
|
|
CALL MB_VMOVFM
|
|
CALL MB_DADD
|
|
CALL MB_CONSD
|
|
JP MB_FRCIN3
|
|
|
|
MB_FRCIN2:
|
|
CALL MB_FADDH
|
|
|
|
MB_FRCIN3:
|
|
LD A, (MB_FAC-1) ;FAC-1
|
|
OR A
|
|
PUSH AF
|
|
AND 0x7f
|
|
LD (MB_FAC-1), A ;FAC-1
|
|
LD A, (MB_FAC)
|
|
CP 0x90
|
|
JP NC, MB_OVERR
|
|
CALL MB_QINT
|
|
LD A, (MB_FAC)
|
|
OR A
|
|
JP NZ, MB_FRCIAA
|
|
POP AF
|
|
EX DE, HL
|
|
JP MB_FRCI3A
|
|
MB_FRCIAA:
|
|
POP AF
|
|
EX DE, HL
|
|
JP P, MB_FRCIN4
|
|
MB_FRCI3A:
|
|
LD A, H
|
|
CPL
|
|
LD H, A
|
|
LD A, L
|
|
CPL
|
|
LD L, A
|
|
MB_FRCIN4:
|
|
JP MB_MAKINT
|
|
;CONVERT SINGLE PRECISION NUMBER TO INTEGER
|
|
MB_COSIN:
|
|
LD HL, MB_OVERR
|
|
PUSH HL
|
|
MB_CONIS:
|
|
LD A, (MB_FAC)
|
|
CP 0x90
|
|
JP NC, MB_CONIS2
|
|
CALL MB_QINT
|
|
EX DE, HL
|
|
MB_CONIS1:
|
|
POP DE
|
|
MB_MAKINT:
|
|
LD (MB_FACLO), HL
|
|
MB_VALINT:
|
|
LD A, 0x2
|
|
MB_CONISD:
|
|
LD (MB_VALTYP), A
|
|
RET
|
|
MB_CONIS2:
|
|
LD BC, 0x9080 ;220Q*256+200Q
|
|
LD DE, 0x0
|
|
CALL MB_FCOMP
|
|
RET NZ
|
|
LD H, C
|
|
LD L, D
|
|
JP MB_CONIS1
|
|
MB_FRCSNG:
|
|
CALL MB_GETYPR
|
|
RET PO
|
|
JP M, MB_CONSI
|
|
JP Z, MB_TMERR
|
|
MB_CONSD:
|
|
CALL MB_MOVRF
|
|
CALL MB_VALSNG
|
|
LD A, B
|
|
OR A
|
|
RET Z
|
|
CALL MB_UNPACK
|
|
LD HL, MB_FACLO - 1
|
|
LD B, (HL)
|
|
JP MB_ROUND
|
|
|
|
; ===================================================
|
|
MB_CONSI:
|
|
LD HL, (MB_FACLO)
|
|
MB_CONSIH:
|
|
CALL MB_VALSNG
|
|
LD A, H
|
|
LD D, L
|
|
LD E, 0x0
|
|
LD B, 0x90
|
|
JP MB_FLOATR
|
|
MB_FRCDBL:
|
|
CALL MB_GETYPR
|
|
RET NC
|
|
JP Z, MB_TMERR
|
|
CALL M, MB_CONSI
|
|
|
|
; ===================================================
|
|
MB_CONDS:
|
|
LD HL, 0x0
|
|
LD (MB_DFACLO), HL
|
|
LD (MB_DFACLO+2), HL
|
|
MB_VALDBL:
|
|
LD A, 0x8
|
|
DB 1
|
|
MB_VALSNG:
|
|
LD A, 0x4
|
|
JP MB_CONISD
|
|
|
|
; ===================================================
|
|
MB_CHKSTR:
|
|
CALL MB_GETYPR
|
|
RET Z
|
|
JP MB_TMERR
|
|
|
|
; ---------------------------------------------------
|
|
; GREATEST INTEGER FUNCTION
|
|
; ---------------------------------------------------
|
|
MB_QINT:
|
|
LD B, A
|
|
LD C, A
|
|
LD D, A
|
|
LD E, A
|
|
OR A
|
|
RET Z
|
|
PUSH HL
|
|
CALL MB_MOVRF
|
|
CALL MB_UNPACK
|
|
XOR (HL)
|
|
LD H, A
|
|
CALL M, MB_QINTA
|
|
LD A, 152
|
|
SUB B
|
|
CALL MB_SHIFTR
|
|
LD A, H
|
|
RLA
|
|
CALL C, MB_ROUNDA
|
|
LD B, 0x0
|
|
CALL C, MB_NEGR
|
|
POP HL
|
|
RET
|
|
|
|
MB_QINTA:
|
|
DEC DE
|
|
LD A, D
|
|
AND E
|
|
INC A
|
|
RET NZ
|
|
MB_DCXBRT:
|
|
DEC BC
|
|
RET
|
|
MB_FIXER:
|
|
CALL MB_GETYPR
|
|
RET M
|
|
CALL MB_SIGN
|
|
JP P, MB_VINT
|
|
CALL MB_NEG
|
|
CALL MB_VINT
|
|
JP MB_VNEG
|
|
|
|
MB_VINT:
|
|
CALL MB_GETYPR
|
|
RET M
|
|
JP NC, MB_DINT
|
|
JP Z, MB_TMERR
|
|
CALL MB_CONIS
|
|
|
|
MB_INT:
|
|
LD HL, MB_FAC
|
|
LD A, (HL)
|
|
CP 0x98
|
|
LD A, (MB_FACLO)
|
|
RET NC
|
|
LD A, (HL)
|
|
CALL MB_QINT
|
|
LD (HL), 0x98
|
|
LD A, E
|
|
PUSH AF
|
|
LD A, C
|
|
RLA
|
|
CALL MB_FADFLT
|
|
POP AF
|
|
RET
|
|
|
|
MB_DINT:
|
|
LD HL, MB_FAC
|
|
LD A, (HL)
|
|
CP 0x90
|
|
JP NZ, MB_DINT2
|
|
LD C, A
|
|
DEC HL
|
|
LD A, (HL)
|
|
XOR 0x80
|
|
LD B, 0x6
|
|
MB_DINT1:
|
|
DEC HL
|
|
OR (HL)
|
|
DEC B
|
|
JP NZ, MB_DINT1
|
|
OR A
|
|
LD HL, 0x8000
|
|
JP NZ, MB_DIN05
|
|
CALL MB_MAKINT
|
|
JP MB_FRCDBL
|
|
MB_DIN05:
|
|
LD A, C
|
|
MB_DINT2:
|
|
OR A
|
|
RET Z
|
|
CP 184
|
|
RET NC
|
|
|
|
MB_DINTFO:
|
|
PUSH AF
|
|
CALL MB_MOVRF
|
|
CALL MB_UNPACK
|
|
XOR (HL)
|
|
DEC HL
|
|
LD (HL), 0xb8
|
|
PUSH AF
|
|
DEC HL
|
|
LD (HL), C
|
|
CALL M, MB_DINTA
|
|
LD A, (MB_FAC-1) ;FAC-1
|
|
LD C, A
|
|
LD HL, MB_FAC-1 ;FAC-1
|
|
LD A, 184
|
|
SUB B
|
|
CALL MB_DSHFTR
|
|
POP AF
|
|
CALL M, MB_DROUNA
|
|
XOR A
|
|
LD (MB_FLOAT_ACC), A
|
|
POP AF
|
|
RET NC
|
|
JP MB_DNORML
|
|
MB_DINTA:
|
|
LD HL, MB_DFACLO
|
|
MB_DINTA1:
|
|
LD A, (HL)
|
|
DEC (HL)
|
|
OR A
|
|
INC HL
|
|
JP Z, MB_DINTA1
|
|
RET
|
|
|
|
MB_UMULT:
|
|
PUSH HL
|
|
LD HL, 0x0
|
|
LD A, B
|
|
OR C
|
|
JP Z, MB_MULRET
|
|
LD A, 0x10
|
|
MB_UMULT1:
|
|
ADD HL, HL
|
|
JP C, MB_BSERR
|
|
EX DE, HL
|
|
ADD HL, HL
|
|
EX DE, HL
|
|
JP NC, MB_UMULT2
|
|
ADD HL, BC
|
|
JP C, MB_BSERR
|
|
MB_UMULT2:
|
|
DEC A
|
|
JP NZ, MB_UMULT1
|
|
MB_MULRET:
|
|
EX DE, HL
|
|
POP HL
|
|
RET
|
|
|
|
MB_ISUB:
|
|
LD A, H
|
|
RLA
|
|
SBC A, A
|
|
LD B, A
|
|
CALL MB_INEGHL
|
|
LD A, C
|
|
SBC A, B
|
|
JP MB_IADDS
|
|
MB_IADD:
|
|
LD A, H
|
|
RLA
|
|
SBC A, A
|
|
MB_IADDS:
|
|
LD B, A
|
|
PUSH HL
|
|
LD A, D
|
|
RLA
|
|
SBC A, A
|
|
ADD HL, DE
|
|
ADC A, B
|
|
RRCA
|
|
XOR H
|
|
JP P, MB_CONIS1
|
|
PUSH BC
|
|
EX DE, HL
|
|
CALL MB_CONSIH
|
|
POP AF
|
|
POP HL
|
|
CALL MB_PUSHF
|
|
EX DE, HL
|
|
CALL MB_INEGAD
|
|
JP MB_FADDT
|
|
MB_IMUL:
|
|
LD A, H
|
|
OR L
|
|
JP Z, MB_MAKINT
|
|
PUSH HL
|
|
PUSH DE
|
|
CALL MB_IMULDV
|
|
PUSH BC
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, 0x0
|
|
LD A, 0x10
|
|
MB_IMULT1:
|
|
ADD HL, HL
|
|
JP C, MB_IMULT5
|
|
EX DE, HL
|
|
ADD HL, HL
|
|
EX DE, HL
|
|
JP NC, MB_IMULT2
|
|
ADD HL, BC
|
|
JP C, MB_IMULT5
|
|
MB_IMULT2:
|
|
DEC A
|
|
JP NZ, MB_IMULT1
|
|
POP BC
|
|
POP DE
|
|
MB_IMLDIV:
|
|
LD A, H
|
|
OR A
|
|
JP M, MB_IMULT3
|
|
POP DE
|
|
LD A, B
|
|
JP MB_INEGA
|
|
MB_IMULT3:
|
|
XOR 0x80
|
|
OR L
|
|
JP Z, MB_IMULT4
|
|
EX DE, HL
|
|
DB 1
|
|
MB_IMULT5:
|
|
POP BC
|
|
POP HL
|
|
CALL MB_CONSIH
|
|
POP HL
|
|
CALL MB_PUSHF
|
|
CALL MB_CONSIH
|
|
MB_FMULTT:
|
|
POP BC
|
|
POP DE
|
|
JP MB_FMUL
|
|
MB_IMULT4:
|
|
LD A, B
|
|
OR A
|
|
POP BC
|
|
JP M, MB_MAKINT
|
|
PUSH DE
|
|
CALL MB_CONSIH
|
|
POP DE
|
|
JP MB_NEG
|
|
MB_IDIV:
|
|
LD A, H
|
|
OR L
|
|
JP Z, MB_DV0ERR
|
|
CALL MB_IMULDV
|
|
PUSH BC
|
|
EX DE, HL
|
|
CALL MB_INEGHL
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, 0x0
|
|
LD A, 0x11
|
|
PUSH AF
|
|
OR A
|
|
JP MB_IDIV3
|
|
MB_IDIV1:
|
|
PUSH AF
|
|
PUSH HL
|
|
ADD HL, BC
|
|
JP NC, MB_IDIV2
|
|
POP AF
|
|
SCF
|
|
DB 0x3E
|
|
MB_IDIV2:
|
|
POP HL
|
|
MB_IDIV3:
|
|
LD A, E
|
|
RLA
|
|
LD E, A
|
|
LD A, D
|
|
RLA
|
|
LD D, A
|
|
LD A, L
|
|
RLA
|
|
LD L, A
|
|
LD A, H
|
|
RLA
|
|
LD H, A
|
|
POP AF
|
|
DEC A
|
|
JP NZ, MB_IDIV1
|
|
EX DE, HL
|
|
POP BC
|
|
PUSH DE
|
|
JP MB_IMLDIV
|
|
MB_IMULDV:
|
|
LD A, H
|
|
XOR D
|
|
LD B, A
|
|
CALL MB_INEGH
|
|
EX DE, HL
|
|
MB_INEGH:
|
|
LD A, H
|
|
MB_INEGA:
|
|
OR A
|
|
JP P, MB_MAKINT
|
|
MB_INEGHL:
|
|
XOR A
|
|
LD C, A
|
|
SUB L
|
|
LD L, A
|
|
LD A, C
|
|
SBC A, H
|
|
LD H, A
|
|
JP MB_MAKINT
|
|
MB_INEG:
|
|
LD HL, (MB_FACLO)
|
|
CALL MB_INEGHL
|
|
LD A, H
|
|
XOR 0x80
|
|
OR L
|
|
RET NZ
|
|
MB_INEG2:
|
|
EX DE, HL
|
|
CALL MB_VALSNG
|
|
XOR A
|
|
MB_INEGAD:
|
|
LD B, 0x98
|
|
JP MB_FLOATR
|
|
MB_IMOD:
|
|
PUSH DE
|
|
CALL MB_IDIV
|
|
XOR A
|
|
ADD A, D
|
|
RRA
|
|
LD H, A
|
|
LD A, E
|
|
RRA
|
|
LD L, A
|
|
CALL MB_VALINT
|
|
POP AF
|
|
JP MB_INEGA
|
|
; ===================================================
|
|
; DOUBLE PRECISION ARITHMETIC ROUTINES
|
|
; ===================================================
|
|
MB_DSUB:
|
|
LD HL, MB_ARG-1
|
|
LD A, (HL)
|
|
XOR 0x80
|
|
LD (HL), A
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_DADD:
|
|
LD HL, MB_ARG
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
LD B, A
|
|
DEC HL
|
|
LD C, (HL)
|
|
LD DE, MB_FAC
|
|
LD A, (DE)
|
|
OR A
|
|
JP Z, MB_VMOVFA
|
|
SUB B
|
|
JP NC, MB_DADD2
|
|
CPL
|
|
INC A
|
|
PUSH AF
|
|
LD C, 0x8
|
|
INC HL
|
|
PUSH HL
|
|
MB_DADD1:
|
|
LD A, (DE)
|
|
LD B, (HL)
|
|
LD (HL), A
|
|
LD A, B
|
|
LD (DE), A
|
|
DEC DE
|
|
DEC HL
|
|
DEC C
|
|
JP NZ, MB_DADD1
|
|
POP HL
|
|
LD B, (HL)
|
|
DEC HL
|
|
LD C, (HL)
|
|
POP AF
|
|
MB_DADD2:
|
|
CP 0x39
|
|
RET NC
|
|
PUSH AF
|
|
CALL MB_UNPACK
|
|
LD HL, MB_ARGLO-1 ;ARGLO-1
|
|
LD B, A
|
|
LD A, 0x0
|
|
LD (HL), A
|
|
LD (MB_FLOAT_ACC), A
|
|
POP AF
|
|
LD HL, MB_ARG-1
|
|
CALL MB_DSHFTR
|
|
LD A, B
|
|
OR A
|
|
JP P, MB_DADD3
|
|
LD A, (MB_ARGLO-1)
|
|
LD (MB_FLOAT_ACC), A
|
|
CALL MB_DADDAA
|
|
JP NC, MB_DROUND
|
|
EX DE, HL
|
|
INC (HL)
|
|
JP Z, MB_OVFIN4
|
|
CALL MB_DSHFRB
|
|
JP MB_DROUND
|
|
MB_DADD3:
|
|
LD A, 0x9e
|
|
CALL MB_DADDA
|
|
LD HL, MB_FAC+1
|
|
CALL C, MB_DNEGR
|
|
MB_DNORML:
|
|
XOR A
|
|
MB_DNORM1:
|
|
LD B, A
|
|
LD A, (MB_FAC-1)
|
|
OR A
|
|
JP NZ, MB_DNORM5
|
|
LD HL, MB_DFACLO-1
|
|
LD C, 0x8
|
|
MB_DNORM2:
|
|
LD D, (HL)
|
|
LD (HL), A
|
|
LD A, D
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_DNORM2
|
|
LD A, B
|
|
SUB 0x8
|
|
CP 0xc0
|
|
JP NZ, MB_DNORM1
|
|
JP MB_ZERO
|
|
MB_DNORM3:
|
|
DEC B
|
|
LD HL, MB_FLOAT_ACC
|
|
CALL MB_DSHFLC
|
|
OR A
|
|
MB_DNORM5:
|
|
JP P, MB_DNORM3
|
|
LD A, B
|
|
OR A
|
|
JP Z, MB_DROUND
|
|
LD HL, MB_FAC
|
|
ADD A, (HL)
|
|
LD (HL), A
|
|
JP NC, MB_ZERO
|
|
RET Z
|
|
MB_DROUND:
|
|
LD A, (MB_FLOAT_ACC) ;DFACLO-1
|
|
MB_DROUNB:
|
|
OR A
|
|
CALL M, MB_DROUNA
|
|
LD HL, MB_FAC+1
|
|
LD A, (HL)
|
|
AND 0x80
|
|
DEC HL
|
|
DEC HL
|
|
XOR (HL)
|
|
LD (HL), A
|
|
RET
|
|
MB_DROUNA:
|
|
LD HL, MB_DFACLO
|
|
LD B, 0x7
|
|
MB_DRONA1:
|
|
INC (HL)
|
|
RET NZ
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_DRONA1
|
|
INC (HL)
|
|
JP Z, MB_OVFIN4
|
|
DEC HL
|
|
LD (HL), 0x80
|
|
RET
|
|
|
|
MB_DADDD:
|
|
LD DE, MB_FBUFFR+27
|
|
LD HL, MB_ARGLO
|
|
JP MB_DADDS
|
|
MB_DADDAA:
|
|
DB 0x3E
|
|
ADC A, (HL)
|
|
MB_DADDA:
|
|
LD HL, MB_ARGLO
|
|
MB_DADDFO:
|
|
LD DE, MB_DFACLO
|
|
MB_DADDS:
|
|
LD C, 0x7
|
|
MB_DADDS1:
|
|
LD (MB_DADDOP), A
|
|
XOR A
|
|
MB_DADDL:
|
|
LD A, (DE)
|
|
MB_DADDOP:
|
|
ADC A, (HL)
|
|
LD (DE), A
|
|
INC DE
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_DADDL
|
|
RET
|
|
|
|
MB_DNEGR:
|
|
LD A, (HL)
|
|
CPL
|
|
LD (HL), A
|
|
LD HL, 0xbff
|
|
LD B, 0x8
|
|
XOR A
|
|
LD C, A
|
|
MB_DNEGR1:
|
|
LD A, C
|
|
SBC A, (HL)
|
|
LD (HL), A
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_DNEGR1
|
|
RET
|
|
|
|
MB_DSHFTR:
|
|
LD (HL), C
|
|
PUSH HL
|
|
MB_DSHFR1:
|
|
SUB 0x8
|
|
JP C, MB_DSHFR3
|
|
POP HL
|
|
MB_DSHFRM:
|
|
PUSH HL
|
|
LD DE, 0x800
|
|
MB_DSHFR2:
|
|
LD C, (HL)
|
|
LD (HL), E
|
|
LD E, C
|
|
DEC HL
|
|
DEC D
|
|
JP NZ, MB_DSHFR2
|
|
JP MB_DSHFR1
|
|
|
|
MB_DSHFR3:
|
|
ADD A, 0x9
|
|
LD D, A
|
|
MB_DSHFR4:
|
|
XOR A
|
|
POP HL
|
|
DEC D
|
|
RET Z
|
|
|
|
MB_DSHFRA:
|
|
PUSH HL
|
|
LD E, 0x8
|
|
MB_DSHFR5:
|
|
LD A, (HL)
|
|
RRA
|
|
LD (HL), A
|
|
DEC HL
|
|
DEC E
|
|
JP NZ, MB_DSHFR5
|
|
JP MB_DSHFR4
|
|
MB_DSHFRB:
|
|
LD HL, MB_FAC-1
|
|
LD D, 0x1
|
|
JP MB_DSHFRA
|
|
MB_DSHFLC:
|
|
LD C, 0x8
|
|
MB_DSHFTL:
|
|
LD A, (HL)
|
|
RLA
|
|
LD (HL), A
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_DSHFTL
|
|
RET
|
|
MB_DMULT:
|
|
CALL MB_SIGN
|
|
RET Z
|
|
LD A, (MB_ARG)
|
|
OR A
|
|
JP Z, MB_ZERO
|
|
CALL MB_MULDVA
|
|
CALL MB_DMULDV
|
|
LD (HL), C
|
|
INC DE
|
|
LD B, 0x7
|
|
MB_DMULT2:
|
|
LD A, (DE)
|
|
INC DE
|
|
OR A
|
|
PUSH DE
|
|
JP Z, MB_DMULT5
|
|
LD C, 0x8
|
|
MB_DMULT3:
|
|
PUSH BC
|
|
RRA
|
|
LD B, A
|
|
CALL C, MB_DADDAA
|
|
CALL MB_DSHFRB
|
|
LD A, B
|
|
POP BC
|
|
DEC C
|
|
JP NZ, MB_DMULT3
|
|
MB_DMULT4:
|
|
POP DE
|
|
DEC B
|
|
JP NZ, MB_DMULT2
|
|
JP MB_DNORML
|
|
MB_DMULT5:
|
|
LD HL, MB_FAC-1
|
|
CALL MB_DSHFRM
|
|
JP MB_DMULT4
|
|
|
|
MB_TENTH:
|
|
DB 0xCD, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x4C, 0x7D
|
|
|
|
MB_DTEN:
|
|
DB 0, 0, 0, 0
|
|
|
|
MB_FTEN:
|
|
DB 0, 0, 0x20, 0x84
|
|
|
|
MB_DDIV10:
|
|
LD A, (MB_FAC)
|
|
CP 0x41
|
|
JP NC, MB_DD04
|
|
LD DE, MB_TENTH
|
|
LD HL, MB_ARGLO
|
|
CALL MB_VMOVE
|
|
JP MB_DMULT
|
|
MB_DD04:
|
|
LD A, (MB_FAC-1)
|
|
OR A
|
|
JP P, MB_DD05
|
|
AND 0x7f
|
|
LD (MB_FAC-1), A
|
|
LD HL, MB_NEG
|
|
PUSH HL
|
|
MB_DD05:
|
|
CALL _DECF1
|
|
LD DE, MB_DFACLO
|
|
LD HL, MB_ARGLO
|
|
CALL MB_VMOVE
|
|
CALL _DECF1
|
|
CALL MB_DADD
|
|
LD DE, MB_DFACLO
|
|
LD HL, MB_ARGLO
|
|
CALL MB_VMOVE
|
|
LD A, 0xf
|
|
MB_DD10:
|
|
PUSH AF
|
|
CALL _DECA4
|
|
CALL _PSARG
|
|
CALL MB_DADD
|
|
;LAB_ram_2dfd:
|
|
LD HL, MB_ARG-1
|
|
CALL _PPARG
|
|
POP AF
|
|
DEC A
|
|
JP NZ, MB_DD10
|
|
CALL _DECF1
|
|
CALL _DECF1
|
|
_DECF1:
|
|
LD HL, MB_FAC
|
|
DEC (HL)
|
|
RET NZ
|
|
JP MB_ZERO
|
|
|
|
_DECA4:
|
|
LD HL, MB_ARG
|
|
LD A, 0x4
|
|
MB_DC4:
|
|
DEC (HL)
|
|
RET Z
|
|
DEC A
|
|
JP NZ, MB_DC4
|
|
RET
|
|
|
|
_PSARG:
|
|
POP DE
|
|
LD A, 0x4
|
|
LD HL, MB_ARGLO
|
|
MB_PSA10:
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
PUSH BC
|
|
DEC A
|
|
JP NZ, MB_PSA10
|
|
PUSH DE
|
|
RET
|
|
|
|
_PPARG:
|
|
POP DE
|
|
LD A, 0x4
|
|
LD HL, MB_ARG
|
|
|
|
MB_PPA10:
|
|
POP BC
|
|
LD (HL), B
|
|
DEC HL
|
|
LD (HL), C
|
|
DEC HL
|
|
DEC A
|
|
JP NZ, MB_PPA10
|
|
PUSH DE
|
|
RET
|
|
MB_DDIV:
|
|
LD A, (MB_ARG)
|
|
OR A
|
|
JP Z, MB_INTDV0
|
|
LD A, (MB_FAC)
|
|
OR A
|
|
JP Z, MB_ZERO
|
|
CALL MB_MULDVS
|
|
INC (HL)
|
|
INC (HL)
|
|
JP Z, MB_OVFIN4
|
|
CALL MB_DMULDV
|
|
LD HL, MB_FBUFFR+34
|
|
LD (HL), C
|
|
LD B, C
|
|
MB_DDIV1:
|
|
DB 0x3E
|
|
SBC A, (HL)
|
|
CALL MB_DADDD
|
|
LD A, (DE)
|
|
SBC A, C
|
|
CCF
|
|
JP C, MB_DDIV2
|
|
DB 0x3E
|
|
ADC A, (HL)
|
|
CALL MB_DADDD
|
|
XOR A
|
|
DB 0xDA
|
|
MB_DDIV2:
|
|
LD (DE), A
|
|
INC B
|
|
LD A, (MB_FAC-1)
|
|
INC A
|
|
DEC A
|
|
RRA
|
|
JP M, MB_DROUNB
|
|
RLA
|
|
LD HL, MB_DFACLO
|
|
LD C, 0x7
|
|
CALL MB_DSHFTL
|
|
LD HL, MB_FBUFFR+27
|
|
CALL MB_DSHFLC
|
|
LD A, B
|
|
OR A
|
|
JP NZ, MB_DDIV1
|
|
LD HL, MB_FAC
|
|
DEC (HL)
|
|
JP NZ, MB_DDIV1
|
|
JP MB_ZERO
|
|
MB_DMULDV:
|
|
LD A, C
|
|
LD (MB_ARG-1), A
|
|
DEC HL
|
|
LD DE, MB_FBUFFR+33
|
|
LD BC, 0x700
|
|
MB_DMLDV1:
|
|
LD A, (HL)
|
|
LD (DE), A
|
|
LD (HL), C
|
|
DEC DE
|
|
DEC HL
|
|
DEC B
|
|
JP NZ, MB_DMLDV1
|
|
RET
|
|
|
|
; ===================================================
|
|
MB_DMUL10:
|
|
CALL MB_VMOVAF
|
|
EX DE, HL
|
|
DEC HL
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
ADD A, 0x2
|
|
JP C, MB_OVFIN4
|
|
LD (HL), A
|
|
PUSH HL
|
|
CALL MB_DADD
|
|
POP HL
|
|
INC (HL)
|
|
RET NZ
|
|
JP MB_OVFIN4
|
|
|
|
; ===================================================
|
|
MB_FINDBL:
|
|
CALL MB_ZERO
|
|
CALL MB_VALDBL
|
|
DB 0xF6
|
|
|
|
; ===================================================
|
|
MB_FIN:
|
|
XOR A
|
|
LD BC, MB_FINOVC
|
|
PUSH BC
|
|
PUSH AF
|
|
LD A, 0x1
|
|
LD (MB_FLGOVC), A
|
|
POP AF
|
|
EX DE, HL
|
|
LD BC, 0xff
|
|
LD H, B
|
|
LD L, B
|
|
CALL Z, MB_MAKINT
|
|
EX DE, HL
|
|
LD A, (HL) ;= 44
|
|
CP '&'
|
|
JP Z, MB_OCTCNS
|
|
CP '-'
|
|
PUSH AF
|
|
JP Z, MB_FINC
|
|
CP '+'
|
|
JP Z, MB_FINC
|
|
DEC HL
|
|
|
|
MB_FINC:
|
|
CALL MB_CHRGTR
|
|
JP C, MB_FINDIG
|
|
CP '.'
|
|
JP Z, MB_FINDP
|
|
CP 'e'
|
|
JP Z, MB_FINC1
|
|
CP 'E'
|
|
|
|
MB_FINC1:
|
|
JP NZ, MB_NOTE
|
|
PUSH HL
|
|
CALL MB_CHRGTR
|
|
CP 'l'
|
|
JP Z, MB_WUZELS
|
|
CP 'L'
|
|
JP Z, MB_WUZELS
|
|
CP 'q'
|
|
JP Z, MB_WUZELS
|
|
CP 'Q'
|
|
|
|
MB_WUZELS:
|
|
POP HL
|
|
JP Z, MB_WUZ
|
|
LD A, (MB_VALTYP)
|
|
CP 0x8
|
|
JP Z, MB_FINEX1
|
|
LD A, 0x0
|
|
JP MB_FINEX1
|
|
MB_WUZ:
|
|
LD A, (HL)
|
|
MB_NOTE:
|
|
CP '%'
|
|
JP Z, MB_FININT
|
|
CP '#'
|
|
JP Z, MB_FINDBF
|
|
CP '!'
|
|
JP Z, MB_FINSNF
|
|
CP 'd'
|
|
JP Z, MB_FINEX1
|
|
CP 'D'
|
|
JP NZ, MB_FINE
|
|
MB_FINEX1:
|
|
OR A
|
|
MB_FINEX:
|
|
CALL MB_FINFRC
|
|
CALL MB_CHRGTR
|
|
CALL MB_MINPLS
|
|
MB_FINEC:
|
|
CALL MB_CHRGTR
|
|
JP C, MB_FINEDG
|
|
INC D
|
|
JP NZ, MB_FINE
|
|
XOR A
|
|
SUB E
|
|
LD E, A
|
|
MB_FINE:
|
|
PUSH HL
|
|
LD A, E
|
|
SUB B
|
|
LD E, A
|
|
MB_FINE2:
|
|
CALL P, MB_FINMUL
|
|
CALL M, MB_FINDIV
|
|
JP NZ, MB_FINE2
|
|
POP HL
|
|
POP AF
|
|
PUSH HL
|
|
CALL Z, MB_VNEG
|
|
POP HL
|
|
CALL MB_GETYPR
|
|
RET PE
|
|
PUSH HL
|
|
LD HL, MB_POPHRT
|
|
PUSH HL
|
|
CALL MB_CONIS2
|
|
RET
|
|
|
|
MB_FINDP:
|
|
CALL MB_GETYPR
|
|
INC C
|
|
JP NZ, MB_FINE
|
|
CALL C, MB_FINFRC
|
|
JP MB_FINC
|
|
MB_FININT:
|
|
CALL MB_CHRGTR
|
|
POP AF
|
|
PUSH HL
|
|
LD HL, MB_POPHRT
|
|
PUSH HL
|
|
LD HL, MB_FRCINT
|
|
PUSH HL
|
|
PUSH AF
|
|
JP MB_FINE
|
|
MB_FINDBF:
|
|
OR A
|
|
MB_FINSNF:
|
|
CALL MB_FINFRC
|
|
CALL MB_CHRGTR
|
|
JP MB_FINE
|
|
MB_FINFRC:
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
CALL Z, MB_FRCSNG
|
|
POP AF
|
|
CALL NZ, MB_FRCDBL
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
RET
|
|
|
|
MB_FINMUL:
|
|
RET Z
|
|
|
|
MB_FINMLT:
|
|
PUSH AF
|
|
CALL MB_GETYPR
|
|
PUSH AF
|
|
CALL PO, MB_MUL10
|
|
POP AF
|
|
CALL PE, MB_DMUL10
|
|
POP AF
|
|
MB_DCRART:
|
|
DEC A
|
|
RET
|
|
|
|
MB_FINDIV:
|
|
PUSH DE
|
|
PUSH HL
|
|
PUSH AF
|
|
CALL MB_GETYPR
|
|
PUSH AF
|
|
CALL PO, MB_DIV10
|
|
POP AF
|
|
CALL PE, MB_DDIV10
|
|
POP AF
|
|
POP HL
|
|
POP DE
|
|
INC A
|
|
RET
|
|
|
|
MB_FINDIG:
|
|
PUSH DE
|
|
LD A, B
|
|
ADC A, C
|
|
LD B, A
|
|
PUSH BC
|
|
PUSH HL
|
|
LD A, (HL)
|
|
SUB '0'
|
|
PUSH AF
|
|
CALL MB_GETYPR
|
|
JP P, MB_FINDGV
|
|
LD HL, (MB_FACLO)
|
|
LD DE, 3277 ; check for overflov
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_FINDG2
|
|
LD D, H
|
|
LD E, L
|
|
ADD HL, HL
|
|
ADD HL, HL
|
|
ADD HL, DE
|
|
ADD HL, HL
|
|
POP AF
|
|
LD C, A
|
|
ADD HL, BC
|
|
LD A, H
|
|
OR A
|
|
JP M, MB_FINDG1
|
|
LD (MB_FACLO), HL
|
|
MB_FINDGE:
|
|
POP HL
|
|
POP BC
|
|
POP DE
|
|
JP MB_FINC
|
|
MB_FINDG1:
|
|
LD A, C
|
|
PUSH AF
|
|
MB_FINDG2:
|
|
CALL MB_CONSI
|
|
SCF
|
|
|
|
MB_FINDGV:
|
|
JP NC, MB_FINDGD
|
|
LD BC, 0x9474
|
|
LD DE, 0x2400
|
|
CALL MB_FCOMP
|
|
JP P, MB_FINDG3
|
|
CALL MB_MUL10
|
|
POP AF
|
|
CALL MB_FINLOG
|
|
JP MB_FINDGE
|
|
|
|
MB_FINDG3:
|
|
CALL MB_CONDS
|
|
MB_FINDGD:
|
|
CALL MB_DMUL10
|
|
CALL MB_VMOVAF
|
|
POP AF
|
|
CALL MB_FLOAT
|
|
CALL MB_CONDS
|
|
CALL MB_DADD
|
|
JP MB_FINDGE
|
|
MB_FINLOG:
|
|
CALL MB_PUSHF
|
|
CALL MB_FLOAT
|
|
MB_FADDT:
|
|
POP BC
|
|
POP DE
|
|
JP MB_FADD
|
|
MB_FINEDG:
|
|
LD A, E
|
|
CP 0xa
|
|
JP NC, MB_FINEDO
|
|
RLCA
|
|
RLCA
|
|
ADD A, E
|
|
RLCA
|
|
ADD A, (HL)
|
|
SUB '0'
|
|
LD E, A
|
|
DB 0xFA
|
|
MB_FINEDO:
|
|
LD E, 0x7f
|
|
JP MB_FINEC
|
|
MB_OVFIN2:
|
|
PUSH HL
|
|
LD HL, MB_FAC-1
|
|
CALL MB_GETYPR
|
|
JP PO, MB_OVF2A
|
|
LD A, (MB_ARG-1)
|
|
JP MB_OVF2B
|
|
MB_OVF2A:
|
|
LD A, C
|
|
MB_OVF2B:
|
|
XOR (HL)
|
|
RLA
|
|
POP HL
|
|
JP MB_OVFINT
|
|
MB_OVFIN6:
|
|
POP AF
|
|
POP AF
|
|
MB_OVFIN3:
|
|
LD A, (MB_FAC-1)
|
|
RLA
|
|
JP MB_OVFINT
|
|
MB_OVFIN8:
|
|
POP AF
|
|
MB_OVFIN4:
|
|
LD A, (MB_FAC+1)
|
|
CPL
|
|
RLA
|
|
JP MB_OVFINT
|
|
MB_INTDV1:
|
|
LD A, C
|
|
JP MB_INTDV2
|
|
MB_INTDV0:
|
|
LD A, (MB_ARG-1)
|
|
MB_INTDV2:
|
|
RLA
|
|
LD HL, MB_DBZ_MSG ;= "Division by zero"
|
|
LD (MB_OVERRI), HL ;= 509h
|
|
MB_OVFINT:
|
|
PUSH HL
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH AF
|
|
PUSH AF
|
|
LD HL, (MB_ONELIN)
|
|
LD A, H
|
|
OR L
|
|
JP NZ, MB_OVFPRT
|
|
LD HL, MB_FLGOVC
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_OV1A
|
|
DEC A
|
|
JP NZ, MB_OVFPRT
|
|
INC (HL)
|
|
MB_OV1A:
|
|
LD HL, (MB_OVERRI) ; = 509h
|
|
CALL MB_STRPRN
|
|
LD (MB_TTYPOS), A
|
|
LD A, 0xd
|
|
CALL MB_CALTTY
|
|
LD A, 0xa
|
|
CALL MB_CALTTY
|
|
MB_OVFPRT:
|
|
POP AF
|
|
LD HL, MB_FACLO
|
|
LD DE, MB_INFP
|
|
JP NC, MB_OVFINA
|
|
LD DE, MB_INFM
|
|
MB_OVFINA:
|
|
CALL MB_MOVE
|
|
CALL MB_GETYPR
|
|
JP C, MB_OVFINB
|
|
LD HL, MB_DFACLO
|
|
LD DE, MB_INFM
|
|
CALL MB_MOVE
|
|
MB_OVFINB:
|
|
LD HL, (MB_ONELIN)
|
|
LD A, H
|
|
OR L
|
|
LD HL, (MB_OVERRI) ; = 509h
|
|
LD DE, MB_OVRMSG ; = "Overflow"
|
|
EX DE, HL
|
|
LD (MB_OVERRI), HL ; = 509h
|
|
JP Z, MB_NOODTP
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_OVERR
|
|
JP MB_DV0ERR
|
|
MB_NOODTP:
|
|
POP AF
|
|
POP DE
|
|
POP BC
|
|
POP HL
|
|
RET
|
|
|
|
MB_INFP:
|
|
DB 0xFF, 0xFF, 0x7F, 0xFF
|
|
|
|
MB_INFM:
|
|
DB 0xFF, 0xFF, 0xFF, 0xFF
|
|
|
|
; ===================================================
|
|
; FLOATING POINT OUTPUT ROUTINE
|
|
; ===================================================
|
|
MB_INPRT:
|
|
PUSH HL
|
|
LD HL, MB_INTXT ;= " in "
|
|
CALL MB_STROUT
|
|
POP HL
|
|
MB_LINPTR:
|
|
LD BC, MB_STROUI
|
|
PUSH BC
|
|
MB_LINOUT:
|
|
CALL MB_MAKINT
|
|
XOR A
|
|
CALL MB_FOUINI
|
|
OR (HL)
|
|
JP MB_FOUT2
|
|
MB_FOUT:
|
|
XOR A
|
|
MB_PUFOUT:
|
|
CALL MB_FOUINI
|
|
AND 0x8
|
|
JP Z, MB_FOUT1
|
|
LD (HL), '+'
|
|
MB_FOUT1:
|
|
EX DE, HL
|
|
CALL MB_VSIGN
|
|
EX DE, HL
|
|
JP P, MB_FOUT2
|
|
LD (HL), '-'
|
|
PUSH BC
|
|
PUSH HL
|
|
CALL MB_VNEG
|
|
POP HL
|
|
POP BC
|
|
OR H
|
|
MB_FOUT2:
|
|
INC HL
|
|
LD (HL), '0'
|
|
LD A, (MB_TEMP3)
|
|
LD D, A
|
|
RLA
|
|
LD A, (MB_VALTYP)
|
|
JP C, MB_FOUTFX
|
|
JP Z, MB_FOUTZR
|
|
CP 0x4
|
|
JP NC, MB_FOUFRV
|
|
LD BC, 0x0
|
|
CALL MB_FOUTCI
|
|
MB_FOUTZS:
|
|
LD HL, MB_FBUFFR+1
|
|
LD B, (HL)
|
|
LD C, ' '
|
|
LD A, (MB_TEMP3)
|
|
LD E, A
|
|
AND 0x20
|
|
JP Z, MB_FOTZS1
|
|
LD A, B
|
|
CP C
|
|
LD C, '*'
|
|
JP NZ, MB_FOTZS1
|
|
LD A, E
|
|
AND 0x4
|
|
JP NZ, MB_FOTZS1
|
|
LD B, C
|
|
MB_FOTZS1:
|
|
LD (HL), C
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_FOTZS4
|
|
CP 'E'
|
|
JP Z, MB_FOTZS4
|
|
CP 'D'
|
|
JP Z, MB_FOTZS4
|
|
CP '0'
|
|
JP Z, MB_FOTZS1
|
|
CP ','
|
|
JP Z, MB_FOTZS1
|
|
CP '.'
|
|
JP NZ, MB_FOTZS2
|
|
MB_FOTZS4:
|
|
DEC HL
|
|
LD (HL), '0'
|
|
MB_FOTZS2:
|
|
LD A, E
|
|
AND 0x10
|
|
JP Z, MB_FOTZS3
|
|
DEC HL
|
|
LD (HL), ASCII_CUR
|
|
MB_FOTZS3:
|
|
LD A, E
|
|
AND 0x4
|
|
RET NZ
|
|
DEC HL
|
|
LD (HL), B
|
|
RET
|
|
MB_FOUINI:
|
|
LD (MB_TEMP3), A
|
|
LD HL, MB_FBUFFR+1
|
|
LD (HL), ' '
|
|
RET
|
|
MB_FOUFRV:
|
|
CALL MB_PUSHF
|
|
EX DE, HL
|
|
LD HL, (MB_DFACLO)
|
|
PUSH HL
|
|
LD HL, (MB_DFACLO+2)
|
|
PUSH HL
|
|
EX DE, HL
|
|
PUSH AF
|
|
XOR A
|
|
LD (MB_FANSII), A
|
|
POP AF
|
|
PUSH AF
|
|
CALL MB_FOUFRF
|
|
LD B, 'E'
|
|
LD C, 0x0
|
|
|
|
; SEARCH FOR "D"
|
|
MB_FU1:
|
|
PUSH HL
|
|
MB_FU1A:
|
|
LD A, (HL)
|
|
MB_FU2:
|
|
CP B
|
|
JP Z, MB_FU4
|
|
CP ':'
|
|
JP NC, MB_FU2A
|
|
CP '0'
|
|
JP C, MB_FU2A
|
|
INC C
|
|
MB_FU2A:
|
|
INC HL
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_FU2
|
|
LD A, 'D'
|
|
CP B
|
|
LD B, A
|
|
POP HL
|
|
LD C, 0x0
|
|
JP NZ, MB_FU1
|
|
MB_FU3:
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
EX DE, HL
|
|
LD (MB_DFACLO), HL
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_DFACLO+2), HL
|
|
EX DE, HL
|
|
POP BC
|
|
POP DE
|
|
RET
|
|
|
|
MB_FU4:
|
|
PUSH BC
|
|
MB_FU_EV:
|
|
LD B, 0x0
|
|
INC HL
|
|
LD A, (HL)
|
|
MB_FU5:
|
|
CP '+'
|
|
JP Z, MB_FU8
|
|
CP '-'
|
|
JP Z, MB_FU5A
|
|
SUB '0'
|
|
LD C, A
|
|
LD A, B
|
|
ADD A, A
|
|
ADD A, A
|
|
ADD A, B
|
|
ADD A, A
|
|
ADD A, C
|
|
LD B, A
|
|
CP 0x10
|
|
JP NC, MB_FU8
|
|
MB_FU5A:
|
|
INC HL
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_FU5
|
|
LD H, B
|
|
POP BC
|
|
LD A, B
|
|
CP 'E'
|
|
JP NZ, MB_FU7
|
|
LD A, C
|
|
ADD A, H
|
|
CP 0x9
|
|
POP HL
|
|
JP NC, MB_FU3
|
|
MB_FU6:
|
|
LD A, 0x80
|
|
LD (MB_FANSII), A
|
|
JP MB_FU9
|
|
MB_FU7:
|
|
LD A, H
|
|
ADD A, C
|
|
CP 0x12
|
|
POP HL
|
|
JP NC, MB_FU3
|
|
JP MB_FU6
|
|
MB_FU8:
|
|
POP BC
|
|
POP HL
|
|
JP MB_FU3
|
|
MB_FU9:
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
EX DE, HL
|
|
LD (MB_DFACLO), HL
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_DFACLO+2), HL
|
|
EX DE, HL
|
|
POP BC
|
|
POP DE
|
|
CALL MB_MOVFR
|
|
INC HL
|
|
MB_FOUFRF:
|
|
CP 0x5
|
|
PUSH HL
|
|
SBC A, 0x0
|
|
RLA
|
|
LD D, A
|
|
INC D
|
|
CALL MB_FOUTNV
|
|
LD BC, 0x300
|
|
PUSH AF
|
|
LD A, (MB_FANSII)
|
|
OR A
|
|
JP P, MB_FOFV5A
|
|
POP AF
|
|
ADD A, D
|
|
JP MB_FOUFV6
|
|
MB_FOFV5A:
|
|
POP AF
|
|
ADD A, D
|
|
JP M, MB_FOFRS1
|
|
INC D
|
|
CP D
|
|
JP NC, MB_FOFRS1
|
|
MB_FOUFV6:
|
|
INC A
|
|
LD B, A
|
|
LD A, 0x2
|
|
MB_FOFRS1:
|
|
SUB 0x2
|
|
POP HL
|
|
PUSH AF
|
|
CALL MB_FOUTAN
|
|
LD (HL), '0'
|
|
CALL Z, MB_INXHRT
|
|
CALL MB_FOUTCV
|
|
MB_FOFRS2:
|
|
DEC HL
|
|
LD A, (HL)
|
|
CP '0'
|
|
JP Z, MB_FOFRS2
|
|
CP '.'
|
|
CALL NZ, MB_INXHRT
|
|
POP AF
|
|
JP Z, MB_FOUTDN
|
|
MB_FOFLDN:
|
|
PUSH AF
|
|
CALL MB_GETYPR
|
|
LD A, '"'
|
|
ADC A, A
|
|
LD (HL), A
|
|
INC HL
|
|
POP AF
|
|
LD (HL), '+'
|
|
JP P, MB_FOUCE1
|
|
LD (HL), '-'
|
|
CPL
|
|
INC A
|
|
MB_FOUCE1:
|
|
LD B, 0x2f ;'0'-1
|
|
MB_FOUCE2:
|
|
INC B
|
|
SUB 0xa
|
|
JP NC, MB_FOUCE2
|
|
ADD A, ':' ;'0'+12O
|
|
INC HL
|
|
LD (HL), B
|
|
INC HL
|
|
LD (HL), A
|
|
MB_FOUTZR:
|
|
INC HL
|
|
MB_FOUTDN:
|
|
LD (HL), 0x0
|
|
EX DE, HL
|
|
LD HL, MB_FBUFFR+1
|
|
RET
|
|
|
|
MB_FOUTFX:
|
|
INC HL
|
|
PUSH BC
|
|
CP 0x4
|
|
LD A, D
|
|
JP NC, MB_FOUFXV
|
|
RRA
|
|
JP C, MB_FFXIFL
|
|
LD BC, 0x603
|
|
CALL MB_FOUICC
|
|
POP DE
|
|
LD A, D
|
|
SUB 0x5
|
|
CALL P, MB_FOTZER
|
|
CALL MB_FOUTCI
|
|
MB_FOUTTD:
|
|
LD A, E
|
|
OR A
|
|
CALL Z, MB_DCXHRT
|
|
DEC A
|
|
CALL P, MB_FOTZER
|
|
MB_FOUTTS:
|
|
PUSH HL
|
|
CALL MB_FOUTZS
|
|
POP HL
|
|
JP Z, MB_FFXIX1
|
|
LD (HL), B
|
|
INC HL
|
|
MB_FFXIX1:
|
|
LD (HL), 0x0
|
|
LD HL, MB_FBUFFR
|
|
MB_FOUBE1:
|
|
INC HL
|
|
MB_FOUBE5:
|
|
LD A, (MB_TEMP2)
|
|
SUB L
|
|
SUB D
|
|
RET Z
|
|
LD A, (HL)
|
|
CP ' '
|
|
JP Z, MB_FOUBE1
|
|
CP '*'
|
|
JP Z, MB_FOUBE1
|
|
DEC HL
|
|
PUSH HL
|
|
MB_FOUBE2:
|
|
PUSH AF
|
|
LD BC, MB_FOUBE2
|
|
PUSH BC
|
|
CALL MB_CHRGTR
|
|
CP '-'
|
|
RET Z
|
|
|
|
CP '+'
|
|
RET Z
|
|
|
|
CP ASCII_CUR
|
|
RET Z
|
|
POP BC
|
|
CP '0'
|
|
JP NZ, MB_FOUBE4
|
|
INC HL
|
|
CALL MB_CHRGTR
|
|
JP NC, MB_FOUBE4
|
|
DEC HL
|
|
DB 1
|
|
MB_FOUBE3:
|
|
DEC HL
|
|
LD (HL), A
|
|
POP AF
|
|
JP Z, MB_FOUBE3
|
|
POP BC
|
|
JP MB_FOUBE5
|
|
MB_FOUBE4:
|
|
POP AF
|
|
JP Z, MB_FOUBE4
|
|
POP HL
|
|
LD (HL), '%'
|
|
RET
|
|
MB_FOUFXV:
|
|
PUSH HL
|
|
RRA
|
|
JP C, MB_FFXFLV
|
|
JP Z, MB_FFXSFX
|
|
LD DE, MB_FFXDXM
|
|
CALL MB_DCOMPD
|
|
LD D, 0x10
|
|
JP M, MB_FFXSDC
|
|
MB_FFXSDO:
|
|
POP HL
|
|
POP BC
|
|
CALL MB_FOUT
|
|
DEC HL
|
|
LD (HL), '%'
|
|
RET
|
|
MB_FFXSFX:
|
|
LD BC, 0xb60e
|
|
LD DE, 0x1bca
|
|
CALL MB_FCOMP
|
|
JP P, MB_FFXSDO
|
|
LD D, 0x6
|
|
MB_FFXSDC:
|
|
CALL MB_SIGN
|
|
CALL NZ, MB_FOUTNV
|
|
POP HL
|
|
POP BC
|
|
JP M, MB_FFXXVS
|
|
MB_FFXSD2:
|
|
PUSH BC
|
|
LD E, A
|
|
LD A, B
|
|
SUB D
|
|
SUB E
|
|
CALL P, MB_FOTZER
|
|
CALL MB_FOUTCD
|
|
CALL MB_FOUTCV
|
|
OR E
|
|
CALL NZ, MB_FOTZEC
|
|
OR E
|
|
CALL NZ, MB_FOUTED
|
|
POP DE
|
|
JP MB_FOUTTD
|
|
MB_FFXXVS:
|
|
LD E, A
|
|
LD A, C
|
|
OR A
|
|
CALL NZ, MB_DCRART
|
|
ADD A, E
|
|
MB_FFXXS2:
|
|
JP M, MB_FFXXV8
|
|
XOR A
|
|
MB_FFXXV8:
|
|
PUSH BC
|
|
PUSH AF
|
|
MB_FFXXV2:
|
|
CALL M, MB_FINDIV
|
|
JP M, MB_FFXXV2
|
|
POP BC
|
|
LD A, E
|
|
SUB B
|
|
POP BC
|
|
LD E, A
|
|
ADD A, D
|
|
LD A, B
|
|
JP M, MB_FFXXV3
|
|
SUB D
|
|
SUB E
|
|
CALL P, MB_FOTZER
|
|
PUSH BC
|
|
CALL MB_FOUTCD
|
|
JP MB_FFXXV6
|
|
MB_FFXXV3:
|
|
CALL MB_FOTZER
|
|
SUB_ram_33cc:
|
|
LD A, C
|
|
CALL MB_FOUTDP
|
|
LD C, A
|
|
XOR A
|
|
SUB D
|
|
SUB E
|
|
CALL MB_FOTZER
|
|
PUSH BC
|
|
LD B, A
|
|
LD C, A
|
|
MB_FFXXV6:
|
|
CALL MB_FOUTCV ; CONVERT THE NUMBER TO DECIMAL DIGITS
|
|
POP BC
|
|
OR C
|
|
JP NZ, MB_FFXXV7
|
|
LD HL, (MB_TEMP2)
|
|
MB_FFXXV7:
|
|
ADD A, E
|
|
DEC A
|
|
CALL P, MB_FOTZER
|
|
LD D, B
|
|
JP MB_FOUTTS
|
|
MB_FFXIFL:
|
|
PUSH HL
|
|
PUSH DE
|
|
CALL MB_CONSI
|
|
POP DE
|
|
XOR A
|
|
MB_FFXFLV:
|
|
JP Z, MB_FFXSFL
|
|
LD E, 0x10
|
|
DB 1
|
|
MB_FFXSFL:
|
|
LD E, 0x6
|
|
CALL MB_SIGN
|
|
SCF
|
|
CALL NZ, MB_FOUTNV
|
|
POP HL
|
|
POP BC
|
|
PUSH AF
|
|
LD A, C
|
|
OR A
|
|
PUSH AF
|
|
CALL NZ, MB_DCRART
|
|
ADD A, B
|
|
LD C, A
|
|
LD A, D
|
|
AND 0x4
|
|
CP 0x1
|
|
SBC A, A
|
|
LD D, A
|
|
ADD A, C
|
|
LD C, A
|
|
SUB E
|
|
PUSH AF
|
|
PUSH BC
|
|
MB_FFXLV1:
|
|
CALL M, MB_FINDIV
|
|
JP M, MB_FFXLV1
|
|
POP BC
|
|
POP AF
|
|
PUSH BC
|
|
PUSH AF
|
|
JP M, MB_FFXLV3
|
|
XOR A
|
|
MB_FFXLV3:
|
|
CPL
|
|
INC A
|
|
ADD A, B
|
|
INC A
|
|
ADD A, D
|
|
LD B, A
|
|
LD C, 0
|
|
CALL MB_FOUTCV
|
|
POP AF
|
|
CALL P, MB_FOTZNC
|
|
CALL MB_FOUTED
|
|
POP BC
|
|
POP AF
|
|
JP NZ, MB_FFXLV4
|
|
CALL MB_DCXHRT
|
|
LD A, (HL)
|
|
CP '.'
|
|
CALL NZ, MB_INXHRT
|
|
LD (MB_TEMP2), HL
|
|
MB_FFXLV4:
|
|
POP AF
|
|
JP C, MB_FFXLV2
|
|
ADD A, E
|
|
SUB B
|
|
SUB D
|
|
MB_FFXLV2:
|
|
PUSH BC
|
|
CALL MB_FOFLDN
|
|
EX DE, HL
|
|
POP DE
|
|
JP MB_FOUTTS
|
|
MB_FOUTNV:
|
|
PUSH DE
|
|
XOR A
|
|
PUSH AF
|
|
CALL MB_GETYPR
|
|
JP PO, MB_FOUNDB
|
|
MB_FORBIG:
|
|
LD A, (MB_FAC)
|
|
CP 0x91
|
|
JP NC, MB_FOUNDB
|
|
LD DE, MB_TENTEN
|
|
LD HL, MB_ARGLO
|
|
CALL MB_VMOVE
|
|
CALL MB_DMULT
|
|
POP AF
|
|
SUB 10
|
|
PUSH AF
|
|
JP MB_FORBIG
|
|
MB_FOUNDB:
|
|
CALL MB_FOUNVC
|
|
MB_FOUNV1:
|
|
CALL MB_GETYPR
|
|
JP PE, MB_FOUNV4
|
|
LD BC, 0x9143
|
|
LD DE, 0x4ff9
|
|
CALL MB_FCOMP
|
|
JP MB_FOUNV5
|
|
MB_FOUNV4:
|
|
LD DE, MB_FOUTDL
|
|
CALL MB_DCOMPD
|
|
MB_FOUNV5:
|
|
JP P, MB_FOUNV3
|
|
POP AF
|
|
CALL MB_FINMLT
|
|
PUSH AF
|
|
JP MB_FOUNV1
|
|
MB_FOUNV2:
|
|
POP AF
|
|
CALL MB_FINDIV
|
|
PUSH AF
|
|
CALL MB_FOUNVC
|
|
MB_FOUNV3:
|
|
POP AF
|
|
OR A
|
|
POP DE
|
|
RET
|
|
|
|
MB_FOUNVC:
|
|
CALL MB_GETYPR
|
|
JP PE, MB_FONVC1
|
|
LD BC, 0x9474
|
|
LD DE, 0x23f8
|
|
CALL MB_FCOMP
|
|
JP MB_FONVC2
|
|
|
|
MB_FONVC1:
|
|
LD DE, MB_FOUTDU
|
|
CALL MB_DCOMPD
|
|
|
|
MB_FONVC2:
|
|
POP HL
|
|
JP P, MB_FOUNV2
|
|
JP (HL)
|
|
|
|
MB_FOTZER:
|
|
OR A
|
|
|
|
MB_FOTZR1:
|
|
RET Z
|
|
DEC A
|
|
LD (HL), '0'
|
|
INC HL
|
|
JP MB_FOTZR1
|
|
|
|
MB_FOTZNC:
|
|
JP NZ, MB_FOTZEC
|
|
|
|
MB_FOTZRC:
|
|
RET Z
|
|
CALL MB_FOUTED
|
|
|
|
MB_FOTZEC:
|
|
LD (HL), '0'
|
|
INC HL
|
|
DEC A
|
|
JP MB_FOTZRC
|
|
MB_FOUTCD:
|
|
LD A, E
|
|
ADD A, D
|
|
INC A
|
|
LD B, A
|
|
INC A
|
|
MB_FOTCD1:
|
|
SUB 0x3
|
|
JP NC, MB_FOTCD1
|
|
ADD A, 0x5
|
|
LD C, A
|
|
MB_FOUICC:
|
|
LD A, (MB_TEMP3)
|
|
AND 0x40
|
|
RET NZ
|
|
LD C, A
|
|
RET
|
|
|
|
MB_FOUTAN:
|
|
DEC B
|
|
JP P, MB_FOUTE1
|
|
LD (MB_TEMP2), HL
|
|
LD (HL), '.'
|
|
MB_FOUTD1:
|
|
INC HL
|
|
LD (HL), '0'
|
|
INC B
|
|
JP NZ, MB_FOUTD1
|
|
INC HL
|
|
LD C, B
|
|
RET
|
|
|
|
MB_FOUTED:
|
|
DEC B
|
|
MB_FOUTE1:
|
|
JP NZ, MB_FOUED1
|
|
MB_FOUTDP:
|
|
LD (HL), '.'
|
|
LD (MB_TEMP2), HL
|
|
INC HL
|
|
LD C, B
|
|
RET
|
|
MB_FOUED1:
|
|
DEC C
|
|
RET NZ
|
|
LD (HL), ','
|
|
INC HL
|
|
LD C, 0x3
|
|
RET
|
|
|
|
MB_FOUTCV:
|
|
PUSH DE
|
|
CALL MB_GETYPR
|
|
JP PO, MB_FOUTCS
|
|
PUSH BC
|
|
PUSH HL
|
|
CALL MB_VMOVAF
|
|
LD HL, MB_DHALF
|
|
CALL MB_VMOVFM
|
|
CALL MB_DADD
|
|
XOR A
|
|
CALL MB_DINTFO
|
|
POP HL
|
|
POP BC
|
|
LD DE, MB_FODTBL
|
|
LD A, 0xa
|
|
MB_FOUCD1:
|
|
CALL MB_FOUTED
|
|
PUSH BC
|
|
PUSH AF
|
|
PUSH HL
|
|
PUSH DE
|
|
LD B, '0' - 1
|
|
MB_FOUCD2:
|
|
INC B
|
|
POP HL
|
|
PUSH HL
|
|
DB 0x3E
|
|
SBC A, (HL)
|
|
CALL MB_DADDFO
|
|
JP NC, MB_FOUCD2
|
|
POP HL
|
|
DB 0x3E
|
|
ADC A, (HL)
|
|
CALL MB_DADDFO
|
|
EX DE, HL
|
|
POP HL
|
|
LD (HL), B
|
|
INC HL
|
|
POP AF
|
|
POP BC
|
|
DEC A
|
|
JP NZ, MB_FOUCD1
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, MB_DFACLO
|
|
CALL MB_MOVFM
|
|
JP MB_FOUCDC
|
|
MB_FOUTCS:
|
|
PUSH BC
|
|
PUSH HL
|
|
CALL MB_FADDH
|
|
LD A, 0x1
|
|
CALL MB_QINT
|
|
CALL MB_MOVFR
|
|
MB_FOUCDC:
|
|
POP HL
|
|
POP BC
|
|
XOR A
|
|
LD DE, MB_FOSTBL
|
|
MB_FOUCS1:
|
|
CCF
|
|
CALL MB_FOUTED
|
|
PUSH BC
|
|
PUSH AF
|
|
PUSH HL
|
|
PUSH DE
|
|
CALL MB_MOVRF
|
|
POP HL
|
|
LD B, '0'-1
|
|
MB_FOUCS2:
|
|
INC B
|
|
LD A, E
|
|
SUB (HL)
|
|
LD E, A
|
|
INC HL
|
|
LD A, D
|
|
SBC A, (HL)
|
|
LD D, A
|
|
INC HL
|
|
LD A, C
|
|
SBC A, (HL)
|
|
LD C, A
|
|
DEC HL
|
|
DEC HL
|
|
JP NC, MB_FOUCS2
|
|
CALL MB_FADDA
|
|
INC HL
|
|
CALL MB_MOVFR
|
|
EX DE, HL
|
|
POP HL
|
|
LD (HL), B
|
|
INC HL
|
|
POP AF
|
|
POP BC
|
|
JP C, MB_FOUCS1
|
|
INC DE
|
|
INC DE
|
|
LD A, 0x4
|
|
JP MB_FOUCI1
|
|
MB_FOUTCI:
|
|
PUSH DE
|
|
LD DE, MB_FOITBL
|
|
LD A, 0x5
|
|
MB_FOUCI1:
|
|
CALL MB_FOUTED
|
|
PUSH BC
|
|
PUSH AF
|
|
PUSH HL
|
|
EX DE, HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
PUSH BC
|
|
INC HL
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
LD HL, (MB_FACLO)
|
|
LD B, '0'-1
|
|
MB_FOUCI2:
|
|
INC B
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
JP NC, MB_FOUCI2
|
|
ADD HL, DE
|
|
LD (MB_FACLO), HL
|
|
POP DE
|
|
POP HL
|
|
LD (HL), B
|
|
INC HL
|
|
POP AF
|
|
POP BC
|
|
DEC A
|
|
JP NZ, MB_FOUCI1
|
|
CALL MB_FOUTED
|
|
LD (HL), A
|
|
POP DE
|
|
RET
|
|
|
|
; ---------------------------------------------------
|
|
; CONSTANTS USED BY FOUT
|
|
; ---------------------------------------------------
|
|
MB_TENTEN:
|
|
; 10000000000
|
|
DB 0x00, 0x00, 0x00, 0x00, 0xF9, 0x02, 0x15, 0xA2
|
|
MB_FOUTDL:
|
|
; 999, 999, 999, 999, 999.5
|
|
DB 0xE1, 0xFF, 0x9F, 0x31, 0xA9, 0x5F, 0x63, 0xB2
|
|
MB_FOUTDU:
|
|
; 9, 999, 999, 999, 999, 999.5
|
|
DB 0xFE, 0xFF, 0x03, 0xBF, 0xC9, 0x1B, 0x0E, 0xB6
|
|
|
|
MB_DHALF:
|
|
; .5D0
|
|
DB 0, 0, 0, 0
|
|
|
|
MB_FHALF:
|
|
; .5E0
|
|
DB 0, 0, 0, 0x80
|
|
|
|
MB_FFXDXM:
|
|
; 1D16
|
|
DB 0x00, 0x00, 0x04, 0xBF, 0xC9, 0x1B, 0x0E, 0xB6
|
|
|
|
; ---------------------------------------------------
|
|
; DOUBLE PRECISION POWER OF TEN TABLE
|
|
; ---------------------------------------------------
|
|
MB_FODTBL:
|
|
; 1D15
|
|
DB 0x00, 0x80, 0xC6, 0xA4, 0x7E, 0x8D, 0x03
|
|
; 1D14
|
|
DB 0x00, 0x40, 0x7A, 0x10, 0xF3, 0x5A, 0x00
|
|
;1D13
|
|
DB 0x00, 0xA0, 0x72, 0x4E, 0x18, 0x09, 0x00
|
|
;1D12
|
|
DB 0x00, 0x10, 0xA5, 0xD4, 0xE8, 0x00, 0x00
|
|
;1D11
|
|
DB 0x00, 0xE8, 0x76, 0x48, 0x17, 0x00, 0x00
|
|
;1D10
|
|
DB 0x00, 0xE4, 0x0B, 0x54, 0x02, 0x00, 0x00
|
|
;1D9
|
|
DB 0x00, 0xCA, 0x9A, 0x3B, 0x00, 0x00, 0x00
|
|
;1D8
|
|
DB 0x00, 0xE1, 0xF5, 0x05, 0x00, 0x00, 0x00
|
|
;1D7
|
|
DB 0x80, 0x96, 0x98, 0x00, 0x00, 0x00, 0x00
|
|
;1D6
|
|
DB 0x40, 0x42, 0x0F, 0x00, 0x00, 0x00, 0x00
|
|
|
|
MB_FOSTBL:
|
|
DB 0xA0, 0x86, 0x01, 0x10, 0x27, 0x00
|
|
MB_FOITBL:
|
|
DB 0x10, 0x27, 0xE8, 0x03, 0x64, 0x00, 0x0A, 0x00, 0x01, 0x00
|
|
|
|
MB_FOUTO:
|
|
XOR A
|
|
LD B, A
|
|
DB 0xC2
|
|
MB_FOUTH:
|
|
LD B, 0x1
|
|
PUSH BC
|
|
CALL MB_FRQINT
|
|
POP BC
|
|
LD DE, MB_FBUFFR
|
|
PUSH DE
|
|
XOR A
|
|
LD (DE), A
|
|
DEC B
|
|
INC B
|
|
LD C, 0x6
|
|
JP Z, MB_OCTONE
|
|
LD C, 0x4
|
|
MB_OUTHLP:
|
|
ADD HL, HL
|
|
ADC A, A
|
|
MB_OUTOLP:
|
|
ADD HL, HL
|
|
ADC A, A
|
|
ADD HL, HL
|
|
ADC A, A
|
|
MB_OCTONE:
|
|
ADD HL, HL
|
|
ADC A, A
|
|
OR A
|
|
JP NZ, MB_MAKDIG
|
|
LD A, C
|
|
DEC A
|
|
JP Z, MB_MAKDIG
|
|
LD A, (DE)
|
|
OR A
|
|
JP Z, MB_NOLEAD
|
|
XOR A
|
|
MB_MAKDIG:
|
|
ADD A, '0'
|
|
CP '9'+1
|
|
JP C, MB_NOTHAL
|
|
ADD A, 0x7
|
|
MB_NOTHAL:
|
|
LD (DE), A
|
|
INC DE
|
|
LD (DE), A
|
|
MB_NOLEAD:
|
|
XOR A
|
|
DEC C
|
|
JP Z, MB_FINOHO
|
|
DEC B
|
|
INC B
|
|
JP Z, MB_OUTOLP
|
|
JP MB_OUTHLP
|
|
MB_FINOHO:
|
|
LD (DE), A
|
|
POP HL
|
|
RET
|
|
|
|
; ===================================================
|
|
; EXPONENTIATION AND THE SQUARE ROOT FUNCTION
|
|
; ===================================================
|
|
MB_PSHNEG:
|
|
LD HL, MB_NEG
|
|
EX (SP), HL
|
|
JP (HL)
|
|
MB_SQR:
|
|
CALL MB_PUSHF
|
|
LD HL, MB_FHALF
|
|
CALL MB_MOVFM
|
|
JP MB_FPWRT
|
|
MB_FPWRQ:
|
|
CALL MB_FRCSNG
|
|
MB_FPWRT:
|
|
POP BC
|
|
POP DE
|
|
MB_FPWR:
|
|
LD HL, MB_CLROVC
|
|
PUSH HL
|
|
LD A, 1
|
|
LD (MB_FLGOVC), A
|
|
CALL MB_SIGN
|
|
LD A, B
|
|
JP Z, MB_EXP
|
|
JP P, MB_POSEXP
|
|
OR A
|
|
JP Z, MB_INTDV2
|
|
MB_POSEXP:
|
|
OR A
|
|
JP Z, MB_ZERO0
|
|
PUSH DE
|
|
PUSH BC
|
|
LD A, C
|
|
OR 0x7f
|
|
CALL MB_MOVRF
|
|
JP P, MB_FPWR1
|
|
PUSH AF
|
|
LD A, (MB_FAC)
|
|
CP 0x99
|
|
JP C, MB_FPWR0
|
|
POP AF
|
|
JP MB_FPWR1
|
|
MB_FPWR0:
|
|
POP AF
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_INT
|
|
POP BC
|
|
POP DE
|
|
PUSH AF
|
|
CALL MB_FCOMP
|
|
POP HL
|
|
LD A, H
|
|
RRA
|
|
MB_FPWR1:
|
|
POP HL
|
|
LD (MB_FAC-1), HL
|
|
POP HL
|
|
LD (MB_FACLO), HL
|
|
CALL C, MB_PSHNEG
|
|
CALL Z, MB_NEG
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_LOG
|
|
POP BC
|
|
POP DE
|
|
CALL MB_FMUL
|
|
|
|
; ---------------------------------------------------
|
|
; FUNCTION EXP(X) CALCULATES e^X WHERE e=2.718282
|
|
; ---------------------------------------------------
|
|
MB_EXP:
|
|
LD BC, 0x8138
|
|
LD DE, 0xaa3b
|
|
CALL MB_FMUL
|
|
LD A, (MB_FAC)
|
|
CP 0x88
|
|
JP NC, MB_EXP100
|
|
CP 0x68
|
|
JP C, MB_EXP200
|
|
CALL MB_PUSHF
|
|
CALL MB_INT
|
|
ADD A, 0x81
|
|
POP BC
|
|
POP DE
|
|
JP Z, MB_EXP110
|
|
PUSH AF
|
|
CALL MB_FSUB
|
|
LD HL, 0x377b
|
|
CALL MB_POLY
|
|
POP BC
|
|
LD DE, 0x0
|
|
LD C, D
|
|
JP MB_FMUL
|
|
MB_EXP100:
|
|
CALL MB_PUSHF
|
|
MB_EXP110:
|
|
LD A, (MB_FAC-1)
|
|
OR A
|
|
JP P, MB_EXP115
|
|
POP AF
|
|
POP AF
|
|
JP MB_ZERO
|
|
MB_EXP115:
|
|
JP MB_OVFIN6
|
|
MB_EXP200:
|
|
LD BC, 0x8100
|
|
LD DE, 0x0
|
|
JP MB_MOVFR
|
|
;Hart 1302 polynomial coefficients
|
|
MB_EXPBCN:
|
|
DB 0x07 ; DEGREE + 1
|
|
; .00020745577403-
|
|
DB 0x7C, 0x88, 0x59, 0x74
|
|
; .00127100574569-
|
|
DB 0xE0, 0x97, 0x26, 0x77
|
|
; .00965065093202+
|
|
DB 0xC4, 0x1D, 0x1E, 0x7A
|
|
; .05549656508324+
|
|
DB 0x5E, 0x50, 0x63, 0x7C
|
|
; .24022713817633-
|
|
DB 0x1A, 0xFE, 0x75, 0x7E
|
|
; .69314717213716+
|
|
DB 0x18, 0x72, 0x31, 0x80
|
|
; 1.0
|
|
DB 0, 0, 0, 0x81
|
|
|
|
; ===================================================
|
|
; POLYNOMIAL EVALUATOR AND THE RANDOM NUMBER GENERATOR
|
|
; ===================================================
|
|
MB_POLYX:
|
|
CALL MB_PUSHF
|
|
LD DE, MB_FMULTT
|
|
PUSH DE
|
|
MB_POLYX2:
|
|
PUSH HL
|
|
CALL MB_MOVRF
|
|
CALL MB_FMUL
|
|
POP HL
|
|
MB_POLY:
|
|
CALL MB_PUSHF
|
|
LD A, (HL)
|
|
INC HL
|
|
CALL MB_MOVFM
|
|
DB 0x06
|
|
MB_POLY1:
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
DEC A
|
|
RET Z
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
PUSH HL
|
|
CALL MB_FMUL
|
|
POP HL
|
|
CALL MB_MOVRM
|
|
PUSH HL
|
|
CALL MB_FADD
|
|
POP HL
|
|
JP MB_POLY1
|
|
MB_RNDCOP:
|
|
DB 82
|
|
DB 199
|
|
DB 79
|
|
DB 128
|
|
MB_RNDMON:
|
|
CALL MB_CHRGTR
|
|
MB_RNDMN2:
|
|
PUSH HL
|
|
LD HL, MB_FONE
|
|
CALL MB_MOVFM
|
|
CALL MB_RND
|
|
POP HL
|
|
JP MB_VALSNG
|
|
MB_RND:
|
|
CALL MB_SIGN
|
|
LD HL, MB_RNDCNT + 1
|
|
JP M, MB_RNDSTR
|
|
LD HL, MB_RNDX
|
|
CALL MB_MOVFM
|
|
LD HL, MB_RNDCNT + 1
|
|
RET Z
|
|
ADD A, (HL)
|
|
AND 0x7
|
|
LD B, 0x0
|
|
LD (HL), A
|
|
INC HL
|
|
ADD A, A
|
|
ADD A, A
|
|
LD C, A
|
|
ADD HL, BC
|
|
CALL MB_MOVRM
|
|
CALL MB_FMUL
|
|
LD A, (MB_RNDCNT)
|
|
INC A
|
|
AND 0x3
|
|
LD B, 0x0
|
|
CP 0x1
|
|
ADC A, B
|
|
LD (MB_RNDCNT), A
|
|
LD HL, MB_RNDX ;RNDTB2-4
|
|
ADD A, A
|
|
ADD A, A
|
|
LD C, A
|
|
ADD HL, BC
|
|
CALL MB_FADDS
|
|
MB_RND1:
|
|
CALL MB_MOVRF
|
|
LD A, E
|
|
LD E, C
|
|
XOR 0x4f
|
|
LD C, A
|
|
LD (HL), 0x80
|
|
DEC HL
|
|
LD B, (HL)
|
|
LD (HL), 0x80
|
|
LD HL, MB_RNDCNT - 1
|
|
INC (HL)
|
|
LD A, (HL)
|
|
SUB 0xab
|
|
JP NZ, MB_NTPTRB
|
|
LD (HL), A
|
|
INC C
|
|
DEC D
|
|
INC E
|
|
MB_NTPTRB:
|
|
CALL MB_NORMAL
|
|
LD HL, MB_RNDX
|
|
JP MB_MOVMF
|
|
MB_RNDSTR:
|
|
LD (HL), A
|
|
DEC HL
|
|
LD (HL), A
|
|
DEC HL
|
|
LD (HL), A
|
|
JP MB_RND1
|
|
|
|
DB 0
|
|
MB_RNDCNT:
|
|
DB 0, 0
|
|
|
|
MB_RNDTAB:
|
|
DB 0x35, 0x4A, 0xCA, 0x99, 0x39, 0x1C, 0x76, 0x98
|
|
DB 0x22, 0x95, 0xB3, 0x98, 0x0A, 0xDD, 0x47, 0x98
|
|
DB 0x53, 0xD1, 0x99, 0x99, 0x0A, 0x1A, 0x9F, 0x98
|
|
DB 0x65, 0xBC, 0xCD, 0x98, 0xD6, 0x77, 0x3E, 0x98
|
|
|
|
MB_RNDX:
|
|
DB 0x52, 0xC7, 0x4F, 0x80
|
|
|
|
MB_RNDTB2:
|
|
DB 0x68, 0xB1, 0x46, 0x68, 0x99, 0xE9, 0x92, 0x69
|
|
DB 0x10, 0xD1, 0x75, 0x68
|
|
|
|
MB_COS:
|
|
LD HL, MB_PI2
|
|
CALL MB_FADDS
|
|
MB_SIN:
|
|
LD A, (MB_FAC)
|
|
CP 0x77
|
|
RET C
|
|
|
|
LD A, (MB_FAC-1)
|
|
OR A
|
|
JP P, MB_SIN2
|
|
AND 0x7f
|
|
LD (MB_FAC-1), A
|
|
LD DE, MB_NEG
|
|
PUSH DE
|
|
MB_SIN2:
|
|
LD BC, 0x7e22
|
|
LD DE, 0xf983
|
|
CALL MB_FMUL
|
|
CALL MB_PUSHF
|
|
CALL MB_INT
|
|
POP BC
|
|
POP DE
|
|
CALL MB_FSUB
|
|
LD BC, 0x7f00
|
|
LD DE, 0x0
|
|
CALL MB_FCOMP
|
|
JP M, MB_SIN2A
|
|
LD BC, 0x7f80
|
|
LD DE, 0x0
|
|
CALL MB_FADD
|
|
LD BC, 0x8080
|
|
LD DE, 0x0
|
|
CALL MB_FADD
|
|
CALL MB_SIGN
|
|
CALL P, MB_NEG
|
|
LD BC, 0x7f00
|
|
LD DE, 0x0
|
|
CALL MB_FADD
|
|
CALL MB_NEG
|
|
|
|
MB_SIN2A:
|
|
LD A, (MB_FAC-1)
|
|
OR A
|
|
PUSH AF
|
|
JP P, MB_SIN3
|
|
XOR 0x80
|
|
LD (MB_FAC-1), A
|
|
MB_SIN3:
|
|
LD HL, MB_SINCON
|
|
CALL MB_POLYX
|
|
POP AF
|
|
RET P
|
|
LD A, (MB_FAC-1)
|
|
XOR 0x80
|
|
LD (MB_FAC-1), A
|
|
RET
|
|
|
|
; ---------------------------------------------------
|
|
; CONSTANTS FOR SIN, COS
|
|
; ---------------------------------------------------
|
|
MB_P1B2PI:
|
|
DB 0x00, 0x00, 0x00, 0x00, 0x83, 0xF9, 0x22, 0x7E
|
|
MB_PI2:
|
|
DB 0xDB, 0x0F, 0x49, 0x81
|
|
MB_FR4:
|
|
DB 0, 0, 0, 0x7F
|
|
|
|
; ---------------------------------------------------
|
|
; HART ALGORITHM 3341 CONSTANTS
|
|
; ---------------------------------------------------
|
|
MB_SINCON:
|
|
DB 0x05, 0xFB, 0xD7, 0x1E, 0x86, 0x65, 0x26, 0x99
|
|
DB 0x87, 0x58, 0x34, 0x23, 0x87, 0xE1, 0x5D, 0xA5
|
|
DB 0x86, 0xDB, 0x0F, 0x49, 0x83
|
|
|
|
; ---------------------------------------------------
|
|
; TANGENT FUNCTION
|
|
; TAN(X)=SIN(X)/COS(X)
|
|
; ---------------------------------------------------
|
|
MB_TAN:
|
|
CALL MB_PUSHF
|
|
CALL MB_SIN
|
|
POP BC
|
|
POP HL
|
|
CALL MB_PUSHF
|
|
EX DE, HL
|
|
CALL MB_MOVFR
|
|
CALL MB_COS
|
|
JP MB_FDIVT
|
|
MB_ATN:
|
|
CALL MB_SIGN
|
|
CALL M, MB_PSHNEG
|
|
CALL M, MB_NEG
|
|
LD A, (MB_FAC)
|
|
CP 0x81
|
|
JP C, MB_ATN2
|
|
LD BC, 0x8100
|
|
LD D, C
|
|
LD E, C
|
|
CALL MB_FDIV
|
|
LD HL, MB_FSUBS
|
|
PUSH HL
|
|
MB_ATN2:
|
|
LD HL, MB_ATNCON
|
|
CALL MB_POLYX
|
|
LD HL, MB_PI2
|
|
RET
|
|
|
|
; ---------------------------------------------------
|
|
MB_ATNCON:
|
|
DB 0x09, 0x4A, 0xD7, 0x3B, 0x78, 0x02, 0x6E, 0x84
|
|
DB 0x7B, 0xFE, 0xC1, 0x2F, 0x7C, 0x74, 0x31, 0x9A
|
|
DB 0x7D, 0x84, 0x3D, 0x5A, 0x7D, 0xC8, 0x7F, 0x91
|
|
DB 0x7E, 0xE4, 0xBB, 0x4C, 0x7E, 0x6C, 0xAA, 0xAA
|
|
DB 0x7F, 0x00, 0x00, 0x00, 0x81
|
|
|
|
; ===================================================
|
|
; BASIC Interpreter pointer get routines/WHG/PGA
|
|
; BIPTRG.MAC
|
|
; ===================================================
|
|
; DIMENSION & VARIABLE SEARCHING - PTRGET
|
|
MB_DIMCON:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
RET Z
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
MB_DIM:
|
|
LD BC, MB_DIMCON
|
|
PUSH BC
|
|
DB 0xF6
|
|
|
|
;--------------------------------------------------
|
|
; SCAN NAME AND RETURN POINTER IN [DE]
|
|
;--------------------------------------------------
|
|
MB_PTRGET:
|
|
XOR A
|
|
LD (MB_DIMFLG), A
|
|
LD C, (HL)
|
|
|
|
MB_PTRGT2:
|
|
CALL MB_ISLET
|
|
JP C, MB_SNERR
|
|
XOR A
|
|
LD B, A
|
|
LD (MB_NAMCNT), A
|
|
INC HL
|
|
LD A, (HL)
|
|
CP '.'
|
|
JP C, MB_NOSEC
|
|
JP Z, MB_ISSEC
|
|
CP ':'
|
|
JP NC, MB_PTRGT3
|
|
CP '0'
|
|
JP NC, MB_ISSEC
|
|
MB_PTRGT3:
|
|
CALL MB_ISLET2
|
|
JP C, MB_NOSEC
|
|
MB_ISSEC:
|
|
LD B, A
|
|
PUSH BC
|
|
LD B, 0xff
|
|
LD DE, MB_NAMCNT ;NAMBUF-1
|
|
MB_VMORCH:
|
|
OR 0x80
|
|
INC B
|
|
LD (DE), A
|
|
INC DE
|
|
INC HL
|
|
LD A, (HL)
|
|
CP ':'
|
|
JP NC, MB_VMORC1
|
|
CP '0'
|
|
JP NC, MB_VMORCH
|
|
|
|
MB_VMORC1:
|
|
CALL MB_ISLET2
|
|
JP NC, MB_VMORCH
|
|
CP '.'
|
|
JP Z, MB_VMORCH
|
|
LD A, B
|
|
CP ASCII_SQ
|
|
JP NC, MB_SNERR
|
|
POP BC
|
|
LD (MB_NAMCNT), A
|
|
LD A, (HL)
|
|
MB_NOSEC:
|
|
CP '%' + 1 ; &
|
|
JP NC, MB_TABTYP
|
|
LD DE, MB_HAVTYP
|
|
PUSH DE
|
|
LD D, 0x2
|
|
CP '%'
|
|
RET Z
|
|
INC D
|
|
CP ASCII_CUR
|
|
RET Z
|
|
INC D
|
|
CP '!'
|
|
RET Z
|
|
LD D, 0x8
|
|
CP '#'
|
|
RET Z
|
|
POP AF
|
|
MB_TABTYP:
|
|
LD A, C
|
|
AND 0x7f
|
|
LD E, A
|
|
LD D, 0x0
|
|
PUSH HL
|
|
LD HL, MB_DEFTBL - 'A'
|
|
ADD HL, DE
|
|
LD D, (HL)
|
|
POP HL
|
|
DEC HL
|
|
|
|
MB_HAVTYP:
|
|
LD A, D
|
|
LD (MB_VALTYP), A
|
|
CALL MB_CHRGTR
|
|
LD A, (MB_SUBFLG)
|
|
DEC A
|
|
JP Z, MB_ERSFIN
|
|
JP P, MB_NOARYS
|
|
LD A, (HL)
|
|
SUB '('
|
|
JP Z, MB_ISARY
|
|
SUB '[' - ')' + 1
|
|
JP Z, MB_ISARY
|
|
MB_NOARYS:
|
|
XOR A
|
|
LD (MB_SUBFLG), A
|
|
PUSH HL
|
|
LD A, (MB_NOFUNS)
|
|
OR A
|
|
LD (MB_PRMFLG), A
|
|
JP Z, MB_SNFUNS
|
|
LD HL, (MB_PRMLEN)
|
|
LD DE, MB_PARM1
|
|
ADD HL, DE
|
|
LD (MB_ARYTA2), HL
|
|
EX DE, HL
|
|
JP MB_LOPFND
|
|
|
|
MB_LOPTOP:
|
|
LD A, (DE)
|
|
LD L, A
|
|
INC DE
|
|
LD A, (DE)
|
|
INC DE
|
|
CP C
|
|
JP NZ, MB_NOTIT1
|
|
LD A, (MB_VALTYP)
|
|
CP L
|
|
JP NZ, MB_NOTIT1
|
|
LD A, (DE)
|
|
CP B
|
|
JP Z, MB_FINPTR
|
|
MB_NOTIT1:
|
|
INC DE
|
|
MB_NFINPT:
|
|
LD A, (DE)
|
|
MB_SNOMAT:
|
|
LD H, 0x0
|
|
ADD A, L
|
|
INC A
|
|
LD L, A
|
|
ADD HL, DE
|
|
MB_LOPFND:
|
|
EX DE, HL
|
|
LD A, (MB_ARYTA2)
|
|
CP E
|
|
JP NZ, MB_LOPTOP
|
|
LD A, (MB_ARYTA2+1)
|
|
CP D
|
|
JP NZ, MB_LOPTOP
|
|
MB_NOTFNS:
|
|
LD A, (MB_PRMFLG)
|
|
OR A
|
|
JP Z, MB_SMKVAR
|
|
XOR A
|
|
LD (MB_PRMFLG), A
|
|
MB_SNFUNS:
|
|
LD HL, (MB_ARYTAB)
|
|
LD (MB_ARYTA2), HL
|
|
LD HL, (MB_VARTAB)
|
|
JP MB_LOPFND
|
|
|
|
;--------------------------------------------------
|
|
;SCAN NAME AND RETURN POINTER IN [DE]
|
|
;--------------------------------------------------
|
|
MB_NVRFIL:
|
|
CALL MB_PTRGET
|
|
|
|
MB_FILRET:
|
|
RET
|
|
|
|
MB_VARNOT:
|
|
LD D, A
|
|
LD E, A
|
|
POP BC
|
|
EX (SP), HL
|
|
RET
|
|
|
|
MB_SMKVAR:
|
|
POP HL
|
|
EX (SP), HL
|
|
PUSH DE
|
|
LD DE, MB_FILRET
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_VARNOT
|
|
LD DE, MB_RETVAR
|
|
CALL MB_DCOMPR
|
|
POP DE
|
|
JP Z, MB_FINZER
|
|
EX (SP), HL
|
|
PUSH HL
|
|
PUSH BC
|
|
LD A, (MB_VALTYP)
|
|
LD B, A
|
|
LD A, (MB_NAMCNT)
|
|
ADD A, B
|
|
INC A
|
|
LD C, A
|
|
PUSH BC
|
|
LD B, 0x0
|
|
INC BC
|
|
INC BC
|
|
INC BC
|
|
LD HL, (MB_STREND)
|
|
PUSH HL
|
|
ADD HL, BC
|
|
POP BC
|
|
PUSH HL
|
|
CALL MB_BLTU
|
|
POP HL
|
|
LD (MB_STREND), HL
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_ARYTAB), HL
|
|
MB_ZEROER:
|
|
DEC HL
|
|
LD (HL), 0x0
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_ZEROER
|
|
POP DE
|
|
LD (HL), D
|
|
INC HL
|
|
POP DE
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
CALL MB_NPUTSB
|
|
EX DE, HL
|
|
INC DE
|
|
POP HL
|
|
RET
|
|
|
|
MB_FINPTR:
|
|
INC DE
|
|
LD A, (MB_NAMCNT)
|
|
LD H, A
|
|
LD A, (DE)
|
|
CP H
|
|
JP NZ, MB_NFINPT
|
|
OR A
|
|
JP NZ, MB_NTFPRT
|
|
INC DE
|
|
POP HL
|
|
RET
|
|
|
|
MB_NTFPRT:
|
|
EX DE, HL
|
|
CALL MB_MATSUB
|
|
EX DE, HL
|
|
JP NZ, MB_SNOMAT
|
|
POP HL
|
|
RET
|
|
|
|
MB_FINZER:
|
|
LD (MB_FAC), A
|
|
LD H, A
|
|
LD L, A
|
|
LD (MB_FACLO), HL
|
|
CALL MB_GETYPR
|
|
JP NZ, POPHR2
|
|
LD HL, MB_OKTXT-1
|
|
LD (MB_FACLO), HL
|
|
POPHR2:
|
|
POP HL
|
|
RET
|
|
|
|
MB_ISARY:
|
|
PUSH HL
|
|
LD HL, (MB_DIMFLG)
|
|
EX (SP), HL
|
|
LD D, A
|
|
MB_INDLOP:
|
|
PUSH DE
|
|
PUSH BC
|
|
LD DE, MB_NAMCNT
|
|
LD A, (DE)
|
|
OR A
|
|
JP Z, MB_SHTNAM
|
|
EX DE, HL
|
|
ADD A, 0x2
|
|
RRA
|
|
LD C, A
|
|
CALL MB_GETSTK
|
|
LD A, C
|
|
MB_LPPSNM:
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
PUSH BC
|
|
DEC A
|
|
JP NZ, MB_LPPSNM
|
|
PUSH HL
|
|
LD A, (MB_NAMCNT)
|
|
PUSH AF
|
|
EX DE, HL
|
|
CALL MB_INTIDX
|
|
POP AF
|
|
LD (MB_NAMTMP), HL
|
|
POP HL
|
|
ADD A, 0x2
|
|
RRA
|
|
MB_LPLNAM:
|
|
POP BC
|
|
DEC HL
|
|
LD (HL), B
|
|
DEC HL
|
|
LD (HL), C
|
|
DEC A
|
|
JP NZ, MB_LPLNAM
|
|
LD HL, (MB_NAMTMP)
|
|
JP MB_LNGNAM
|
|
|
|
MB_SHTNAM:
|
|
CALL MB_INTIDX
|
|
XOR A
|
|
LD (MB_NAMCNT), A
|
|
MB_LNGNAM:
|
|
LD A, (MB_OPTVAL)
|
|
OR A
|
|
JP Z, MB_OPTB0
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_BSERR
|
|
DEC DE
|
|
MB_OPTB0:
|
|
POP BC
|
|
POP AF
|
|
EX DE, HL
|
|
EX (SP), HL
|
|
PUSH HL
|
|
EX DE, HL
|
|
INC A
|
|
LD D, A
|
|
LD A, (HL)
|
|
CP ','
|
|
JP Z, MB_INDLOP
|
|
CP ')'
|
|
JP Z, MB_DOCHRT
|
|
CP ']'
|
|
JP NZ, MB_SNERR
|
|
MB_DOCHRT:
|
|
CALL MB_CHRGTR
|
|
LD (MB_TEMP2), HL
|
|
POP HL
|
|
LD (MB_DIMFLG), HL
|
|
LD E, 0x0
|
|
PUSH DE
|
|
DB 0x11
|
|
MB_ERSFIN:
|
|
PUSH HL
|
|
PUSH AF
|
|
LD HL, (MB_ARYTAB)
|
|
DB 0x3E
|
|
MB_LOPFDA:
|
|
ADD HL, DE
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_NOTFDD
|
|
LD E, (HL)
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
CP C
|
|
JP NZ, MB_NMARY1
|
|
LD A, (MB_VALTYP)
|
|
CP E
|
|
JP NZ, MB_NMARY1
|
|
LD A, (HL)
|
|
CP B
|
|
JP Z, MB_CMPNAM
|
|
MB_NMARY1:
|
|
INC HL
|
|
MB_BNAMSZ:
|
|
LD E, (HL)
|
|
INC E
|
|
LD D, 0x0
|
|
ADD HL, DE
|
|
MB_CNOMAT:
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
JP NZ, MB_LOPFDA
|
|
LD A, (MB_DIMFLG)
|
|
OR A
|
|
JP NZ, MB_DDERR
|
|
POP AF
|
|
LD B, H
|
|
LD C, L
|
|
JP Z, MB_POPHRT
|
|
SUB (HL)
|
|
JP Z, MB_GETDEF
|
|
MB_BSERR:
|
|
LD DE, ERRBS ;"SUBSCRIPT OUT OF RANGE"
|
|
JP MB_ERROR
|
|
MB_CMPNAM:
|
|
INC HL
|
|
LD A, (MB_NAMCNT)
|
|
CP (HL)
|
|
JP NZ, MB_BNAMSZ
|
|
INC HL
|
|
OR A
|
|
JP Z, MB_CNOMAT
|
|
DEC HL
|
|
CALL MB_MATSUB
|
|
JP MB_CNOMAT
|
|
MB_NOTFDD:
|
|
LD A, (MB_VALTYP)
|
|
LD (HL), A
|
|
INC HL
|
|
LD E, A
|
|
LD D, 0x0
|
|
POP AF
|
|
JP Z, MB_PTRRNZ
|
|
LD (HL), C
|
|
INC HL
|
|
LD (HL), B
|
|
CALL MB_NPUTSB
|
|
INC HL
|
|
LD C, A
|
|
CALL MB_GETSTK
|
|
INC HL
|
|
INC HL
|
|
LD (MB_TEMP3), HL
|
|
LD (HL), C
|
|
INC HL
|
|
LD A, (MB_DIMFLG)
|
|
RLA
|
|
LD A, C
|
|
MB_LOPPTA:
|
|
JP C, MB_POPDIM
|
|
PUSH AF
|
|
LD A, (MB_OPTVAL)
|
|
XOR 0xb
|
|
LD C, A
|
|
LD B, 0x0
|
|
POP AF
|
|
JP NC, MB_NOTDIM
|
|
MB_POPDIM:
|
|
POP BC
|
|
INC BC
|
|
MB_NOTDIM:
|
|
LD (HL), C
|
|
PUSH AF
|
|
INC HL
|
|
LD (HL), B
|
|
INC HL
|
|
CALL MB_UMULT
|
|
POP AF
|
|
DEC A
|
|
JP NZ, MB_LOPPTA
|
|
PUSH AF
|
|
LD B, D
|
|
LD C, E
|
|
EX DE, HL
|
|
ADD HL, DE
|
|
JP C, MB_OMERR
|
|
CALL MB_REASON
|
|
LD (MB_STREND), HL
|
|
MB_ZERITA:
|
|
DEC HL
|
|
LD (HL), 0x0
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_ZERITA
|
|
INC BC
|
|
LD D, A
|
|
LD HL, (MB_TEMP3)
|
|
LD E, (HL)
|
|
EX DE, HL
|
|
ADD HL, HL
|
|
ADD HL, BC
|
|
EX DE, HL
|
|
DEC HL
|
|
DEC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
INC HL
|
|
POP AF
|
|
JP C, MB_FINNOW
|
|
MB_GETDEF:
|
|
LD B, A
|
|
LD C, A
|
|
LD A, (HL)
|
|
INC HL
|
|
DB 0x16
|
|
MB_INLPNM:
|
|
POP HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
EX (SP), HL
|
|
PUSH AF
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_BSERR
|
|
CALL MB_UMULT
|
|
ADD HL, DE
|
|
POP AF
|
|
DEC A
|
|
LD B, H
|
|
LD C, L
|
|
JP NZ, MB_INLPNM
|
|
LD A, (MB_VALTYP)
|
|
LD B, H
|
|
LD C, L
|
|
ADD HL, HL
|
|
SUB 0x4
|
|
JP C, MB_SMLVAL
|
|
ADD HL, HL
|
|
JP Z, MB_DONMUL
|
|
ADD HL, HL
|
|
MB_SMLVAL:
|
|
OR A
|
|
JP PO, MB_DONMUL
|
|
ADD HL, BC
|
|
MB_DONMUL:
|
|
POP BC
|
|
ADD HL, BC
|
|
EX DE, HL
|
|
MB_FINNOW:
|
|
LD HL, (MB_TEMP2)
|
|
RET
|
|
MB_PTRRNZ:
|
|
SCF
|
|
SBC A, A
|
|
POP HL
|
|
RET
|
|
|
|
MB_IADAHL:
|
|
LD A, (HL)
|
|
INC HL
|
|
MB_ADDAHL:
|
|
PUSH BC
|
|
LD B, 0x0
|
|
LD C, A
|
|
ADD HL, BC
|
|
POP BC
|
|
RET
|
|
|
|
MB_NPUTSB:
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH AF
|
|
LD DE, MB_NAMCNT
|
|
LD A, (DE)
|
|
LD B, A
|
|
INC B
|
|
MB_SLPLNG:
|
|
LD A, (DE)
|
|
INC DE
|
|
INC HL
|
|
LD (HL), A
|
|
DEC B
|
|
JP NZ, MB_SLPLNG
|
|
POP AF
|
|
POP DE
|
|
POP BC
|
|
RET
|
|
|
|
MB_MATSUB:
|
|
PUSH DE
|
|
PUSH BC
|
|
LD DE, MB_NAMBUF
|
|
LD B, A
|
|
INC HL
|
|
INC B
|
|
|
|
MB_SLPMAT:
|
|
DEC B
|
|
JP Z, MB_ISMAT2
|
|
LD A, (DE)
|
|
INC DE
|
|
CP (HL)
|
|
INC HL
|
|
JP Z, MB_SLPMAT
|
|
LD A, B
|
|
DEC A
|
|
CALL NZ, MB_ADDAHL
|
|
XOR A
|
|
DEC A
|
|
MB_ISMAT2:
|
|
POP BC
|
|
POP DE
|
|
RET
|
|
|
|
; ===================================================
|
|
; BASIC Interpreter EDIT routines/PGA etc.
|
|
; BIEDIT.MAC
|
|
; ===================================================
|
|
MB_ERREDT:
|
|
LD (MB_ERRFLG), A
|
|
LD HL, (MB_ERRLIN)
|
|
OR H
|
|
AND L
|
|
INC A
|
|
EX DE, HL
|
|
RET Z
|
|
JP MB_EREDIT
|
|
MB_EDIT:
|
|
CALL MB_LINSPC
|
|
RET NZ
|
|
MB_EREDIT:
|
|
POP HL
|
|
MB_EEDITS:
|
|
EX DE, HL
|
|
LD (MB_DOT), HL
|
|
EX DE, HL
|
|
CALL MB_FNDLIN
|
|
JP NC, MB_USERR
|
|
LD H, B
|
|
LD L, C
|
|
INC HL
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
PUSH BC
|
|
CALL MB_BUFLIN
|
|
|
|
MB_LLED:
|
|
POP HL
|
|
MB_INLED:
|
|
PUSH HL
|
|
LD A, H
|
|
AND L
|
|
INC A
|
|
LD A, '!'
|
|
CALL Z, MB_OUTDO
|
|
CALL NZ, MB_LINPTR
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
LD HL, MB_BUF
|
|
PUSH HL
|
|
LD C, 0xff
|
|
MB_LENLP:
|
|
INC C
|
|
LD A, (HL)
|
|
INC HL
|
|
OR A
|
|
JP NZ, MB_LENLP
|
|
POP HL
|
|
LD B, A
|
|
MB_DISPED:
|
|
LD D, 0x0
|
|
MB_DISPI:
|
|
CALL MB_INCHRI
|
|
OR A
|
|
JP Z, MB_DISPI
|
|
CALL MB_MAKUPS
|
|
SUB '0'
|
|
JP C, MB_NOTDGI
|
|
CP 10
|
|
JP NC, MB_NOTDGI
|
|
LD E, A
|
|
LD A, D
|
|
RLCA
|
|
RLCA
|
|
ADD A, D
|
|
RLCA
|
|
ADD A, E
|
|
LD D, A
|
|
JP MB_DISPI
|
|
MB_NOTDGI:
|
|
PUSH HL
|
|
LD HL, MB_DISPED
|
|
EX (SP), HL
|
|
DEC D
|
|
INC D
|
|
JP NZ, MB_NTZERD
|
|
INC D
|
|
MB_NTZERD:
|
|
CP 0xd8 ; 8 - '0' - Backspace?
|
|
JP Z, MB_BAKED
|
|
CP 0x4f ; 0x7F - '0' - DEL?
|
|
JP Z, MB_DELED
|
|
CP 0xdd ; 13 - '0' - CARRIAGE RETURN
|
|
JP Z, MB_CRED
|
|
CP 0xf0 ; ' ' - '0' - SPACE
|
|
JP Z, MB_SPED
|
|
CP 0x31 ; 'A' + 0x20 - '0' - COMMAND IN LOWER CASE?
|
|
JP C, MB_NOTLW4
|
|
SUB 0x20
|
|
MB_NOTLW4:
|
|
CP 0x21 ; 'Q' - '0'
|
|
JP Z, MB_QED
|
|
CP 0x1c ; 'L' - '0'
|
|
JP Z, MB_LED
|
|
CP 0x23 ; 'S' - '0'
|
|
JP Z, MB_SED
|
|
CP 0x19 ; 'I' - '0'
|
|
JP Z, MB_IED
|
|
CP 0x14 ; 'D' - '0'
|
|
JP Z, MB_DED
|
|
CP 0x13 ; 'C' - '0'
|
|
JP Z, MB_CED
|
|
CP 0x15 ; 'E'-'0'
|
|
JP Z, MB_EED
|
|
CP 0x28 ;'X'-'0'
|
|
JP Z, MB_XED
|
|
CP 0x1b ;'K'-'0'
|
|
JP Z, MB_KED
|
|
CP 0x18 ;'H'-'0'
|
|
JP Z, MB_HED
|
|
CP 0x11 ;'A'-'0'
|
|
LD A, 0x7
|
|
JP NZ, MB_OUTDO
|
|
POP BC
|
|
POP DE
|
|
CALL MB_CRDO
|
|
JP MB_EEDITS
|
|
|
|
MB_SPED:
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
INC B
|
|
CALL MB_OUTCH1
|
|
INC HL
|
|
DEC D
|
|
JP NZ, MB_SPED
|
|
RET
|
|
|
|
MB_KED:
|
|
PUSH HL
|
|
LD HL, MB_TYPSLH
|
|
EX (SP), HL
|
|
SCF
|
|
MB_SED:
|
|
PUSH AF
|
|
CALL MB_INCHRI
|
|
LD E, A
|
|
POP AF
|
|
PUSH AF
|
|
CALL C, MB_TYPSLH
|
|
MB_SRCALP:
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_POPART
|
|
CALL MB_OUTCH1
|
|
POP AF
|
|
PUSH AF
|
|
CALL C, MB_DELCHR
|
|
JP C, MB_NOTSRC
|
|
INC HL
|
|
INC B
|
|
MB_NOTSRC:
|
|
LD A, (HL)
|
|
CP E
|
|
JP NZ, MB_SRCALP
|
|
DEC D
|
|
JP NZ, MB_SRCALP
|
|
|
|
MB_POPART:
|
|
POP AF
|
|
RET
|
|
|
|
MB_LED:
|
|
CALL MB_LISPRT
|
|
CALL MB_CRDO
|
|
POP BC
|
|
JP MB_LLED
|
|
|
|
MB_DED:
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
LD A, ASCII_BKSL
|
|
CALL MB_OUTCH1
|
|
MB_DELLP:
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_TYPSLH
|
|
CALL MB_OUTCH1
|
|
CALL MB_DELCHR
|
|
DEC D
|
|
JP NZ, MB_DELLP
|
|
|
|
MB_TYPSLH:
|
|
LD A, ASCII_BKSL
|
|
CALL MB_OUTDO
|
|
RET
|
|
|
|
MB_CED:
|
|
LD A, (HL)
|
|
OR A
|
|
RET Z
|
|
|
|
MB_CED2:
|
|
CALL MB_INCHRI
|
|
CP ASCII_SP
|
|
JP NC, MB_NOTCCC
|
|
CP ASCII_LF
|
|
JP Z, MB_NOTCCC
|
|
CP ASCII_BELL
|
|
JP Z, MB_NOTCCC
|
|
CP ASCII_TAB
|
|
JP Z, MB_NOTCCC
|
|
LD A, ASCII_BELL
|
|
CALL MB_OUTDO
|
|
JP MB_CED2
|
|
MB_NOTCCC:
|
|
LD (HL), A
|
|
CALL MB_OUTCH1
|
|
INC HL
|
|
INC B
|
|
DEC D
|
|
JP NZ, MB_CED
|
|
RET
|
|
MB_HED:
|
|
LD (HL), 0x0
|
|
LD C, B
|
|
MB_XED:
|
|
LD D, 0xff
|
|
CALL MB_SPED
|
|
;NOW FALL INTO INSERT CODE
|
|
MB_IED:
|
|
CALL MB_INCHRI
|
|
CP ASCII_DEL ;DEL key
|
|
JP Z, MB_TYPARW
|
|
CP ASCII_BKSP
|
|
JP Z, MB_TYPAR1
|
|
CP ASCII_CR
|
|
JP Z, MB_CRED
|
|
CP ASCII_ESC
|
|
RET Z
|
|
CP ASCII_BKSP
|
|
JP Z, MB_TYPAR1
|
|
CP ASCII_LF
|
|
JP Z, MB_NTARRW
|
|
CP ASCII_BELL
|
|
JP Z, MB_NTARRW
|
|
CP ASCII_TAB
|
|
JP Z, MB_NTARRW
|
|
CP ASCII_SP
|
|
JP C, MB_IED
|
|
CP '_'
|
|
JP NZ, MB_NTARRW
|
|
MB_TYPARW:
|
|
LD A, '_'
|
|
MB_TYPAR1:
|
|
DEC B
|
|
INC B
|
|
JP Z, MB_DINGI
|
|
CALL MB_OUTCH1
|
|
DEC HL
|
|
DEC B
|
|
LD DE, MB_IED
|
|
PUSH DE
|
|
|
|
; ===================================================
|
|
; DELETE CHAR POINTED TO BY [HL]. CORRECTS C
|
|
; ===================================================
|
|
MB_DELCHR:
|
|
PUSH HL
|
|
DEC C
|
|
MB_CMPRSS:
|
|
LD A, (HL) ;= 44
|
|
OR A
|
|
SCF
|
|
JP Z, MB_POPHRT
|
|
INC HL
|
|
LD A, (HL)
|
|
DEC HL
|
|
LD (HL), A ;= 44
|
|
INC HL
|
|
JP MB_CMPRSS
|
|
MB_NTARRW:
|
|
PUSH AF
|
|
LD A, C
|
|
CP 0xff
|
|
JP C, MB_OKINS
|
|
POP AF
|
|
MB_DINGI:
|
|
LD A, 0x7
|
|
CALL MB_OUTDO
|
|
MB_IEDG:
|
|
JP MB_IED
|
|
MB_OKINS:
|
|
SUB B
|
|
INC C
|
|
INC B
|
|
PUSH BC
|
|
EX DE, HL
|
|
LD L, A
|
|
LD H, 0x0
|
|
ADD HL, DE
|
|
LD B, H
|
|
LD C, L
|
|
INC HL
|
|
CALL MB_BLTUC
|
|
POP BC
|
|
POP AF
|
|
LD (HL), A
|
|
CALL MB_OUTCH1
|
|
INC HL
|
|
JP MB_IEDG
|
|
MB_BAKED:
|
|
LD A, B
|
|
OR A
|
|
RET Z
|
|
DEC HL
|
|
LD A, ASCII_BKSP
|
|
CALL MB_OUTCH1
|
|
DEC B
|
|
DEC D
|
|
JP NZ, MB_DELED
|
|
RET
|
|
MB_DELED:
|
|
LD A, B
|
|
OR A
|
|
RET Z
|
|
DEC B
|
|
DEC HL
|
|
LD A, (HL) ;= 44
|
|
CALL MB_OUTCH1
|
|
DEC D
|
|
JP NZ, MB_DELED
|
|
RET
|
|
MB_CRED:
|
|
CALL MB_LISPRT
|
|
MB_EED:
|
|
CALL MB_CRDO
|
|
POP BC
|
|
POP DE
|
|
LD A, D
|
|
AND E
|
|
INC A
|
|
|
|
;START KRUNCHING AT BUF
|
|
MB_EDITRT:
|
|
LD HL, MB_BUFMIN ;BUF-1
|
|
RET Z
|
|
SCF
|
|
PUSH AF
|
|
INC HL
|
|
JP MB_EDENT
|
|
MB_QED:
|
|
POP BC
|
|
POP DE
|
|
LD A, D
|
|
AND E
|
|
INC A
|
|
JP Z, MB_FININL
|
|
JP MB_READY
|
|
MB_PRINUS:
|
|
CALL MB_FRMCHK
|
|
CALL MB_CHKSTR
|
|
CALL MB_SYNCHR
|
|
;BYTE_ram_3f00:
|
|
DB ';'
|
|
;LAB_ram_3f01:
|
|
EX DE, HL
|
|
LD HL, (MB_FACLO)
|
|
JP MB_INIUS
|
|
MB_REUSST:
|
|
LD A, (MB_FLGINP)
|
|
OR A
|
|
JP Z, MB_FCERR3
|
|
POP DE
|
|
EX DE, HL
|
|
MB_INIUS:
|
|
PUSH HL
|
|
XOR A
|
|
LD (MB_FLGINP), A
|
|
INC A
|
|
PUSH AF
|
|
PUSH DE
|
|
LD B, (HL)
|
|
OR B
|
|
MB_FCERR3:
|
|
JP Z, MB_FCERR
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
JP MB_PRCCHR
|
|
MB_BGSTRF:
|
|
LD E, B
|
|
PUSH HL
|
|
LD C, 0x2
|
|
MB_LPSTRF:
|
|
LD A, (HL)
|
|
INC HL
|
|
CP ASCII_BKSL
|
|
JP Z, MB_ISSTRF
|
|
CP ASCII_SP
|
|
JP NZ, MB_NOSTRF
|
|
INC C
|
|
DEC B
|
|
JP NZ, MB_LPSTRF
|
|
MB_NOSTRF:
|
|
POP HL
|
|
LD B, E
|
|
LD A, ASCII_BKSL
|
|
MB_NEWUCH:
|
|
CALL MB_PLSPRT
|
|
CALL MB_OUTDO
|
|
MB_PRCCHR:
|
|
XOR A
|
|
LD E, A
|
|
LD D, A
|
|
MB_PLSFIN:
|
|
CALL MB_PLSPRT
|
|
LD D, A
|
|
LD A, (HL)
|
|
INC HL
|
|
CP '!'
|
|
JP Z, MB_SMSTRF
|
|
CP '#'
|
|
JP Z, MB_NUMNUM
|
|
CP '&'
|
|
JP Z, MB_VARSTR
|
|
DEC B
|
|
JP Z, MB_REUSIN
|
|
CP '+'
|
|
LD A, 0x8
|
|
JP Z, MB_PLSFIN
|
|
DEC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
CP '.'
|
|
JP Z, MB_DOTNUM
|
|
CP '_'
|
|
JP Z, MB_LITCHR
|
|
CP ASCII_BKSL
|
|
JP Z, MB_BGSTRF
|
|
CP (HL)
|
|
JP NZ, MB_NEWUCH
|
|
CP ASCII_CUR
|
|
JP Z, MB_DOLRNM
|
|
CP '*'
|
|
JP NZ, MB_NEWUCH
|
|
LD A, B
|
|
INC HL
|
|
CP 0x2
|
|
JP C, MB_NOTSPC
|
|
LD A, (HL)
|
|
CP ASCII_CUR
|
|
|
|
MB_NOTSPC:
|
|
LD A, ASCII_SP
|
|
JP NZ, MB_SPCNUM
|
|
DEC B
|
|
INC E
|
|
DB 0xFE
|
|
|
|
MB_DOLRNM:
|
|
XOR A
|
|
ADD A, 0x10
|
|
INC HL
|
|
|
|
MB_SPCNUM:
|
|
INC E
|
|
ADD A, D
|
|
LD D, A
|
|
|
|
MB_NUMNUM:
|
|
INC E
|
|
LD C, 0x0
|
|
DEC B
|
|
JP Z, MB_ENDNUS
|
|
LD A, (HL)
|
|
INC HL
|
|
CP '.'
|
|
JP Z, MB_AFTDOT
|
|
CP '#'
|
|
JP Z, MB_NUMNUM
|
|
CP ','
|
|
JP NZ, MB_FINNUM
|
|
LD A, D
|
|
OR 0x40
|
|
LD D, A
|
|
JP MB_NUMNUM
|
|
MB_DOTNUM:
|
|
LD A, (HL)
|
|
CP '#'
|
|
LD A, '.'
|
|
JP NZ, MB_NEWUCH
|
|
LD C, 0x1
|
|
INC HL
|
|
MB_AFTDOT:
|
|
INC C
|
|
DEC B
|
|
JP Z, MB_ENDNUS
|
|
LD A, (HL)
|
|
INC HL
|
|
CP '#'
|
|
JP Z, MB_AFTDOT
|
|
MB_FINNUM:
|
|
PUSH DE
|
|
LD DE, MB_NOTSCI
|
|
PUSH DE
|
|
LD D, H
|
|
LD E, L
|
|
CP '^'
|
|
RET NZ
|
|
CP (HL)
|
|
RET NZ
|
|
INC HL
|
|
CP (HL)
|
|
RET NZ
|
|
INC HL
|
|
CP (HL)
|
|
RET NZ
|
|
INC HL
|
|
LD A, B
|
|
SUB 0x4
|
|
RET C
|
|
POP DE
|
|
POP DE
|
|
LD B, A
|
|
INC D
|
|
INC HL
|
|
DB 0xCA
|
|
MB_NOTSCI:
|
|
EX DE, HL
|
|
POP DE
|
|
MB_ENDNUS:
|
|
LD A, D
|
|
DEC HL
|
|
INC E
|
|
AND 0x8
|
|
JP NZ, MB_ENDNUM
|
|
DEC E
|
|
LD A, B
|
|
LAB_ram_4000:
|
|
OR A
|
|
LAB_ram_4001:
|
|
JP Z, MB_ENDNUM
|
|
LD A, (HL)
|
|
SUB '-'
|
|
JP Z, MB_SGNTRL
|
|
CP 0xfe ;'+'-'-' - A TRAILING PLUS?
|
|
JP NZ, MB_ENDNUM
|
|
LD A, 0x8
|
|
MB_SGNTRL:
|
|
ADD A, 0x4
|
|
ADD A, D
|
|
LD D, A
|
|
DEC B
|
|
MB_ENDNUM:
|
|
POP HL
|
|
POP AF
|
|
JP Z, MB_FLDFIN
|
|
PUSH BC
|
|
PUSH DE
|
|
CALL MB_FRMEVL
|
|
POP DE
|
|
POP BC
|
|
PUSH BC
|
|
PUSH HL
|
|
LD B, E
|
|
LD A, B
|
|
ADD A, C
|
|
CP 0x19
|
|
JP NC, MB_FCERR
|
|
LD A, D
|
|
OR 0x80
|
|
CALL MB_PUFOUT
|
|
CALL MB_STROUT
|
|
MB_FNSTRF:
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
SCF
|
|
JP Z, MB_CRDNUS
|
|
LD (MB_FLGINP), A
|
|
CP ';'
|
|
JP Z, MB_SEMUSN
|
|
CP ','
|
|
JP NZ, MB_SNERR
|
|
MB_SEMUSN:
|
|
CALL MB_CHRGTR
|
|
MB_CRDNUS:
|
|
POP BC
|
|
EX DE, HL
|
|
POP HL
|
|
PUSH HL
|
|
PUSH AF
|
|
PUSH DE
|
|
LD A, (HL)
|
|
SUB B
|
|
INC HL
|
|
LD D, 0x0
|
|
LD E, A
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
ADD HL, DE
|
|
MB_CHKUSI:
|
|
LD A, B
|
|
OR A
|
|
JP NZ, MB_PRCCHR
|
|
JP MB_FINUSI
|
|
MB_REUSIN:
|
|
CALL MB_PLSPRT
|
|
CALL MB_OUTDO
|
|
MB_FINUSI:
|
|
POP HL
|
|
POP AF
|
|
JP NZ, MB_REUSST
|
|
MB_FLDFIN:
|
|
CALL C, MB_CRDO
|
|
EX (SP), HL
|
|
CALL MB_FRETM2
|
|
POP HL
|
|
JP MB_FINPRT
|
|
MB_LITCHR:
|
|
CALL MB_PLSPRT
|
|
DEC B
|
|
LD A, (HL)
|
|
INC HL
|
|
CALL MB_OUTDO
|
|
JP MB_CHKUSI
|
|
MB_VARSTR:
|
|
LD C, 0x0
|
|
JP MB_ISSTR1
|
|
MB_SMSTRF:
|
|
LD C, 0x1
|
|
DB 0x3E
|
|
MB_ISSTRF:
|
|
POP AF
|
|
MB_ISSTR1:
|
|
DEC B
|
|
CALL MB_PLSPRT
|
|
POP HL
|
|
POP AF
|
|
JP Z, MB_FLDFIN
|
|
PUSH BC
|
|
CALL MB_FRMEVL
|
|
CALL MB_CHKSTR
|
|
POP BC
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, (MB_FACLO)
|
|
LD B, C
|
|
LD C, 0x0
|
|
LD A, B
|
|
PUSH AF
|
|
LD A, B
|
|
OR A
|
|
CALL NZ, MB_LEFTUS
|
|
CALL MB_STRPRT
|
|
LD HL, (MB_FACLO)
|
|
POP AF
|
|
OR A
|
|
JP Z, MB_FNSTRF
|
|
SUB (HL)
|
|
LD B, A
|
|
LD A, ASCII_SP
|
|
INC B
|
|
MB_UPRTSP:
|
|
DEC B
|
|
JP Z, MB_FNSTRF
|
|
CALL MB_OUTDO
|
|
JP MB_UPRTSP
|
|
MB_PLSPRT:
|
|
PUSH AF
|
|
LD A, D
|
|
OR A
|
|
LD A, '+'
|
|
CALL NZ, MB_OUTDO
|
|
POP AF
|
|
RET
|
|
; ===================================================
|
|
; BIO BASIC Interpreter I/O routines/WHG/PGA/MBM...
|
|
; BIO.MAC
|
|
; ===================================================
|
|
MB_OUTDO:
|
|
PUSH AF
|
|
PUSH HL
|
|
CALL MB_PTRFILZ
|
|
JP NZ, MB_FILOUT
|
|
POP HL
|
|
MB_LPTCOD:
|
|
LD A, (MB_PRTFLG)
|
|
OR A
|
|
JP Z, MB_TTYCHR
|
|
POP AF
|
|
PUSH AF
|
|
CP ASCII_BKSP
|
|
JP NZ, MB_NTBKS2
|
|
LD A, (MB_LPTPOS)
|
|
SUB 0x1
|
|
JP C, MB_OLPTCHR
|
|
LD (MB_LPTPOS), A
|
|
MB_OLPTCHR:
|
|
POP AF
|
|
JP MB_LPTCHR
|
|
MB_NTBKS2:
|
|
CP ASCII_TAB
|
|
JP NZ, MB_NOTABL
|
|
MB_MORSPL:
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
LD A, (MB_LPTPOS)
|
|
AND 0x7
|
|
JP NZ, MB_MORSPL
|
|
POP AF
|
|
RET
|
|
MB_NOTABL:
|
|
POP AF
|
|
PUSH AF
|
|
SUB 0xd
|
|
JP Z, MB_ZERLP1
|
|
JP C, MB_LPTCH1
|
|
LD A, (MB_LPTSIZ) ;= 132
|
|
INC A
|
|
LD A, (MB_LPTPOS)
|
|
JP Z, MB_ZERLPT
|
|
PUSH HL
|
|
LD HL, MB_LPTSIZ ;= 132
|
|
CP (HL) ;= 132
|
|
POP HL
|
|
CALL Z, MB_PRINTW
|
|
MB_ZERLPT:
|
|
CP 0xff
|
|
JP Z, MB_LPTCH1
|
|
INC A
|
|
MB_ZERLP1:
|
|
LD (MB_LPTPOS), A
|
|
MB_LPTCH1:
|
|
POP AF
|
|
|
|
; ------------------------------------------------------
|
|
MB_LPTCHR:
|
|
PUSH AF
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
LD C, A
|
|
LPTO_ADDR EQU $+1
|
|
CALL 0x0000
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
POP AF
|
|
RET
|
|
MB_FINLPT:
|
|
XOR A
|
|
LD (MB_PRTFLG), A
|
|
LD A, (MB_LPTPOS)
|
|
OR A
|
|
RET Z
|
|
MB_PRINTW:
|
|
LD A, ASCII_CR
|
|
CALL MB_LPTCHR
|
|
LD A, ASCII_LF
|
|
CALL MB_LPTCHR
|
|
XOR A
|
|
LD (MB_LPTPOS), A
|
|
RET
|
|
MB_TTYCHR:
|
|
LD A, (MB_CNTOFL)
|
|
OR A
|
|
JP NZ, MB_PPSWRT
|
|
POP AF
|
|
PUSH BC
|
|
PUSH AF
|
|
CP ASCII_BKSP
|
|
JP NZ, MB_NTBKS1
|
|
LD A, (MB_TTYPOS)
|
|
OR A
|
|
JP Z, MB_MORSPR
|
|
DEC A
|
|
LD (MB_TTYPOS), A
|
|
LD A, ASCII_BKSP
|
|
JP MB_TRYOUT
|
|
MB_NTBKS1:
|
|
CP ASCII_TAB
|
|
JP NZ, MB_NOTAB
|
|
MB_MORSP:
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
LD A, (MB_TTYPOS)
|
|
AND 0x7
|
|
JP NZ, MB_MORSP
|
|
MB_MORSPR:
|
|
POP AF
|
|
POP BC
|
|
RET
|
|
MB_NOTAB:
|
|
CP 0x20
|
|
JP C, MB_TRYOUT
|
|
LD A, (MB_LINLEN) ;= 80
|
|
LD B, A
|
|
LD A, (MB_TTYPOS)
|
|
INC B
|
|
JP Z, MB_INCTPS
|
|
DEC B
|
|
CP B
|
|
CALL Z, MB_CRDO
|
|
MB_INCTPS:
|
|
CP 0xff
|
|
JP Z, MB_TRYOUT
|
|
INC A
|
|
LD (MB_TTYPOS), A
|
|
MB_TRYOUT:
|
|
POP AF
|
|
POP BC
|
|
PUSH AF
|
|
POP AF
|
|
|
|
; --------------------------------------------------
|
|
; Print symbol from A via BIOS fn
|
|
; --------------------------------------------------
|
|
MB_NOPRIN:
|
|
PUSH AF
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
LD C, A
|
|
CO_ADDR EQU $+1
|
|
CALL 0x0000
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
POP AF
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_INCHR:
|
|
CALL MB_PTRFILZ
|
|
JP Z, MB_INCHRI
|
|
CALL MB_INDSKC
|
|
RET NC
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL MB_PRGFIN
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
LD A, (MB_CHNFLG)
|
|
OR A
|
|
JP NZ, MB_CHNRET
|
|
LD A, (MB_LSTFRE)
|
|
OR A
|
|
JP Z, MB_OU_RDY
|
|
LD HL, MB_NEWSTT
|
|
PUSH HL
|
|
JP MB_RUNC
|
|
MB_OU_RDY:
|
|
PUSH HL
|
|
PUSH BC
|
|
PUSH DE
|
|
LD HL, MB_OKTXT ;= "OK\r\n"
|
|
CALL MB_STROUT
|
|
POP DE
|
|
POP BC
|
|
XOR A
|
|
POP HL
|
|
RET
|
|
|
|
MB_INCHRI:
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
|
|
; --------------------------------------------------
|
|
; Console Input
|
|
; --------------------------------------------------
|
|
MB_CONIN:
|
|
CI_ADDR EQU $+1
|
|
CALL WARM_BOOT
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
MB_INEXIT:
|
|
AND 0x7f
|
|
CP 0xf
|
|
RET NZ
|
|
LD A, (MB_CNTOFL)
|
|
OR A
|
|
CALL Z, MB_CTROPT
|
|
CPL
|
|
LD (MB_CNTOFL), A
|
|
OR A
|
|
JP Z, MB_CTROPT
|
|
XOR A
|
|
RET
|
|
;Put out a carriage return and associated routines
|
|
MB_CRDONZ:
|
|
LD A, (MB_TTYPOS)
|
|
OR A
|
|
RET Z
|
|
JP MB_CRDO
|
|
MB_FININL:
|
|
LD (HL), 0x0
|
|
LD HL, MB_BUFMIN ;= 44
|
|
MB_CRDO:
|
|
LD A, ASCII_CR
|
|
CALL MB_OUTDO
|
|
LD A, ASCII_LF
|
|
MB_CRFINO:
|
|
CALL MB_OUTDO
|
|
|
|
MB_CRFIN:
|
|
CALL MB_PTRFILZ
|
|
JP Z, MB_CRCONT
|
|
XOR A
|
|
RET
|
|
MB_CRCONT:
|
|
LD A, (MB_PRTFLG)
|
|
OR A
|
|
JP Z, MB_NTPRTR
|
|
XOR A
|
|
LD (MB_LPTPOS), A
|
|
RET
|
|
MB_NTPRTR:
|
|
XOR A
|
|
LD (MB_TTYPOS), A
|
|
LD A, (MB_NULCNT) ;= 01h
|
|
MB_PRTNUL:
|
|
DEC A
|
|
RET Z
|
|
PUSH AF
|
|
XOR A
|
|
CALL MB_OUTDO
|
|
POP AF
|
|
JP MB_PRTNUL
|
|
MB_ISCNTC:
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
|
|
; --------------------------------------------------
|
|
MB_CONSTS:
|
|
CTC_ADDR1 EQU $+1
|
|
CALL WARM_BOOT
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
OR A
|
|
RET Z
|
|
MB_CNTCCN:
|
|
CALL MB_INCHRI
|
|
CP 0x13
|
|
CALL Z, MB_INCHRI
|
|
LD (MB_CHARC), A
|
|
CP 0x3
|
|
CALL Z, MB_CTRLPT
|
|
JP MB_STOP
|
|
MB_INKEY:
|
|
CALL MB_CHRGTR
|
|
PUSH HL
|
|
CALL MB_CHARCG
|
|
JP NZ, MB_BUFCIN
|
|
CTC_ADDR3 EQU $+1
|
|
CALL 0x0000
|
|
OR A
|
|
JP Z, MB_NULRT
|
|
CALL MB_INCHRI
|
|
MB_BUFCIN:
|
|
PUSH AF
|
|
CALL MB_STRIN1
|
|
POP AF
|
|
LD E, A
|
|
CALL MB_SETSTR
|
|
MB_NULRT:
|
|
LD HL, MB_OKTXT-1 ;REDDY-1
|
|
LD (MB_FACLO), HL
|
|
LD A, 0x3
|
|
LD (MB_VALTYP), A
|
|
POP HL
|
|
RET
|
|
MB_CHARCG:
|
|
LD A, (MB_CHARC)
|
|
OR A
|
|
RET Z
|
|
PUSH AF
|
|
XOR A
|
|
LD (MB_CHARC), A
|
|
POP AF
|
|
RET
|
|
MB_OUTCH1:
|
|
CALL MB_OUTDO
|
|
CP ASCII_LF
|
|
RET NZ
|
|
LD A, ASCII_CR
|
|
CALL MB_OUTDO
|
|
CALL MB_CRFIN
|
|
LD A, ASCII_LF
|
|
RET
|
|
; ===================================================
|
|
; BIMISC.MAC
|
|
; ===================================================
|
|
;BLOCK TRANSFER ROUTINE
|
|
MB_BLTU:
|
|
CALL MB_REASON
|
|
|
|
MB_BLTUC:
|
|
PUSH BC
|
|
EX (SP), HL
|
|
POP BC
|
|
|
|
MB_BLTLOP:
|
|
CALL MB_DCOMPR
|
|
LD A, (HL)
|
|
LD (BC), A
|
|
RET Z
|
|
DEC BC
|
|
DEC HL
|
|
JP MB_BLTLOP
|
|
|
|
MB_GETSTK:
|
|
PUSH HL
|
|
LD HL, (MB_MEMSIZ)
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
ADD HL, BC
|
|
LD A, CONS1 ;256-(2*NUMLEV)
|
|
SUB L
|
|
LD L, A
|
|
LD A, 0xff
|
|
SBC A, H
|
|
LD H, A
|
|
JP C, MB_OMERR
|
|
ADD HL, SP
|
|
POP HL
|
|
RET C
|
|
|
|
; -------------------------------------------------------
|
|
MB_OMERR:
|
|
LD HL, (MB_TOPMEM)
|
|
DEC HL
|
|
DEC HL
|
|
LD (MB_SAVSTK), HL
|
|
MB_OMERRR:
|
|
LD DE, ERROM
|
|
JP MB_ERROR
|
|
|
|
; -------------------------------------------------------
|
|
MB_REASON:
|
|
CALL MB_REALLY
|
|
RET NC
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL MB_GARBA2
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
CALL MB_REALLY
|
|
RET NC
|
|
JP MB_OMERRR
|
|
|
|
MB_REALLY:
|
|
PUSH DE
|
|
EX DE, HL
|
|
LD HL, (MB_FRETOP)
|
|
CALL MB_DCOMPR
|
|
EX DE, HL
|
|
POP DE
|
|
RET
|
|
|
|
MB_NODSKS:
|
|
LD A, (MB_MAXFIL)
|
|
LD B, A
|
|
LD HL, MB_FILPTR
|
|
XOR A
|
|
INC B
|
|
|
|
MB_LOPNTO:
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
LD (DE), A
|
|
DEC B
|
|
JP NZ, MB_LOPNTO
|
|
CALL MB_CLSALL
|
|
XOR A
|
|
MB_SCRATH:
|
|
RET NZ
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_SCRTCH:
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
CALL MB_TOFF
|
|
LD (MB_PROFLG), A
|
|
LD (MB_AUTFLG), A
|
|
LD (MB_PTRFLG), A
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
INC HL
|
|
LD (MB_VARTAB), HL
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_RUNC:
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
DEC HL
|
|
MB_CLEARC:
|
|
LD (MB_TEMP), HL
|
|
LD A, (MB_MRGFLG)
|
|
OR A
|
|
JP NZ, MB_LEVDTB
|
|
XOR A
|
|
LD (MB_OPTFLG), A
|
|
LD (MB_OPTVAL), A
|
|
;INITIALIZE THE DEFAULT VALTYPE TABLE
|
|
LD B, 26
|
|
LD HL, MB_DEFTBL
|
|
MB_LOPDFT:
|
|
LD (HL), 0x4
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_LOPDFT
|
|
MB_LEVDTB:
|
|
LD DE, MB_RNDCOP ;= 82
|
|
LD HL, MB_RNDX
|
|
CALL MB_MOVE
|
|
LD HL, MB_RNDCNT - 1
|
|
XOR A
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
XOR A
|
|
LD (MB_ONEFLG), A
|
|
LD L, A
|
|
LD H, A
|
|
LD (MB_ONELIN), HL
|
|
LD (MB_OLDTXT), HL
|
|
LD HL, (MB_MEMSIZ)
|
|
LD A, (MB_CHNFLG)
|
|
OR A
|
|
JP NZ, MB_GODFRE
|
|
LD (MB_FRETOP), HL
|
|
MB_GODFRE:
|
|
XOR A
|
|
CALL MB_RESTORE
|
|
LD HL, (MB_VARTAB)
|
|
LD (MB_ARYTAB), HL
|
|
LD (MB_STREND), HL
|
|
LD A, (MB_MRGFLG)
|
|
OR A
|
|
CALL Z, MB_CLSALL
|
|
MB_STKINI:
|
|
POP BC
|
|
LD HL, (MB_TOPMEM)
|
|
DEC HL
|
|
DEC HL
|
|
LD (MB_SAVSTK), HL
|
|
INC HL
|
|
INC HL
|
|
MB_STKERR:
|
|
LD SP, HL
|
|
LD HL, MB_TEMPST
|
|
LD (MB_TEMPPT), HL
|
|
CALL MB_CLROVC
|
|
CALL MB_FINLPT
|
|
CALL MB_FINPRT
|
|
XOR A
|
|
LD H, A
|
|
LD L, A
|
|
LD (MB_PRMLEN), HL
|
|
LD (MB_NOFUNS), A
|
|
LD (MB_PRMLN2), HL
|
|
LD (MB_FUNACT), HL
|
|
LD (MB_PRMSTK), HL
|
|
LD (MB_SUBFLG), A
|
|
PUSH HL
|
|
PUSH BC
|
|
MB_GTMPRT:
|
|
LD HL, (MB_TEMP)
|
|
RET
|
|
|
|
; ===================================================
|
|
MB_DCOMPR:
|
|
LD A, H
|
|
SUB D
|
|
RET NZ
|
|
LD A, L
|
|
SUB E
|
|
RET
|
|
|
|
; ===================================================
|
|
MB_SYNCHR:
|
|
LD A, (HL)
|
|
EX (SP), HL
|
|
CP (HL)
|
|
JP NZ, MB_SYNERR
|
|
INC HL
|
|
EX (SP), HL
|
|
INC HL
|
|
LD A, (HL)
|
|
CP ':'
|
|
RET NC
|
|
JP MB_CHRCON
|
|
MB_SYNERR:
|
|
JP MB_SNERR
|
|
MB_RESTORE:
|
|
EX DE, HL
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
JP Z, MB_BGNRST
|
|
EX DE, HL
|
|
CALL MB_LINGET
|
|
PUSH HL
|
|
CALL MB_FNDLIN
|
|
LD H, B
|
|
LD L, C
|
|
POP DE
|
|
JP NC, MB_USERR
|
|
MB_BGNRST:
|
|
DEC HL
|
|
MB_RESFIN:
|
|
LD (MB_DATPTR), HL
|
|
EX DE, HL
|
|
RET
|
|
MB_STOP:
|
|
RET NZ
|
|
MB_STOPRG:
|
|
INC A
|
|
JP MB_CONSTP
|
|
MB_ENDS:
|
|
RET NZ
|
|
PUSH AF
|
|
CALL Z, MB_CLSALL
|
|
POP AF
|
|
MB_CONSTP:
|
|
LD (MB_SAVTXT), HL
|
|
LD HL, MB_TEMPST
|
|
LD (MB_TEMPPT), HL
|
|
DB 21h
|
|
MB_STPEND:
|
|
OR 0xff
|
|
POP BC
|
|
MB_ENDCON:
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
PUSH HL
|
|
PUSH AF
|
|
LD A, L
|
|
AND H
|
|
INC A
|
|
JP Z, MB_DIRIS
|
|
LD (MB_OLDLIN), HL
|
|
LD HL, (MB_SAVTXT)
|
|
LD (MB_OLDTXT), HL
|
|
MB_DIRIS:
|
|
XOR A
|
|
LD (MB_CNTOFL), A
|
|
CALL MB_FINLPT
|
|
CALL MB_CRDONZ
|
|
POP AF
|
|
LD HL, MB_BRKTXT ;= "Break"
|
|
JP NZ, MB_ERRFIN
|
|
JP MB_STPRDY
|
|
MB_CTROPT:
|
|
LD A, CTRL_O
|
|
MB_CTRLPT:
|
|
PUSH AF
|
|
SUB 0x3
|
|
JP NZ, MB_NTCTCT
|
|
LD (MB_PRTFLG), A
|
|
LD (MB_CNTOFL), A
|
|
MB_NTCTCT:
|
|
LD A, '^'
|
|
CALL MB_OUTDO
|
|
POP AF
|
|
ADD A, 0x40
|
|
CALL MB_OUTDO
|
|
JP MB_CRDO
|
|
MB_CONT:
|
|
LD HL, (MB_OLDTXT)
|
|
LD A, H
|
|
OR L
|
|
MB_RESERR:
|
|
LD DE, ERRCN
|
|
JP Z, MB_ERROR
|
|
EX DE, HL
|
|
LD HL, (MB_OLDLIN)
|
|
EX DE, HL
|
|
EX DE, HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
EX DE, HL
|
|
RET
|
|
MB_NULL:
|
|
CALL MB_GETBYT
|
|
RET NZ
|
|
INC A
|
|
LD (MB_NULCNT), A ;= 01h
|
|
RET
|
|
|
|
MB_TON:
|
|
DB 0x3E
|
|
|
|
MB_TOFF:
|
|
XOR A
|
|
LD (MB_TRCFLG), A
|
|
RET
|
|
|
|
MB_SWAP:
|
|
CALL MB_PTRGET
|
|
PUSH DE
|
|
PUSH HL
|
|
LD HL, MB_SWPTMP
|
|
CALL MB_VMOVE
|
|
LD HL, (MB_ARYTAB)
|
|
EX (SP), HL
|
|
CALL MB_GETYPR
|
|
PUSH AF
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_PTRGET
|
|
POP AF
|
|
LD B, A
|
|
CALL MB_GETYPR
|
|
CP B
|
|
JP NZ, MB_TMERR
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
PUSH HL
|
|
LD HL, (MB_ARYTAB)
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_FCERR1
|
|
POP DE
|
|
POP HL
|
|
EX (SP), HL
|
|
PUSH DE
|
|
CALL MB_VMOVE
|
|
POP HL
|
|
LD DE, MB_SWPTMP
|
|
CALL MB_VMOVE
|
|
POP HL
|
|
RET
|
|
|
|
MB_FCERR1:
|
|
JP MB_FCERR
|
|
|
|
MB_ERASE:
|
|
LD A, 0x1
|
|
LD (MB_SUBFLG), A
|
|
CALL MB_PTRGET
|
|
JP NZ, MB_FCERR1
|
|
PUSH HL
|
|
LD (MB_SUBFLG), A
|
|
LD H, B
|
|
LD L, C
|
|
DEC BC
|
|
DEC BC
|
|
DEC BC
|
|
MB_LPBKNM:
|
|
LD A, (BC)
|
|
DEC BC
|
|
OR A
|
|
JP M, MB_LPBKNM
|
|
DEC BC
|
|
DEC BC
|
|
ADD HL, DE
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
MB_ERSLOP:
|
|
CALL MB_DCOMPR
|
|
LD A, (DE)
|
|
LD (BC), A
|
|
INC DE
|
|
INC BC
|
|
JP NZ, MB_ERSLOP
|
|
DEC BC
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_STREND), HL
|
|
POP HL
|
|
LD A, (HL)
|
|
CP 0x2c
|
|
RET NZ
|
|
CALL MB_CHRGTR
|
|
JP MB_ERASE
|
|
MB_POPAHT:
|
|
POP AF
|
|
POP HL
|
|
RET
|
|
MB_ISLET:
|
|
LD A, (HL)
|
|
MB_ISLET2:
|
|
CP 'A'
|
|
RET C
|
|
CP '['
|
|
CCF
|
|
RET
|
|
|
|
|
|
MB_CLEARC1:
|
|
JP MB_CLEARC
|
|
; --------------------------------------------------
|
|
MB_CLEAR:
|
|
JP Z, MB_CLEARC1
|
|
CP ','
|
|
JP Z, MB_CSKPCM
|
|
CALL MB_INTIDX2
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_CLEARC1
|
|
MB_CSKPCM:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
JP Z, MB_CLEARC1
|
|
EX DE, HL
|
|
LD HL, (MB_TOPMEM) ;= 60A3h
|
|
EX DE, HL
|
|
CP ','
|
|
JP Z, MB_CLEARS
|
|
CALL MB_INTID2
|
|
MB_CLEARS:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
PUSH DE
|
|
JP Z, MB_CDFSTK
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
JP Z, MB_CDFSTK
|
|
CALL MB_INTID2
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP NZ, MB_SNERR
|
|
MB_CLEART:
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD HL, 0x4e ;0+(2*NUMLEV)+20 - CHECK STACK SIZE IS REASONABLE
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_OMERR1
|
|
POP HL
|
|
CALL MB_SUBDE
|
|
JP C, MB_OMERR1
|
|
PUSH HL
|
|
LD HL, (MB_VARTAB)
|
|
LD BC, 0x14
|
|
ADD HL, BC
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_OMERR1
|
|
EX DE, HL
|
|
LD (MB_MEMSIZ), HL
|
|
POP HL
|
|
LD (MB_TOPMEM), HL ;= 60A3h
|
|
POP HL
|
|
JP MB_CLEARC1
|
|
|
|
MB_INTID2:
|
|
CALL MB_GETIN22
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_FCERR
|
|
RET
|
|
|
|
MB_OMERR1:
|
|
JP MB_OMERR
|
|
|
|
MB_CDFSTK:
|
|
PUSH HL
|
|
LD HL, (MB_TOPMEM) ;TOPMEM
|
|
EX DE, HL
|
|
LD HL, (MB_MEMSIZ)
|
|
LD A, E
|
|
SUB L
|
|
LD E, A
|
|
LD A, D
|
|
SBC A, H
|
|
LD D, A
|
|
POP HL
|
|
JP MB_CLEART
|
|
MB_SUBDE:
|
|
LD A, L
|
|
SUB E
|
|
LD E, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD D, A
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
; NEXT code
|
|
; --------------------------------------------------
|
|
MB_NEXT:
|
|
PUSH AF
|
|
DB 0xF6
|
|
|
|
MB_NEXTS:
|
|
XOR A
|
|
LD (MB_NXTFLG), A
|
|
POP AF
|
|
LD DE, 0x0
|
|
|
|
MB_NEXTC:
|
|
LD (MB_NXTTXT), HL
|
|
CALL NZ, MB_PTRGET
|
|
LD (MB_TEMP), HL
|
|
CALL MB_FNDFOR
|
|
JP NZ, MB_NFERR
|
|
LD SP, HL
|
|
PUSH DE
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
PUSH HL
|
|
LD HL, (MB_NXTTXT)
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_NFERR
|
|
POP HL
|
|
POP DE
|
|
PUSH DE
|
|
LD A, (HL)
|
|
PUSH AF
|
|
INC HL
|
|
PUSH DE
|
|
LD A, (HL)
|
|
INC HL
|
|
OR A
|
|
JP M, MB_INTNXT
|
|
CALL MB_MOVFM
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD A, (MB_NXTFLG)
|
|
OR A
|
|
JP NZ, MB_NXTDO
|
|
LD HL, MB_FVALSV
|
|
CALL MB_MOVFM
|
|
XOR A
|
|
MB_NXTDO:
|
|
CALL NZ, MB_FADDS
|
|
POP HL
|
|
CALL MB_MOVMF
|
|
POP HL
|
|
CALL MB_MOVRM
|
|
PUSH HL
|
|
CALL MB_FCOMP
|
|
JP MB_FINNXT
|
|
MB_INTNXT:
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
EX (SP), HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
PUSH HL
|
|
LD L, C
|
|
LD H, B
|
|
LD A, (MB_NXTFLG)
|
|
OR A
|
|
JP NZ, MB_INXTDO
|
|
LD HL, (MB_FVALSV)
|
|
JP MB_IFORIN
|
|
MB_INXTDO:
|
|
CALL MB_IADD
|
|
LD A, (MB_VALTYP)
|
|
CP 0x4
|
|
JP Z, MB_OVERR
|
|
MB_IFORIN:
|
|
EX DE, HL
|
|
POP HL
|
|
LD (HL), D
|
|
DEC HL
|
|
LD (HL), E
|
|
POP HL
|
|
PUSH DE
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
EX (SP), HL
|
|
CALL MB_ICOMP
|
|
MB_FINNXT:
|
|
POP HL
|
|
POP BC
|
|
SUB B
|
|
CALL MB_MOVRM
|
|
JP Z, MB_LOOPDN
|
|
EX DE, HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
LD L, C
|
|
LD H, B
|
|
JP MB_NXTCON
|
|
MB_LOOPDN:
|
|
LD SP, HL
|
|
LD (MB_SAVSTK), HL
|
|
LD HL, (MB_TEMP)
|
|
LD A, (HL)
|
|
CP 0x2c
|
|
JP NZ, MB_NEWSTT
|
|
CALL MB_CHRGTR
|
|
CALL MB_NEXTC
|
|
|
|
; --------------------------------------------------
|
|
; Chrck MB_PTRFIL for zero value
|
|
; --------------------------------------------------
|
|
MB_PTRFILZ:
|
|
PUSH HL
|
|
LD HL, (MB_PTRFIL)
|
|
LD A, H
|
|
OR L
|
|
POP HL
|
|
RET
|
|
|
|
; ===================================================
|
|
; BASIC Interpreter String routines/WHG/PGA etc.
|
|
; BISTRS.MAC
|
|
; ===================================================
|
|
|
|
; ---------------------------------------------------
|
|
;COMPARES TWO STRINGS
|
|
; ---------------------------------------------------
|
|
MB_STRCMP:
|
|
CALL MB_FRESTR
|
|
LD A, (HL)
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
POP DE
|
|
PUSH BC
|
|
PUSH AF
|
|
CALL MB_FRETMP
|
|
POP AF
|
|
LD D, A
|
|
LD E, (HL)
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
POP HL
|
|
MB_CSLOOP:
|
|
LD A, E
|
|
OR D
|
|
RET Z
|
|
LD A, D
|
|
SUB 0x1
|
|
RET C
|
|
XOR A
|
|
CP E
|
|
INC A
|
|
RET NC
|
|
DEC D
|
|
DEC E
|
|
LD A, (BC)
|
|
INC BC
|
|
CP (HL)
|
|
INC HL
|
|
JP Z, MB_CSLOOP
|
|
CCF
|
|
JP MB_SIGNS
|
|
MB_STRO_:
|
|
CALL MB_FOUTO
|
|
JP MB_STR_1
|
|
MB_STRH_:
|
|
CALL MB_FOUTH
|
|
JP MB_STR_1
|
|
MB_STR_:
|
|
CALL MB_FOUT
|
|
MB_STR_1:
|
|
CALL MB_STRLIT
|
|
CALL MB_FREFAC
|
|
LD BC, MB_FINBCK
|
|
PUSH BC
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_STRCPY:
|
|
;CREATES A COPY OF THE STRING
|
|
LD A, (HL)
|
|
INC HL
|
|
PUSH HL
|
|
CALL MB_GETSPA
|
|
POP HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
CALL MB_STRAD2
|
|
PUSH HL
|
|
LD L, A
|
|
CALL MB_MOVSTR
|
|
POP DE
|
|
RET
|
|
MB_STRIN1:
|
|
LD A, 0x1
|
|
MB_STRINI:
|
|
CALL MB_GETSPA
|
|
MB_STRAD2:
|
|
LD HL, MB_DSCTMP
|
|
MB_STRAD1:
|
|
PUSH HL
|
|
LD (HL), A
|
|
MB_PUTDEI:
|
|
INC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
POP HL
|
|
RET
|
|
MB_STRLIT:
|
|
DEC HL
|
|
MB_STRLTI:
|
|
LD B, '"'
|
|
MB_STRLT3:
|
|
LD D, B
|
|
MB_STRLT2:
|
|
PUSH HL
|
|
LD C, 0xff
|
|
MB_STRGET:
|
|
INC HL
|
|
LD A, (HL)
|
|
INC C
|
|
OR A
|
|
JP Z, MB_STRFIN
|
|
CP D
|
|
JP Z, MB_STRFIN
|
|
CP B
|
|
JP NZ, MB_STRGET
|
|
MB_STRFIN:
|
|
CP '"'
|
|
CALL Z, MB_CHRGTR
|
|
PUSH HL
|
|
LD A, B
|
|
CP ','
|
|
JP NZ, MB_NTTRLS
|
|
INC C
|
|
MB_LPTRLS:
|
|
DEC C
|
|
JP Z, MB_NTTRLS
|
|
DEC HL
|
|
LD A, (HL)
|
|
CP ASCII_SP
|
|
JP Z, MB_LPTRLS
|
|
MB_NTTRLS:
|
|
POP HL
|
|
EX (SP), HL
|
|
INC HL
|
|
EX DE, HL
|
|
LD A, C
|
|
CALL MB_STRAD2
|
|
|
|
MB_PUTNEW:
|
|
LD DE, MB_DSCTMP
|
|
DB 0x3E
|
|
|
|
MB_PUTTMP:
|
|
PUSH DE
|
|
LD HL, (MB_TEMPPT)
|
|
LD (MB_FACLO), HL
|
|
LD A, 0x3
|
|
LD (MB_VALTYP), A
|
|
CALL MB_VMOVE
|
|
LD DE, MB_FRETOP
|
|
CALL MB_DCOMPR
|
|
LD (MB_TEMPPT), HL
|
|
POP HL
|
|
LD A, (HL)
|
|
RET NZ
|
|
LD DE, 0x10
|
|
JP MB_ERROR
|
|
MB_STROUI:
|
|
INC HL
|
|
MB_STROUT:
|
|
CALL MB_STRLIT
|
|
MB_STRPRT:
|
|
CALL MB_FREFAC
|
|
CALL MB_GETBCD
|
|
INC D
|
|
MB_STRPR2:
|
|
DEC D
|
|
RET Z
|
|
LD A, (BC)
|
|
CALL MB_OUTDO
|
|
CP ASCII_CR
|
|
CALL Z, MB_CRFIN
|
|
INC BC
|
|
JP MB_STRPR2
|
|
; ===================================================
|
|
; STRING GARBAGE COLLECTION - GETSPA, GARBAG
|
|
; ===================================================
|
|
MB_GETSPA:
|
|
OR A
|
|
DB 0Eh
|
|
MB_TRYGI2:
|
|
POP AF
|
|
PUSH AF
|
|
LD HL, (MB_STREND)
|
|
EX DE, HL
|
|
LD HL, (MB_FRETOP)
|
|
CPL
|
|
LD C, A
|
|
LD B, 0xff
|
|
ADD HL, BC
|
|
INC HL
|
|
CALL MB_DCOMPR
|
|
JP C, MB_GARBAG
|
|
LD (MB_FRETOP), HL
|
|
INC HL
|
|
EX DE, HL
|
|
MB_PPSWRT:
|
|
POP AF
|
|
RET
|
|
MB_GARBAG:
|
|
POP AF
|
|
LD DE, 0xe
|
|
JP Z, MB_ERROR
|
|
CP A
|
|
PUSH AF
|
|
LD BC, MB_TRYGI2
|
|
PUSH BC
|
|
MB_GARBA2:
|
|
LD HL, (MB_MEMSIZ)
|
|
MB_FNDVAR:
|
|
LD (MB_FRETOP), HL
|
|
LD HL, 0x0
|
|
PUSH HL
|
|
LD HL, (MB_STREND)
|
|
PUSH HL
|
|
LD HL, MB_TEMPST
|
|
MB_TVAR:
|
|
EX DE, HL
|
|
LD HL, (MB_TEMPPT)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
LD BC, MB_TVAR
|
|
JP NZ, MB_DVAR2
|
|
LD HL, MB_PRMPRV
|
|
LD (MB_TEMP9), HL
|
|
LD HL, (MB_ARYTAB)
|
|
LD (MB_ARYTA2), HL
|
|
LD HL, (MB_VARTAB)
|
|
MB_SVAR:
|
|
EX DE, HL
|
|
LD HL, (MB_ARYTA2)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_ARYVAR
|
|
LD A, (HL)
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
PUSH AF
|
|
CALL MB_IADAHL
|
|
POP AF
|
|
CP 0x3
|
|
JP NZ, MB_SKPVAR
|
|
CALL MB_DVARS
|
|
XOR A
|
|
MB_SKPVAR:
|
|
LD E, A
|
|
LD D, 0x0
|
|
ADD HL, DE
|
|
JP MB_SVAR
|
|
MB_ARYVAR:
|
|
LD HL, (MB_TEMP9)
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD A, D
|
|
OR E
|
|
LD HL, (MB_ARYTAB)
|
|
JP Z, MB_ARYVA4
|
|
EX DE, HL
|
|
LD (MB_TEMP9), HL
|
|
INC HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
EX DE, HL
|
|
ADD HL, DE
|
|
LD (MB_ARYTA2), HL
|
|
EX DE, HL
|
|
JP MB_SVAR
|
|
MB_ARYVA2:
|
|
POP BC
|
|
MB_ARYVA4:
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_GRBPAS
|
|
LD A, (HL)
|
|
INC HL
|
|
PUSH AF
|
|
INC HL
|
|
INC HL
|
|
CALL MB_IADAHL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
POP AF
|
|
PUSH HL
|
|
ADD HL, BC
|
|
CP 0x3
|
|
JP NZ, MB_ARYVA2
|
|
LD (MB_CPMFIL), HL
|
|
POP HL
|
|
LD C, (HL)
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
ADD HL, BC
|
|
INC HL
|
|
MB_ARYSTR:
|
|
EX DE, HL
|
|
LD HL, (MB_CPMFIL)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_ARYVA4
|
|
LD BC, MB_ARYSTR
|
|
MB_DVAR2:
|
|
PUSH BC
|
|
MB_DVARS:
|
|
XOR A
|
|
OR (HL)
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
RET Z
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, (MB_FRETOP)
|
|
CALL MB_DCOMPR
|
|
LD H, B
|
|
LD L, C
|
|
RET C
|
|
POP HL
|
|
EX (SP), HL
|
|
CALL MB_DCOMPR
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD H, B
|
|
LD L, C
|
|
RET NC
|
|
POP BC
|
|
POP AF
|
|
POP AF
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
RET
|
|
MB_GRBPAS:
|
|
POP DE
|
|
POP HL
|
|
LD A, H
|
|
OR L
|
|
RET Z
|
|
DEC HL
|
|
LD B, (HL)
|
|
DEC HL
|
|
LD C, (HL)
|
|
PUSH HL
|
|
DEC HL
|
|
LD L, (HL)
|
|
LD H, 0x0
|
|
ADD HL, BC
|
|
LD D, B
|
|
LD E, C
|
|
DEC HL
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, (MB_FRETOP)
|
|
CALL MB_BLTUC
|
|
POP HL
|
|
LD (HL), C
|
|
INC HL
|
|
LD (HL), B
|
|
LD H, B
|
|
LD L, C
|
|
DEC HL
|
|
JP MB_FNDVAR
|
|
;STRING CONCATENATION
|
|
MB_CAT:
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, (MB_FACLO)
|
|
EX (SP), HL
|
|
CALL MB_EVAL
|
|
EX (SP), HL
|
|
CALL MB_CHKSTR
|
|
LD A, (HL)
|
|
PUSH HL
|
|
LD HL, (MB_FACLO)
|
|
PUSH HL
|
|
ADD A, (HL)
|
|
LD DE, ERRLS
|
|
JP C, MB_ERROR
|
|
CALL MB_STRINI
|
|
POP DE
|
|
CALL MB_FRETMP
|
|
EX (SP), HL
|
|
CALL MB_FRETM2
|
|
PUSH HL
|
|
LD HL, (MB_DSCTMP + INCSTR)
|
|
EX DE, HL
|
|
CALL MB_MOVINS
|
|
CALL MB_MOVINS
|
|
LD HL, MB_TSTOP
|
|
EX (SP), HL
|
|
PUSH HL
|
|
JP MB_PUTNEW
|
|
MB_MOVINS:
|
|
POP HL
|
|
EX (SP), HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
LD L, A
|
|
MB_MOVSTR:
|
|
INC L
|
|
MB_MOVLP:
|
|
DEC L
|
|
RET Z
|
|
LD A, (BC)
|
|
LD (DE), A
|
|
INC BC
|
|
INC DE
|
|
JP MB_MOVLP
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_FRESTR:
|
|
;FREE UP STRING TEMPORARY - FRESTR, FREFAC, FRETMP, FRETMS
|
|
CALL MB_CHKSTR
|
|
MB_FREFAC:
|
|
LD HL, (MB_FACLO)
|
|
MB_FRETM2:
|
|
EX DE, HL
|
|
MB_FRETMP:
|
|
CALL MB_FRETMS
|
|
EX DE, HL
|
|
RET NZ
|
|
PUSH DE
|
|
LD D, B
|
|
LD E, C
|
|
DEC DE
|
|
LD C, (HL)
|
|
LD HL, (MB_FRETOP)
|
|
CALL MB_DCOMPR
|
|
JP NZ, MB_NOTLST
|
|
LD B, A
|
|
ADD HL, BC
|
|
LD (MB_FRETOP), HL
|
|
MB_NOTLST:
|
|
POP HL
|
|
RET
|
|
MB_FRETMS:
|
|
LD HL, (MB_TEMPPT)
|
|
DEC HL
|
|
LD B, (HL)
|
|
DEC HL
|
|
LD C, (HL)
|
|
DEC HL
|
|
CALL MB_DCOMPR
|
|
RET NZ
|
|
LD (MB_TEMPPT), HL
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_LEN:
|
|
LD BC, MB_SNGFLT
|
|
PUSH BC
|
|
MB_LEN1:
|
|
CALL MB_FRESTR
|
|
XOR A
|
|
LD D, A
|
|
LD A, (HL)
|
|
OR A
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_ASC:
|
|
LD BC, MB_SNGFLT
|
|
PUSH BC
|
|
MB_ASC2:
|
|
CALL MB_LEN1
|
|
JP Z, MB_FCERR
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD A, (DE)
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_CHR_:
|
|
CALL MB_STRIN1
|
|
CALL MB_CONINT
|
|
|
|
; --------------------------------------------------
|
|
MB_SETSTR:
|
|
LD HL, (MB_DSCTMP+INCSTR)
|
|
LD (HL), E
|
|
|
|
MB_FINBCK:
|
|
POP BC
|
|
JP MB_PUTNEW
|
|
|
|
; --------------------------------------------------
|
|
MB_STRNG_:
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
CALL MB_GETBYT
|
|
PUSH DE
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_FRMEVL
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
EX (SP), HL
|
|
PUSH HL
|
|
CALL MB_GETYPR
|
|
JP Z, MB_STRSTR
|
|
CALL MB_CONINT
|
|
JP MB_CALSPA
|
|
MB_STRSTR:
|
|
CALL MB_ASC2
|
|
MB_CALSPA:
|
|
POP DE
|
|
CALL MB_SPACE2
|
|
MB_SPACE_:
|
|
CALL MB_CONINT
|
|
LD A, 0x20
|
|
|
|
MB_SPACE2:
|
|
PUSH AF
|
|
LD A, E
|
|
CALL MB_STRINI
|
|
LD B, A
|
|
POP AF
|
|
INC B
|
|
DEC B
|
|
JP Z, MB_FINBCK
|
|
LD HL, (MB_DSCTMP + INCSTR) ;DSCTMP+INCSTR
|
|
MB_SPLP_:
|
|
LD (HL), A
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_SPLP_
|
|
JP MB_FINBCK
|
|
MB_LEFT_:
|
|
CALL MB_PREAM
|
|
XOR A
|
|
MB_LEFT3:
|
|
EX (SP), HL
|
|
LD C, A
|
|
DB '>'
|
|
MB_LEFTUS:
|
|
PUSH HL
|
|
MB_LEFT2:
|
|
PUSH HL
|
|
LD A, (HL)
|
|
CP B
|
|
JP C, MB_ALLSTR
|
|
LD A, B
|
|
DB 11h
|
|
MB_ALLSTR:
|
|
LD C, 0x0
|
|
PUSH BC
|
|
CALL MB_GETSPA
|
|
POP BC
|
|
POP HL
|
|
PUSH HL
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, B
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
LD B, H
|
|
LD C, L
|
|
CALL MB_STRAD2
|
|
LD L, A
|
|
CALL MB_MOVSTR
|
|
POP DE
|
|
CALL MB_FRETMP
|
|
JP MB_PUTNEW
|
|
MB_RIGHT_:
|
|
CALL MB_PREAM
|
|
POP DE
|
|
PUSH DE
|
|
LD A, (DE)
|
|
SUB B
|
|
JP MB_LEFT3
|
|
MB_MID_:
|
|
EX DE, HL
|
|
LD A, (HL)
|
|
CALL MB_PREAM2
|
|
INC B
|
|
DEC B
|
|
JP Z, MB_FCERR
|
|
PUSH BC
|
|
CALL MB_MIDRST
|
|
POP AF
|
|
EX (SP), HL
|
|
LD BC, MB_LEFT2
|
|
PUSH BC
|
|
DEC A
|
|
CP (HL)
|
|
LD B, 0x0
|
|
RET NC
|
|
LD C, A
|
|
LD A, (HL)
|
|
SUB C
|
|
CP E
|
|
LD B, A
|
|
RET C
|
|
LD B, E
|
|
RET
|
|
MB_VAL:
|
|
CALL MB_LEN1
|
|
JP Z, MB_SNGFLT
|
|
LD E, A
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
PUSH HL
|
|
ADD HL, DE
|
|
LD B, (HL)
|
|
LD (HL), D
|
|
EX (SP), HL
|
|
PUSH BC
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
CALL MB_FINDBL
|
|
POP BC
|
|
POP HL
|
|
LD (HL), B
|
|
RET
|
|
MB_PREAM:
|
|
EX DE, HL
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
MB_PREAM2:
|
|
POP BC
|
|
POP DE
|
|
PUSH BC
|
|
LD B, E
|
|
RET
|
|
MB_INSTR:
|
|
CALL MB_CHRGTR
|
|
CALL MB_FRMPRN
|
|
CALL MB_GETYPR
|
|
LD A, 0x1
|
|
PUSH AF
|
|
JP Z, MB_WUZSTR
|
|
POP AF
|
|
CALL MB_CONINT
|
|
OR A
|
|
JP Z, MB_FCERR
|
|
PUSH AF
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_FRMEVL
|
|
CALL MB_CHKSTR
|
|
MB_WUZSTR:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
PUSH HL
|
|
LD HL, (MB_FACLO)
|
|
EX (SP), HL
|
|
CALL MB_FRMEVL
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
PUSH HL
|
|
CALL MB_FRESTR
|
|
EX DE, HL
|
|
POP BC
|
|
POP HL
|
|
POP AF
|
|
PUSH BC
|
|
LD BC, MB_POPHRT
|
|
PUSH BC
|
|
LD BC, MB_SNGFLT
|
|
PUSH BC
|
|
PUSH AF
|
|
PUSH DE
|
|
CALL MB_FRETM2
|
|
POP DE
|
|
POP AF
|
|
LD B, A
|
|
DEC A
|
|
LD C, A
|
|
CP (HL)
|
|
LD A, 0x0
|
|
RET NC
|
|
LD A, (DE)
|
|
OR A
|
|
LD A, B
|
|
RET Z
|
|
LD A, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, B
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
SUB C
|
|
LD B, A
|
|
PUSH BC
|
|
PUSH DE
|
|
EX (SP), HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
MB_CHK0:
|
|
LD D, (HL)
|
|
POP HL
|
|
MB_CHK1:
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
MB_CHK:
|
|
LD A, (DE)
|
|
CP (HL)
|
|
JP NZ, MB_OHWELL
|
|
INC DE
|
|
DEC C
|
|
JP Z, MB_GOTSTR
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_CHK
|
|
MB_RETZER:
|
|
POP DE
|
|
POP DE
|
|
POP BC
|
|
MB_RETZR1:
|
|
POP DE
|
|
XOR A
|
|
RET
|
|
MB_GOTSTR:
|
|
POP HL
|
|
POP DE
|
|
POP DE
|
|
POP BC
|
|
LD A, B
|
|
SUB H
|
|
ADD A, C
|
|
INC A
|
|
RET
|
|
MB_OHWELL:
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_CHK1
|
|
JP MB_RETZR1
|
|
|
|
MB_MIDFN:
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
CALL MB_PTRGET
|
|
CALL MB_CHKSTR
|
|
PUSH HL
|
|
PUSH DE
|
|
EX DE, HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD HL, (MB_STREND)
|
|
CALL MB_DCOMPR
|
|
JP C, MB_NCPMID
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_NCPMID
|
|
POP HL
|
|
PUSH HL
|
|
CALL MB_STRCPY
|
|
POP HL
|
|
PUSH HL
|
|
CALL MB_VMOVE
|
|
MB_NCPMID:
|
|
POP HL
|
|
EX (SP), HL
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_GETBYT
|
|
OR A
|
|
JP Z, MB_FCERR
|
|
PUSH AF
|
|
LD A, (HL)
|
|
CALL MB_MIDRST
|
|
PUSH DE
|
|
CALL MB_FRMEQL
|
|
PUSH HL
|
|
CALL MB_FRESTR
|
|
EX DE, HL
|
|
POP HL
|
|
POP BC
|
|
POP AF
|
|
LD B, A
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD HL, MB_POPHRT
|
|
EX (SP), HL
|
|
LD A, C
|
|
OR A
|
|
RET Z
|
|
LD A, (HL)
|
|
SUB B
|
|
JP C, MB_FCERR
|
|
INC A
|
|
CP C
|
|
JP C, MB_BIGLEN
|
|
LD A, C
|
|
MB_BIGLEN:
|
|
LD C, B
|
|
DEC C
|
|
LD B, 0x0
|
|
PUSH DE
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, E
|
|
ADD HL, BC
|
|
LD B, A
|
|
POP DE
|
|
EX DE, HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
EX DE, HL
|
|
LD A, C
|
|
OR A
|
|
RET Z
|
|
MB_MID_LP:
|
|
LD A, (DE)
|
|
LD (HL), A
|
|
INC DE
|
|
INC HL
|
|
DEC C
|
|
RET Z
|
|
DEC B
|
|
JP NZ, MB_MID_LP
|
|
RET
|
|
MB_MIDRST:
|
|
LD E, 0xff
|
|
CP ')'
|
|
JP Z, MB_MID2
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_GETBYT
|
|
MB_MID2:
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
RET
|
|
MB_FRE:
|
|
CALL MB_GETYPR
|
|
JP NZ, MB_CLCDIF
|
|
CALL MB_FREFAC
|
|
CALL MB_GARBA2
|
|
MB_CLCDIF:
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
EX DE, HL
|
|
LD HL, (MB_FRETOP)
|
|
JP MB_GIVDBL
|
|
; ===================================================
|
|
; INLIN BASIC Interpreter Input Line routine/WHG/PGA/MBM, etc.
|
|
; BINLIN.MAC
|
|
; ===================================================
|
|
MB_QINLIN:
|
|
LD A, '?'
|
|
CALL MB_OUTDO
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
JP MB_INLIN
|
|
MB_INLINC:
|
|
CALL MB_INCHR
|
|
CP 0x1
|
|
JP NZ, MB_INLNC1
|
|
LD (HL), 0x0
|
|
JP MB_INLED1
|
|
MB_INLINQ:
|
|
LD (HL), B
|
|
MB_INLIN:
|
|
XOR A
|
|
LD (MB_CHARC), A
|
|
XOR A
|
|
LD (MB_TEMPA), A
|
|
MB_SINLIN:
|
|
CALL MB_INCHR
|
|
CP 0x1
|
|
JP NZ, MB_INLINS
|
|
MB_INLED1:
|
|
CALL MB_CRDO
|
|
LD HL, 0xffff
|
|
JP MB_INLED
|
|
MB_RUBOUT:
|
|
LD A, (MB_RUBSW)
|
|
OR A
|
|
LD A, ASCII_BKSL
|
|
LD (MB_RUBSW), A
|
|
JP NZ, MB_NOTBEG
|
|
DEC B
|
|
JP Z, MB_INLINQ
|
|
CALL MB_OUTDO
|
|
INC B
|
|
MB_NOTBEG:
|
|
DEC B
|
|
DEC HL
|
|
JP Z, MB_INLINN
|
|
LD A, (HL) ;= 44
|
|
CALL MB_OUTDO
|
|
JP MB_INLINC
|
|
DEC B
|
|
MB_LINLN2:
|
|
DEC HL
|
|
CALL MB_OUTDO
|
|
JP NZ, MB_INLINC
|
|
MB_INLINN:
|
|
CALL MB_OUTDO
|
|
CALL MB_CRDO
|
|
MB_INLINS:
|
|
LD HL, MB_BUF
|
|
LD B, 0x1
|
|
PUSH AF
|
|
XOR A
|
|
LD (MB_RUBSW), A
|
|
POP AF
|
|
MB_INLNC1:
|
|
LD C, A
|
|
CP 0x7f
|
|
JP Z, MB_RUBOUT
|
|
LD A, (MB_RUBSW)
|
|
OR A
|
|
JP Z, MB_NOTRUB
|
|
LD A, ASCII_BKSL
|
|
CALL MB_OUTDO
|
|
XOR A
|
|
LD (MB_RUBSW), A
|
|
MB_NOTRUB:
|
|
LD A, C
|
|
CP ASCII_BELL
|
|
JP Z, MB_GOODCH
|
|
CP CTRL_C
|
|
CALL Z, MB_CTRLPT
|
|
SCF
|
|
RET Z
|
|
CP ASCII_CR
|
|
JP Z, MB_GFNINL
|
|
CP ASCII_TAB
|
|
JP Z, MB_GOODCH
|
|
CP ASCII_LF
|
|
JP NZ, MB_CHKFUN
|
|
DEC B
|
|
JP Z, MB_INLIN
|
|
INC B
|
|
JP MB_GOODCH
|
|
MB_CHKFUN:
|
|
CP CTRL_U ;LINE DELETE? (CONTROL-U)
|
|
CALL Z, MB_CTRLPT
|
|
JP Z, MB_INLIN
|
|
CP ASCII_BKSP
|
|
JP NZ, MB_NTBKSP
|
|
DEC B
|
|
JP Z, MB_SINLIN
|
|
CALL MB_OUTDO
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
LD A, ASCII_BKSP
|
|
JP MB_LINLN2
|
|
MB_NTBKSP:
|
|
CP CTRL_X ;IS IT CONTROL-X (LINE DELETE)
|
|
JP NZ, MB_NTCTLX
|
|
LD A, '#'
|
|
JP MB_INLINN
|
|
MB_NTCTLX:
|
|
CP CTRL_R
|
|
JP NZ, MB_NTCTLR
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
LD (HL), 0x0
|
|
CALL MB_CRDO
|
|
LD HL, MB_BUF
|
|
CALL MB_LISPRT
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
JP MB_INLINC
|
|
MB_NTCTLR:
|
|
CP ASCII_SP
|
|
JP C, MB_INLINC
|
|
MB_GOODCH:
|
|
LD A, B
|
|
OR A
|
|
JP NZ, MB_OUTBND
|
|
PUSH HL
|
|
LD HL, (MB_PTRFIL)
|
|
LD A, H
|
|
OR L
|
|
POP HL
|
|
LD A, 0x7
|
|
JP Z, MB_OUTBEL
|
|
LD HL, MB_BUF
|
|
CALL MB_LINGET
|
|
EX DE, HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
JP MB_LBOERR
|
|
MB_OUTBND:
|
|
LD A, C
|
|
LD (HL), C
|
|
INC HL
|
|
INC B
|
|
MB_OUTBEL:
|
|
CALL MB_OUTDO
|
|
SUB 10
|
|
JP NZ, MB_INLINC
|
|
LD (MB_TTYPOS), A
|
|
LD A, ASCII_CR
|
|
CALL MB_OUTDO
|
|
MB_EATNUL:
|
|
CALL MB_INCHR
|
|
OR A
|
|
JP Z, MB_EATNUL
|
|
CP ASCII_CR
|
|
JP Z, MB_INLINC
|
|
JP MB_INLNC1
|
|
MB_GFNINL:
|
|
LD A, (MB_TEMPA)
|
|
OR A
|
|
JP Z, MB_FININL
|
|
XOR A
|
|
LD (HL), A
|
|
LD HL, MB_BUFMIN ;= 44
|
|
RET
|
|
; ===================================================
|
|
; FIVEO 5.0 Features -WHILE/WEND, CALL, CHAIN, WRITE /P. Allen
|
|
; FIVEO.MAK
|
|
; ===================================================
|
|
;THIS CODE HANDLES THE STATEMENTS WHILE/WEND
|
|
MB_SCNSEM:
|
|
PUSH AF
|
|
LD A, 0x0
|
|
LD (MB_TEMPA), A
|
|
POP AF
|
|
CP 0x3b
|
|
RET NZ
|
|
LD (MB_TEMPA), A
|
|
JP MB_CHRGTR
|
|
MB_WHILE:
|
|
LD (MB_ENDFOR), HL
|
|
CALL MB_WNDSCN
|
|
CALL MB_CHRGTR
|
|
EX DE, HL
|
|
CALL MB_FNDWND
|
|
INC SP
|
|
INC SP
|
|
JP NZ, MB_WNOTOL
|
|
ADD HL, BC
|
|
LD SP, HL
|
|
LD (MB_SAVSTK), HL
|
|
MB_WNOTOL:
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
PUSH HL
|
|
LD HL, (MB_ENDFOR)
|
|
PUSH HL
|
|
PUSH DE
|
|
JP MB_FNWEND
|
|
MB_WEND:
|
|
JP NZ, MB_SNERR
|
|
EX DE, HL
|
|
CALL MB_FNDWND
|
|
JP NZ, MB_WEERR
|
|
LD SP, HL
|
|
LD (MB_SAVSTK), HL
|
|
EX DE, HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
EX DE, HL
|
|
EX DE, HL
|
|
LD (MB_NXTLIN), HL
|
|
EX DE, HL
|
|
INC HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
EX DE, HL
|
|
MB_FNWEND:
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_VSIGN
|
|
POP HL
|
|
JP Z, MB_FLSWHL
|
|
LD BC, _WHILE
|
|
LD B, C
|
|
PUSH BC
|
|
INC SP
|
|
JP MB_NEWSTT
|
|
MB_FLSWHL:
|
|
LD HL, (MB_NXTLIN)
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
POP HL
|
|
POP BC
|
|
POP BC
|
|
JP MB_NEWSTT
|
|
MB_FNDWND:
|
|
LD HL, 0x4
|
|
ADD HL, SP
|
|
MB_FNDWN2:
|
|
LD A, (HL)
|
|
INC HL
|
|
LD BC, _FOR
|
|
CP C
|
|
JP NZ, MB_FNDWN3
|
|
LD BC, 0x10
|
|
ADD HL, BC
|
|
JP MB_FNDWN2
|
|
MB_FNDWN3:
|
|
LD BC, _WHILE
|
|
CP C
|
|
RET NZ
|
|
PUSH HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
LD BC, WHLSIZ
|
|
RET Z
|
|
ADD HL, BC
|
|
JP MB_FNDWN2
|
|
MB_WEERR:
|
|
LD DE, ERRWE
|
|
JP MB_ERROR
|
|
;CALL <simple var>[(<simple var>[, <simple var>]..)]
|
|
MB_CALLS:
|
|
LD A, 0x80
|
|
LD (MB_SUBFLG), A
|
|
CALL MB_PTRGET
|
|
PUSH HL
|
|
EX DE, HL
|
|
CALL MB_GETYPR
|
|
CALL MB_VMOVFM
|
|
CALL MB_FRQINT
|
|
LD (MB_TEMPA), HL
|
|
LD C, MAXPRM
|
|
CALL MB_GETSTK
|
|
POP DE
|
|
LD HL, 0xffc0 ;0-2*MAXPRM - Get space on stack for parms
|
|
ADD HL, SP
|
|
LD SP, HL
|
|
EX DE, HL
|
|
LD C, MAXPRM
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
LD (MB_TEMP), HL
|
|
JP Z, MB_CALLST
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
MB_GETPAR:
|
|
PUSH BC
|
|
PUSH DE
|
|
CALL MB_PTRGET
|
|
EX (SP), HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
INC HL
|
|
EX (SP), HL
|
|
POP DE
|
|
POP BC
|
|
LD A, (HL)
|
|
CP ','
|
|
JP NZ, MB_ENDPAR
|
|
DEC C
|
|
CALL MB_CHRGTR
|
|
JP MB_GETPAR
|
|
MB_ENDPAR:
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
LD (MB_TEMP), HL
|
|
LD A, MAXPRM+1
|
|
SUB C
|
|
POP HL
|
|
DEC A
|
|
JP Z, MB_CALLST
|
|
POP DE
|
|
DEC A
|
|
JP Z, MB_CALLST
|
|
POP BC
|
|
DEC A
|
|
JP Z, MB_CALLST
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, 0x2 ;Point to rest of parm list
|
|
ADD HL, SP
|
|
LD B, H
|
|
LD C, L
|
|
POP HL
|
|
MB_CALLST:
|
|
PUSH HL
|
|
LD HL, MB_CALLRT
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD HL, (MB_TEMPA)
|
|
EX (SP), HL
|
|
RET
|
|
MB_CALLRT:
|
|
LD HL, (MB_SAVSTK)
|
|
LD SP, HL
|
|
LD HL, (MB_TEMP)
|
|
JP MB_NEWSTT
|
|
MB_CHAIN:
|
|
XOR A
|
|
LD (MB_MRGFLG), A
|
|
LD (MB_MDLFLG), A
|
|
LD A, (HL)
|
|
LD DE, _MERGE
|
|
CP E
|
|
JP NZ, MB_NTCHNM
|
|
LD (MB_MRGFLG), A
|
|
INC HL
|
|
MB_NTCHNM:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
CALL MB_PRGFLI
|
|
PUSH HL
|
|
LD HL, 0x0
|
|
LD (MB_CHNLIN), HL
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_NTCHAL
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CP ','
|
|
JP Z, MB_NTLINF
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_FRQINT
|
|
LD (MB_CHNLIN), HL
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_NTCHAL
|
|
|
|
MB_NTLINF:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
LD DE, _DELETE
|
|
CP E
|
|
JP Z, MB_CHMWDL
|
|
CALL MB_SYNCHR
|
|
DB 'A'
|
|
CALL MB_SYNCHR
|
|
DB 'L'
|
|
CALL MB_SYNCHR
|
|
DB 'L'
|
|
JP Z, MB_DNCMDA
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CP E
|
|
JP NZ, MB_SNERR
|
|
OR A
|
|
MB_CHMWDL:
|
|
PUSH AF
|
|
LD (MB_MDLFLG), A
|
|
CALL MB_CHRGTR
|
|
CALL MB_SCNLIN
|
|
PUSH BC
|
|
CALL MB_DEPTR
|
|
POP BC
|
|
POP DE
|
|
PUSH BC
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_CMSPTR), HL
|
|
CALL MB_FNDLIN
|
|
JP NC, MB_FCERRG1
|
|
LD D, H
|
|
LD E, L
|
|
LD (MB_CMEPTR), HL
|
|
POP HL
|
|
CALL MB_DCOMPR
|
|
|
|
MB_FCERRG1:
|
|
JP NC, MB_FCERR
|
|
|
|
POP AF
|
|
JP NZ, MB_DNCMDA
|
|
MB_NTCHAL:
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
PUSH HL
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
DEC HL
|
|
MB_CLPSC1:
|
|
INC HL
|
|
MB_CLPSCN:
|
|
LD A, (HL)
|
|
INC HL
|
|
OR (HL)
|
|
JP Z, MB_CLPFIN_0
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
EX DE, HL
|
|
MB_CSTSCN:
|
|
CALL MB_CHRGTR
|
|
MB_AFTCOM:
|
|
OR A
|
|
JP Z, MB_CLPSC1
|
|
CP ':'
|
|
JP Z, MB_CSTSCN
|
|
LD DE, _COMMON ;Test for COMMON, avoid byte externals
|
|
CP E
|
|
JP Z, MB_DOCOMM
|
|
CALL MB_CHRGTR
|
|
CALL MB_DATAS
|
|
DEC HL
|
|
JP MB_CSTSCN
|
|
MB_DOCOMM:
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_AFTCOM
|
|
|
|
MB_NXTCOM:
|
|
PUSH HL
|
|
LD A, 0x1
|
|
LD (MB_SUBFLG), A
|
|
CALL MB_NVRFIL
|
|
JP Z, MB_FNDAAY
|
|
LD A, B
|
|
OR 0x80
|
|
LD B, A
|
|
XOR A
|
|
CALL MB_ERSFIN
|
|
LD A, 0x0
|
|
LD (MB_SUBFLG), A
|
|
JP NZ, MB_NTFN2T
|
|
|
|
LD A, (HL)
|
|
CP '('
|
|
JP NZ, MB_SCNSMP
|
|
POP AF
|
|
JP MB_COMADY
|
|
|
|
MB_NTFN2T:
|
|
LD A, (HL)
|
|
CP '('
|
|
JP Z, MB_FCERR
|
|
|
|
MB_SCNSMP:
|
|
POP HL
|
|
CALL MB_NVRFIL
|
|
|
|
MB_COMPTR:
|
|
LD A, D
|
|
OR E
|
|
JP NZ, MB_COMFNS
|
|
LD A, B
|
|
OR 0x80
|
|
LD B, A
|
|
LD DE, MB_COMPT2
|
|
PUSH DE
|
|
LD DE, MB_FILRET
|
|
PUSH DE
|
|
LD A, (MB_VALTYP)
|
|
LD D, A
|
|
JP MB_NOARYS
|
|
|
|
MB_COMPT2:
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_FCERR
|
|
|
|
MB_COMFNS:
|
|
PUSH HL
|
|
LD B, D
|
|
LD C, E
|
|
LD HL, MB_BCKUCM
|
|
PUSH HL
|
|
|
|
MB_CBAKBL:
|
|
DEC BC
|
|
|
|
MB_LPBKNC:
|
|
LD A, (BC)
|
|
DEC BC
|
|
OR A
|
|
JP M, MB_LPBKNC
|
|
LD A, (BC)
|
|
OR 0x80
|
|
LD (BC), A
|
|
RET
|
|
MB_FNDAAY:
|
|
LD (MB_SUBFLG), A
|
|
LD A, (HL)
|
|
CP 0x28
|
|
JP NZ, MB_SCNSMP
|
|
EX (SP), HL
|
|
MB_BAKCOM:
|
|
DEC BC
|
|
DEC BC
|
|
CALL MB_CBAKBL
|
|
MB_BCKUCM:
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_AFTCOM
|
|
CP '('
|
|
JP NZ, MB_CHKCST
|
|
|
|
MB_COMADY:
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
JP Z, MB_AFTCOM
|
|
MB_CHKCST:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
JP MB_NXTCOM
|
|
MB_CLPFIN_0:
|
|
POP HL
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
EX DE, HL
|
|
MB_CLPFIN_1:
|
|
LD HL, (MB_ARYTAB)
|
|
EX DE, HL
|
|
LD HL, (MB_VARTAB)
|
|
MB_CLPSLP:
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_DNCMDS
|
|
PUSH HL
|
|
LD C, (HL)
|
|
INC HL
|
|
INC HL
|
|
LD A, (HL)
|
|
OR A
|
|
PUSH AF
|
|
AND 0x7f
|
|
LD (HL), A
|
|
INC HL
|
|
CALL MB_IADAHL
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
POP AF
|
|
POP BC
|
|
JP M, MB_CLPSLP
|
|
PUSH BC
|
|
CALL MB_VARDLS
|
|
LD HL, (MB_ARYTAB)
|
|
ADD HL, DE
|
|
LD (MB_ARYTAB), HL
|
|
EX DE, HL
|
|
POP HL
|
|
JP MB_CLPSLP
|
|
MB_VARDLS:
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
MB_DLSVLP:
|
|
CALL MB_DCOMPR
|
|
LD A, (DE)
|
|
LD (BC), A
|
|
INC DE
|
|
INC BC
|
|
JP NZ, MB_DLSVLP
|
|
LD A, C
|
|
SUB L
|
|
LD E, A
|
|
LD A, B
|
|
SBC A, H
|
|
LD D, A
|
|
DEC DE
|
|
DEC BC
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_STREND), HL
|
|
RET
|
|
MB_DNCMDS:
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
EX DE, HL
|
|
MB_CLPAKP:
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_DNCMDA
|
|
PUSH HL
|
|
INC HL
|
|
INC HL
|
|
LD A, (HL)
|
|
OR A
|
|
PUSH AF
|
|
AND 0x7f
|
|
LD (HL), A
|
|
INC HL
|
|
CALL MB_IADAHL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
ADD HL, BC
|
|
POP AF
|
|
POP BC
|
|
JP M, MB_CLPAKP
|
|
PUSH BC
|
|
CALL MB_VARDLS
|
|
EX DE, HL
|
|
POP HL
|
|
JP MB_CLPAKP
|
|
MB_DNCMDA:
|
|
LD HL, (MB_VARTAB)
|
|
MB_CSVAR:
|
|
EX DE, HL
|
|
LD HL, (MB_ARYTAB)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_CAYVAR
|
|
LD A, (HL)
|
|
INC HL
|
|
INC HL
|
|
INC HL
|
|
PUSH AF
|
|
CALL MB_IADAHL
|
|
POP AF
|
|
CP 0x3
|
|
JP NZ, MB_CSKPVA
|
|
CALL MB_CDVARS
|
|
XOR A
|
|
MB_CSKPVA:
|
|
LD E, A
|
|
LD D, 0x0
|
|
ADD HL, DE
|
|
JP MB_CSVAR
|
|
MB_CAYVA2:
|
|
POP BC
|
|
MB_CAYVAR:
|
|
EX DE, HL
|
|
LD HL, (MB_STREND)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_DNCCLS
|
|
LD A, (HL)
|
|
INC HL
|
|
INC HL
|
|
PUSH AF
|
|
INC HL
|
|
CALL MB_IADAHL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC HL
|
|
POP AF
|
|
PUSH HL
|
|
ADD HL, BC
|
|
CP 0x3
|
|
JP NZ, MB_CAYVA2
|
|
LD (MB_TEMP3), HL
|
|
POP HL
|
|
LD C, (HL)
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
ADD HL, BC
|
|
INC HL
|
|
MB_CAYSTR:
|
|
EX DE, HL
|
|
LD HL, (MB_TEMP3)
|
|
EX DE, HL
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_CAYVAR
|
|
LD BC, MB_CAYSTR
|
|
PUSH BC
|
|
MB_CDVARS:
|
|
LD A, (HL)
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC HL
|
|
OR A
|
|
LAB_ram_4fb5:
|
|
RET Z
|
|
LAB_ram_4fb6:
|
|
PUSH HL
|
|
LD HL, (MB_VARTAB)
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
MB_LBL_4FBE:
|
|
RET C
|
|
MB_LBL_4FBF:
|
|
PUSH HL
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
RET NC
|
|
PUSH HL
|
|
DEC HL
|
|
DEC HL
|
|
DEC HL
|
|
PUSH HL
|
|
CALL MB_STRCPY
|
|
POP HL
|
|
LD B, 0x3
|
|
CALL MB_MOVE1
|
|
POP HL
|
|
RET
|
|
MB_DNCCLS:
|
|
CALL MB_GARBA2
|
|
LD HL, (MB_STREND)
|
|
LD B, H
|
|
LD C, L
|
|
EX DE, HL
|
|
LD HL, (MB_VARTAB)
|
|
EX DE, HL
|
|
LD HL, (MB_ARYTAB)
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
LD (MB_TEMP9), HL
|
|
LD HL, (MB_FRETOP)
|
|
LD (MB_SAVFRE), HL
|
|
CALL MB_BLTUC
|
|
LD H, B
|
|
LD L, C
|
|
DEC HL
|
|
LD (MB_FRETOP), HL
|
|
LD A, (MB_MDLFLG)
|
|
OR A
|
|
JP Z, MB_NTMDLT
|
|
LD HL, (MB_CMSPTR)
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, (MB_CMEPTR)
|
|
CALL MB_DEL
|
|
LD (MB_ARYTAB), HL
|
|
LD (MB_STREND), HL
|
|
CALL MB_LINKER
|
|
MB_NTMDLT:
|
|
LD A, 0x1
|
|
LD (MB_CHNFLG), A
|
|
LD A, (MB_MRGFLG)
|
|
OR A
|
|
JP NZ, MB_OKGETM
|
|
LD A, (MB_MAXFIL)
|
|
LD (MB_LSTFRE+1), A
|
|
JP MB_CHNENT
|
|
MB_CHNRET:
|
|
XOR A
|
|
LD (MB_CHNFLG), A
|
|
LD (MB_MRGFLG), A
|
|
LD HL, (MB_VARTAB)
|
|
LD B, H
|
|
LD C, L
|
|
LD HL, (MB_TEMP9)
|
|
ADD HL, BC
|
|
LD (MB_ARYTAB), HL
|
|
LD HL, (MB_FRETOP)
|
|
INC HL
|
|
EX DE, HL
|
|
LD HL, (MB_SAVFRE)
|
|
LD (MB_FRETOP), HL
|
|
MB_MVBKVR:
|
|
CALL MB_DCOMPR
|
|
LD A, (DE)
|
|
LD (BC), A
|
|
INC DE
|
|
INC BC
|
|
JP NZ, MB_MVBKVR
|
|
DEC BC
|
|
LD H, B
|
|
LD L, C
|
|
LD (MB_STREND), HL
|
|
EX DE, HL
|
|
LD HL, (MB_CHNLIN)
|
|
EX DE, HL
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
DEC HL
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_NEWSTT
|
|
CALL MB_FNDLIN
|
|
JP NC, MB_USERR
|
|
DEC BC
|
|
LD H, B
|
|
LD L, C
|
|
JP MB_NEWSTT
|
|
JP MB_DATAS
|
|
MB_WRITE:
|
|
LD C, MD.SQO
|
|
CALL MB_FILGET
|
|
MB_WRTCHR:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_WRTFIN
|
|
MB_WRTMLP:
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_GETYPR
|
|
JP Z, MB_WRTSTR
|
|
CALL MB_FOUT
|
|
CALL MB_STRLIT
|
|
LD HL, (MB_FACLO)
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
LD A, (DE)
|
|
CP 0x20
|
|
JP NZ, MB_WRTNEG
|
|
INC DE
|
|
LD (HL), D
|
|
DEC HL
|
|
LD (HL), E
|
|
DEC HL
|
|
DEC (HL)
|
|
MB_WRTNEG:
|
|
CALL MB_STRPRT
|
|
MB_NXTWRV:
|
|
POP HL
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_WRTFIN
|
|
CP ';'
|
|
JP Z, MB_WASEMI
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
DEC HL
|
|
MB_WASEMI:
|
|
CALL MB_CHRGTR
|
|
LD A, ','
|
|
CALL MB_OUTDO
|
|
JP MB_WRTMLP
|
|
MB_WRTSTR:
|
|
LD A, '"'
|
|
CALL MB_OUTDO
|
|
CALL MB_STRPRT
|
|
LD A, '"'
|
|
CALL MB_OUTDO
|
|
JP MB_NXTWRV
|
|
MB_WRTFIN:
|
|
PUSH HL
|
|
LD HL, (MB_PTRFIL)
|
|
LD A, H
|
|
OR L
|
|
JP Z, MB_NTRNDW
|
|
LD A, (HL)
|
|
CP 0x3
|
|
JP NZ, MB_NTRNDW
|
|
CALL MB_CMPFBC
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
LD DE, 0xfffe
|
|
ADD HL, DE
|
|
JP NC, MB_NTRNDW
|
|
MB_NXTWSP:
|
|
LD A, ASCII_SP
|
|
CALL MB_OUTDO
|
|
DEC HL
|
|
LD A, H
|
|
OR L
|
|
JP NZ, MB_NXTWSP
|
|
MB_NTRNDW:
|
|
POP HL
|
|
CALL MB_CRDO
|
|
JP MB_FINPRT
|
|
; ===================================================
|
|
; COMMON ROUTINES FOR DISK BASICS
|
|
; DSKCOM.MAK
|
|
; ===================================================
|
|
;FILINP AND FILGET - SCAN A FILE NUMBER AND SETUP PTRFIL
|
|
MB_FILINP:
|
|
LD C, 0x1
|
|
MB_FILGET:
|
|
CP '#'
|
|
RET NZ
|
|
PUSH BC
|
|
CALL MB_FILSCN
|
|
POP DE
|
|
CP E
|
|
JP Z, MB_GDFILM
|
|
CP MD.RND
|
|
JP NZ, MB_ERBFM
|
|
MB_GDFILM:
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_FILSET:
|
|
LD D, B
|
|
LD E, C
|
|
EX DE, HL
|
|
LD (MB_PTRFIL), HL
|
|
EX DE, HL
|
|
RET
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_FILSCN:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
CP '#'
|
|
CALL Z, MB_CHRGTR
|
|
CALL MB_FRMEVL
|
|
MB_FILFRM:
|
|
CALL MB_CONINT
|
|
MB_FILIDX:
|
|
LD E, A
|
|
MB_FILID2:
|
|
LD A, (MB_MAXFIL)
|
|
CP E
|
|
JP C, MB_ERBFN
|
|
LD D, 0x0
|
|
PUSH HL
|
|
LD HL, MB_FILPTR
|
|
ADD HL, DE
|
|
ADD HL, DE
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
LD A, (BC)
|
|
OR A
|
|
POP HL
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_GETPTR:
|
|
CALL MB_FILID2
|
|
LD HL, DATOFS
|
|
CP MD.RND
|
|
JP NZ, MB_NTFIVD
|
|
LD HL, FD.DAT
|
|
MB_NTFIVD:
|
|
ADD HL, BC
|
|
EX DE, HL
|
|
RET
|
|
MB_MKI_:
|
|
LD A, 0x2
|
|
DB 1
|
|
MB_MKS_:
|
|
LD A, 0x4
|
|
DB 1
|
|
|
|
MB_MKD_:
|
|
LD A, 0x8
|
|
PUSH AF
|
|
CALL MB_DOCNVF
|
|
POP AF
|
|
CALL MB_STRINI
|
|
LD HL, (MB_DSCTMP + INCSTR)
|
|
CALL MB_VMOVMF
|
|
JP MB_FINBCK
|
|
MB_CVI:
|
|
LD A, 1
|
|
DB 1
|
|
MB_CVS:
|
|
LD A, 3
|
|
DB 1
|
|
MB_CVD:
|
|
LD A, 7
|
|
PUSH AF
|
|
CALL MB_FRESTR
|
|
POP AF
|
|
CP (HL)
|
|
JP NC, MB_FCERR
|
|
INC A
|
|
LD (MB_VALTYP), A
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
JP MB_VMOVFM
|
|
|
|
; --------------------------------------------------
|
|
MB_FILIND:
|
|
CALL MB_GETYPR
|
|
LD BC, MB_DOASIG
|
|
LD DE, CON1 ; TERMINATORS: SPACE + COMMA
|
|
JP NZ, MB_INPDOR
|
|
LD E, D
|
|
JP MB_INPDOR
|
|
|
|
; --------------------------------------------------
|
|
MB_DLINE:
|
|
CALL MB_FILINP
|
|
CALL MB_PTRGET
|
|
CALL MB_CHKSTR
|
|
LD BC, MB_FINPRT
|
|
PUSH BC
|
|
PUSH DE
|
|
LD BC, MB_LETCON
|
|
XOR A
|
|
LD D, A
|
|
LD E, A
|
|
MB_INPDOR:
|
|
PUSH AF
|
|
PUSH BC
|
|
PUSH HL
|
|
|
|
MB_NOTNWT:
|
|
CALL MB_INDSKC
|
|
JP C, MB_ERRPE
|
|
CP ASCII_SP
|
|
JP NZ, MB_NOTSPC1
|
|
INC D
|
|
DEC D
|
|
JP NZ, MB_NOTNWT
|
|
|
|
; --------------------------------------------------
|
|
MB_NOTSPC1:
|
|
CP '"'
|
|
JP NZ, MB_NOTQTE
|
|
LD B, A
|
|
LD A, E
|
|
CP ','
|
|
LD A, B
|
|
JP NZ, MB_NOTQTE
|
|
LD D, B
|
|
LD E, B
|
|
CALL MB_INDSKC
|
|
JP C, MB_QUITSI
|
|
MB_NOTQTE:
|
|
LD HL, MB_BUF
|
|
LD B, 0xff
|
|
MB_LOPCRS:
|
|
LD C, A
|
|
LD A, D
|
|
CP '"'
|
|
LD A, C
|
|
JP Z, MB_NOTQTL
|
|
CP ASCII_CR
|
|
PUSH HL
|
|
JP Z, MB_ICASLF
|
|
POP HL
|
|
CP ASCII_LF
|
|
JP NZ, MB_NOTQTL
|
|
LD C, A
|
|
LD A, E
|
|
CP ','
|
|
LD A, C
|
|
CALL NZ, MB_STRCHR
|
|
CALL MB_INDSKC
|
|
JP C, MB_QUITSI
|
|
CP ASCII_CR
|
|
JP NZ, MB_NOTQTL
|
|
LD A, E
|
|
CP ASCII_SP
|
|
JP Z, MB_LPCRGT
|
|
CP ','
|
|
LD A, ASCII_CR
|
|
JP Z, MB_LPCRGT
|
|
MB_NOTQTL:
|
|
OR A
|
|
JP Z, MB_LPCRGT
|
|
CP D
|
|
JP Z, MB_QUITSI
|
|
CP E
|
|
JP Z, MB_QUITSI
|
|
CALL MB_STRCHR
|
|
MB_LPCRGT:
|
|
CALL MB_INDSKC
|
|
JP NC, MB_LOPCRS
|
|
MB_QUITSI:
|
|
PUSH HL
|
|
CP '"'
|
|
JP Z, MB_MORSPC
|
|
CP ASCII_SP
|
|
JP NZ, MB_NOSKCR
|
|
MB_MORSPC:
|
|
CALL MB_INDSKC
|
|
JP C, MB_NOSKCR
|
|
CP ASCII_SP
|
|
JP Z, MB_MORSPC
|
|
CP ','
|
|
JP Z, MB_NOSKCR
|
|
CP ASCII_CR
|
|
JP NZ, MB_BAKUPT
|
|
MB_ICASLF:
|
|
CALL MB_INDSKC
|
|
JP C, MB_NOSKCR
|
|
CP ASCII_LF
|
|
JP Z, MB_NOSKCR
|
|
MB_BAKUPT:
|
|
LD HL, (MB_PTRFIL)
|
|
LD BC, NMLOFS
|
|
ADD HL, BC
|
|
INC (HL)
|
|
MB_NOSKCR:
|
|
POP HL
|
|
MB_QUIT2B:
|
|
LD (HL), 0x0
|
|
LD HL, MB_BUFMIN ;BUF-1
|
|
LD A, E
|
|
SUB ' '
|
|
JP Z, MB_NUMIMK
|
|
LD B, D
|
|
LD D, 0x0
|
|
CALL MB_STRLT2
|
|
POP HL
|
|
RET
|
|
MB_NUMIMK:
|
|
CALL MB_GETYPR
|
|
PUSH AF
|
|
CALL MB_CHRGTR
|
|
POP AF
|
|
PUSH AF
|
|
CALL C, MB_FIN
|
|
POP AF
|
|
CALL NC, MB_FINDBL
|
|
POP HL
|
|
RET
|
|
MB_STRCHR:
|
|
OR A
|
|
RET Z
|
|
LD (HL), A
|
|
INC HL
|
|
DEC B
|
|
RET NZ
|
|
POP BC
|
|
JP MB_QUIT2B
|
|
MB_PRGFLI:
|
|
LD D, MD.SQI
|
|
MB_PRGFL2:
|
|
XOR A
|
|
JP MB_PRGFIL
|
|
MB_LRUN:
|
|
DB 0xF6
|
|
MB_LOAD:
|
|
XOR A
|
|
PUSH AF
|
|
CALL MB_PRGFLI
|
|
LD A, (MB_MAXFIL)
|
|
LD (MB_LSTFRE+1), A
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_NOTRNL
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CALL MB_SYNCHR
|
|
DB 'R'
|
|
JP NZ, MB_SNERR
|
|
POP AF
|
|
MB_CHNENT:
|
|
XOR A
|
|
LD (MB_MAXFIL), A
|
|
DB 0xF6
|
|
MB_NOTRNL:
|
|
POP AF
|
|
LD (MB_LSTFRE), A
|
|
LD HL, 0x80
|
|
LD (HL), 0x0
|
|
LD (MB_FILPTR), HL
|
|
CALL MB_SCRTCH
|
|
LD A, (MB_LSTFRE+1)
|
|
LD (MB_MAXFIL), A
|
|
LD HL, (MB_FILPT1)
|
|
LD (MB_FILPTR), HL
|
|
LD (MB_PTRFIL), HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
INC HL
|
|
LD A, H
|
|
AND L
|
|
INC A
|
|
JP NZ, MB_NOTINI
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
MB_NOTINI:
|
|
CALL MB_INDSKC
|
|
JP C, MB_MAIN
|
|
CP 0xfe
|
|
JP NZ, MB_NTPROL
|
|
LD (MB_PROFLG), A
|
|
JP MB_BINLOD
|
|
MB_NTPROL:
|
|
INC A
|
|
JP NZ, MB_MAINGO
|
|
MB_BINLOD:
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
MB_LPBLDR:
|
|
EX DE, HL
|
|
LD HL, (MB_FRETOP)
|
|
LD BC, 0xffaa ;65536-86
|
|
ADD HL, BC
|
|
CALL MB_DCOMPR
|
|
EX DE, HL
|
|
JP C, LAB_ram_5356
|
|
CALL MB_INDSKB
|
|
LD (HL), A
|
|
INC HL
|
|
JP NC, MB_LPBLDR
|
|
LD (MB_VARTAB), HL
|
|
LD A, (MB_PROFLG)
|
|
OR A
|
|
CALL NZ, MB_PDECOD
|
|
CALL MB_LINKER
|
|
INC HL
|
|
INC HL
|
|
LD (MB_VARTAB), HL
|
|
LD HL, MB_MAXFIL
|
|
LD A, (HL)
|
|
LD (MB_LSTFRE+1), A
|
|
LD (HL), 0x0
|
|
CALL MB_RUNC
|
|
LD A, (MB_LSTFRE+1)
|
|
LD (MB_MAXFIL), A
|
|
LD A, (MB_CHNFLG)
|
|
OR A
|
|
JP NZ, MB_CHNRET
|
|
LD A, (MB_LSTFRE)
|
|
OR A
|
|
JP Z, MB_READY
|
|
JP MB_NEWSTT
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_PRGFIN:
|
|
CALL MB_FINPRT
|
|
CALL MB_CLSFIL
|
|
JP MB_GTMPRT
|
|
LAB_ram_5356:
|
|
CALL MB_SCRTCH
|
|
JP MB_OMERR
|
|
MB_MERGE:
|
|
POP BC
|
|
CALL MB_PRGFLI
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_OKGETM
|
|
CALL MB_PRGFIN
|
|
JP MB_SNERR
|
|
MB_OKGETM:
|
|
XOR A
|
|
LD (MB_LSTFRE), A
|
|
CALL MB_INDSKC
|
|
JP C, MB_MAIN
|
|
INC A
|
|
JP Z, MB_ERBFM
|
|
INC A
|
|
JP Z, MB_ERBFM
|
|
MB_MAINGO:
|
|
LD HL, (MB_PTRFIL)
|
|
LD BC, NMLOFS
|
|
ADD HL, BC
|
|
INC (HL)
|
|
JP MB_MAIN
|
|
MB_DIRDO:
|
|
PUSH HL
|
|
LD HL, (MB_PTRFIL)
|
|
LD A, H
|
|
OR L
|
|
LD DE, ERRFDR
|
|
JP NZ, MB_ERROR
|
|
POP HL
|
|
JP MB_GONE
|
|
MB_SAVE:
|
|
LD D, MD.SQO
|
|
CALL MB_PRGFL2
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_BINSAV
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
CP 'P'
|
|
JP Z, MB_PROSAV
|
|
CALL MB_SYNCHR
|
|
DB 'A'
|
|
JP MB_LIST
|
|
MB_BINSAV:
|
|
CALL MB_SCCPTR
|
|
CALL MB_PROCHK
|
|
LD A, 0xff
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_BINPSV:
|
|
CALL MB_FILOU3
|
|
EX DE, HL
|
|
LD HL, (MB_VARTAB)
|
|
EX DE, HL
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
MB_BSAVLP:
|
|
CALL MB_DCOMPR
|
|
JP Z, MB_PRGFIN
|
|
LD A, (HL)
|
|
INC HL
|
|
PUSH DE
|
|
CALL MB_FILOU3
|
|
POP DE
|
|
JP MB_BSAVLP
|
|
; ===================================================
|
|
; DRIVER CODE FOR CLOSE
|
|
; ===================================================
|
|
MB_CLOSE:
|
|
LD BC, MB_CLSFIL
|
|
LD A, (MB_MAXFIL)
|
|
JP NZ, MB_RTLOOP
|
|
PUSH HL
|
|
MB_MRALL:
|
|
PUSH BC
|
|
PUSH AF
|
|
LD DE, MB_RETALL
|
|
PUSH DE
|
|
PUSH BC
|
|
RET
|
|
MB_RETALL:
|
|
POP AF
|
|
POP BC
|
|
DEC A
|
|
JP P, MB_MRALL
|
|
POP HL
|
|
RET
|
|
MB_RETRTS:
|
|
POP BC
|
|
POP HL
|
|
LD A, (HL)
|
|
CP ','
|
|
RET NZ
|
|
CALL MB_CHRGTR
|
|
MB_RTLOOP:
|
|
PUSH BC
|
|
LD A, (HL)
|
|
CP '#'
|
|
CALL Z, MB_CHRGTR
|
|
CALL MB_GETBYT
|
|
EX (SP), HL
|
|
PUSH HL
|
|
LD DE, MB_RETRTS
|
|
PUSH DE
|
|
JP (HL)
|
|
MB_CLSALL:
|
|
PUSH DE
|
|
PUSH BC
|
|
XOR A
|
|
CALL MB_CLOSE
|
|
POP BC
|
|
POP DE
|
|
XOR A
|
|
RET
|
|
MB_FIELD:
|
|
CALL MB_FILSCN
|
|
JP Z, MB_ERBFN
|
|
SUB MD.RND
|
|
JP NZ, MB_ERBFM
|
|
EX DE, HL
|
|
LD HL, FD.SIZ ;POINT TO RECORD SIZE
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
LD (MB_TEMPA), HL
|
|
LD HL, 0x0
|
|
LD (MB_RECORD), HL
|
|
LD A, H
|
|
EX DE, HL
|
|
LD DE, FD.DAT ;POINT TO 5.0 FIELD BUFFER
|
|
MB_LOPFLD:
|
|
EX DE, HL
|
|
ADD HL, BC
|
|
LD B, A
|
|
EX DE, HL
|
|
LD A, (HL)
|
|
CP ','
|
|
RET NZ
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_GTBYTC
|
|
PUSH AF
|
|
CALL MB_SYNCHR
|
|
DB 'A'
|
|
CALL MB_SYNCHR
|
|
DB 'S'
|
|
CALL MB_PTRGET
|
|
CALL MB_CHKSTR
|
|
POP AF
|
|
POP BC
|
|
EX (SP), HL
|
|
LD C, A
|
|
PUSH DE
|
|
PUSH HL
|
|
LD HL, (MB_RECORD)
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
LD (MB_RECORD), HL
|
|
EX DE, HL
|
|
LD HL, (MB_TEMPA)
|
|
CALL MB_DCOMPR
|
|
JP C, MB_DERFOV
|
|
POP HL
|
|
POP DE
|
|
EX DE, HL
|
|
LD (HL), C
|
|
INC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
POP HL
|
|
JP MB_LOPFLD
|
|
; ===================================================
|
|
; LSET/RSET stringvar = stringexp
|
|
; ===================================================
|
|
MB_RSET:
|
|
DB 0xF6 ; OR 0x37
|
|
MB_LSET:
|
|
SCF
|
|
PUSH AF
|
|
CALL MB_PTRGET
|
|
CALL MB_CHKSTR
|
|
PUSH DE
|
|
CALL MB_FRMEQL
|
|
POP BC
|
|
EX (SP), HL
|
|
PUSH HL
|
|
PUSH BC
|
|
CALL MB_FRESTR
|
|
LD B, (HL)
|
|
EX (SP), HL
|
|
LD A, (HL)
|
|
LD C, A
|
|
PUSH BC
|
|
PUSH HL
|
|
PUSH AF
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
OR A
|
|
JP Z, MB_RETCUR
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_OLDSTR
|
|
LD HL, (MB_VARTAB)
|
|
CALL MB_DCOMPR
|
|
JP C, MB_OLDSTR
|
|
LD E, C
|
|
LD D, 0x0
|
|
LD HL, (MB_STREND)
|
|
ADD HL, DE
|
|
EX DE, HL
|
|
LD HL, (MB_FRETOP)
|
|
CALL MB_DCOMPR
|
|
JP C, MB_MAKDSC
|
|
POP AF
|
|
MB_MADESC:
|
|
LD A, C
|
|
CALL MB_GETSPA
|
|
POP HL
|
|
POP BC
|
|
EX (SP), HL
|
|
PUSH DE
|
|
PUSH BC
|
|
CALL MB_FRESTR
|
|
POP BC
|
|
POP DE
|
|
EX (SP), HL
|
|
PUSH BC
|
|
PUSH HL
|
|
INC HL
|
|
PUSH AF
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
MB_OLDSTR:
|
|
POP AF
|
|
POP HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
POP BC
|
|
POP HL
|
|
INC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
LD A, C
|
|
CP B
|
|
JP NC, MB_FILDOK
|
|
LD B, A
|
|
MB_FILDOK:
|
|
SUB B
|
|
LD C, A
|
|
POP AF
|
|
CALL NC, MB_BLKFIL
|
|
INC B
|
|
MB_COPLOP:
|
|
DEC B
|
|
JP Z, MB_LRSTDN
|
|
LD A, (HL)
|
|
LD (DE), A
|
|
INC HL
|
|
INC DE
|
|
JP MB_COPLOP
|
|
MB_RETCUR:
|
|
POP BC
|
|
POP BC
|
|
POP BC
|
|
POP BC
|
|
POP BC
|
|
MB_LRSTDN:
|
|
CALL C, MB_BLKFIL
|
|
POP HL
|
|
RET
|
|
MB_BLKFIL:
|
|
LD A, ASCII_SP
|
|
INC C
|
|
MB_BLKFL1:
|
|
DEC C
|
|
RET Z
|
|
LD (DE), A
|
|
INC DE
|
|
JP MB_BLKFL1
|
|
MB_MAKDSC:
|
|
POP AF
|
|
POP HL
|
|
POP BC
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
JP NZ, MB_MAKDS1
|
|
PUSH BC
|
|
LD A, B
|
|
CALL MB_STRINI
|
|
CALL MB_PUTNEW
|
|
POP BC
|
|
MB_MAKDS1:
|
|
EX (SP), HL
|
|
PUSH BC
|
|
PUSH HL
|
|
JP MB_MADESC
|
|
MB_FIXINP:
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB ASCII_CUR
|
|
CALL MB_SYNCHR
|
|
DB '('
|
|
CALL MB_GETBYT
|
|
PUSH DE
|
|
LD A, (HL)
|
|
CP ','
|
|
JP NZ, MB_REDTTY
|
|
CALL MB_CHRGTR
|
|
CALL MB_FILSCN
|
|
CP 0x2
|
|
JP Z, MB_ERBFM
|
|
CALL MB_FILSET
|
|
XOR A
|
|
MB_REDTTY:
|
|
PUSH AF
|
|
CALL MB_SYNCHR
|
|
DB ')'
|
|
POP AF
|
|
EX (SP), HL
|
|
PUSH AF
|
|
LD A, L
|
|
OR A
|
|
JP Z, MB_FCERR
|
|
PUSH HL
|
|
CALL MB_STRINI
|
|
EX DE, HL
|
|
POP BC
|
|
MB_FIXLOP:
|
|
POP AF
|
|
PUSH AF
|
|
JP Z, MB_DSKCHR
|
|
CALL MB_CHARCG
|
|
JP NZ, MB_CHARCW
|
|
CALL MB_INCHRI
|
|
MB_CHARCW:
|
|
CP MD.RND
|
|
JP Z, MB_INTCTC
|
|
MB_PUTCHR:
|
|
LD (HL), A
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_FIXLOP
|
|
POP AF
|
|
CALL MB_FINPRT
|
|
JP MB_PUTNEW
|
|
MB_INTCTC:
|
|
LD HL, (MB_SAVSTK)
|
|
LD SP, HL
|
|
JP MB_ENDCON
|
|
MB_DSKCHR:
|
|
CALL MB_INDSKC
|
|
JP C, MB_ERRPE
|
|
JP MB_PUTCHR
|
|
; ===================================================
|
|
; Operating system calls and other data
|
|
; DCPM.MAC
|
|
; ===================================================
|
|
MB_EOF:
|
|
CALL MB_FILFRM
|
|
JP Z, MB_ERBFN
|
|
CP 0x2
|
|
JP Z, MB_ERBFM
|
|
MB_ORNCHK:
|
|
LD HL, ORNOFS
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_WASEOF
|
|
LD A, (BC)
|
|
CP MD.RND
|
|
JP Z, MB_WASEOF
|
|
INC HL
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_CHKCTZ
|
|
PUSH BC
|
|
LD H, B
|
|
LD L, C
|
|
CALL MB_READIN
|
|
POP BC
|
|
JP MB_ORNCHK
|
|
MB_CHKCTZ:
|
|
LD A, 0x80
|
|
SUB (HL)
|
|
LD C, A
|
|
LD B, 0x0
|
|
ADD HL, BC
|
|
INC HL
|
|
LD A, (HL)
|
|
SUB 0x1a
|
|
MB_WASEOF:
|
|
SUB 0x1
|
|
SBC A, A
|
|
JP MB_CONIA
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_OUTSEQ:
|
|
;BC -> FILE DATA BLOCK
|
|
LD D, B
|
|
LD E, C
|
|
INC DE
|
|
MB_OUTSQ2:
|
|
LD HL, ORNOFS
|
|
ADD HL, BC
|
|
PUSH BC
|
|
XOR A
|
|
LD (HL), A
|
|
;OUTPUT NEXT RECORD IN FILE
|
|
;Inp: A = 0
|
|
; HL -> to NMLOFS-1
|
|
; DE -> to File Data Block + 1 ( FCB if SPC2ND=0)
|
|
; BC -> to File Data Block
|
|
CALL MB_SETBUF
|
|
LD A, (MB_CPMWRI)
|
|
CALL MB_ACCFIL
|
|
CP 0xff
|
|
JP Z, MB_ERTMF
|
|
DEC A
|
|
JP Z, MB_ERIOE
|
|
DEC A
|
|
JP NZ, MB_OUTSOK
|
|
POP DE
|
|
XOR A
|
|
LD (DE), A
|
|
LD C, 0x10
|
|
INC DE
|
|
CALL BDOS_ENTER
|
|
JP MB_DERDFL
|
|
MB_OUTSOK:
|
|
INC A
|
|
JP Z, MB_ERTMF
|
|
POP BC
|
|
LD HL, LOCOFS
|
|
ADD HL, BC
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC DE
|
|
LD (HL), D
|
|
DEC HL
|
|
LD (HL), E
|
|
RET
|
|
; ===================================================
|
|
; FUNCTION
|
|
; ===================================================
|
|
MB_CLSFIL:
|
|
CALL MB_FILIDX
|
|
JP Z, MB_NTOPNC
|
|
PUSH BC
|
|
LD A, (BC)
|
|
LD D, B
|
|
LD E, C
|
|
INC DE
|
|
PUSH DE
|
|
CP SQO ;SEQENTIAL OUTPUT?
|
|
JP NZ, MB_NOFORC
|
|
LD HL, MB_CLSFL1
|
|
PUSH HL
|
|
PUSH HL
|
|
LD H, B
|
|
LD L, C
|
|
LD A, EOFCHR
|
|
JP MB_FILOU4
|
|
MB_CLSFL1:
|
|
LD HL, ORNOFS
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
OR A
|
|
CALL NZ, MB_OUTSQ2
|
|
MB_NOFORC:
|
|
POP DE
|
|
CALL MB_SETBUF
|
|
LD C, C.CLOS
|
|
CALL BDOS_ENTER
|
|
POP BC
|
|
MB_NTOPNC:
|
|
LD D, DATOFS
|
|
XOR A
|
|
MB_MORCZR:
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
JP NZ, MB_MORCZR
|
|
RET
|
|
MB_LOC:
|
|
CALL MB_FILFRM
|
|
JP Z, MB_ERBFN
|
|
CP MD.RND
|
|
LD HL, LOCOFS+1
|
|
JP NZ, MB_INTRED
|
|
LD HL, FD.LOG+1
|
|
MB_INTRED:
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
DEC HL
|
|
LD L, (HL)
|
|
JP MB_GIVINT
|
|
|
|
MB_LOF:
|
|
CALL MB_FILFRM
|
|
JP Z, MB_ERBFN
|
|
LD HL, 0x0010 ; ToDo: Check, in original code there is: FCB.RC + 1 -> Point to record number
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
JP MB_SNGFLT
|
|
; ===================================================
|
|
; PUT A CHARACTER IN AN OUTPUT BUFFER AND OUTPUT IF NECESSARY
|
|
; ===================================================
|
|
MB_FILOUT:
|
|
POP HL
|
|
POP AF
|
|
MB_FILOU3:
|
|
PUSH HL
|
|
PUSH AF
|
|
LD HL, (MB_PTRFIL)
|
|
LD A, (HL)
|
|
CP 0x1
|
|
JP Z, MB_POPAHT
|
|
CP 0x3
|
|
JP Z, MB_FILOFV
|
|
POP AF
|
|
MB_FILOU4:
|
|
PUSH DE
|
|
PUSH BC
|
|
LD B, H
|
|
LD C, L
|
|
PUSH AF
|
|
LD DE, ORNOFS
|
|
ADD HL, DE
|
|
LD A, (HL)
|
|
CP 0x80
|
|
PUSH HL
|
|
CALL Z, MB_OUTSEQ
|
|
POP HL
|
|
INC (HL)
|
|
LD C, (HL)
|
|
LD B, 0x0
|
|
INC HL
|
|
POP AF
|
|
MB_FILUPP:
|
|
PUSH AF
|
|
LD D, (HL)
|
|
CP 0xd
|
|
LD (HL), B
|
|
JP Z, MB_ISCRDS
|
|
ADD A, 0xe0
|
|
LD A, D
|
|
ADC A, B
|
|
LD (HL), A
|
|
MB_ISCRDS:
|
|
ADD HL, BC
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
LD (HL), A
|
|
POP HL
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_FIVDPT:
|
|
DEC DE
|
|
DEC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
INC HL
|
|
LD (HL), 0x80
|
|
INC HL
|
|
LD (HL), 0x80
|
|
POP HL
|
|
EX (SP), HL
|
|
LD B, H
|
|
LD C, L
|
|
PUSH HL
|
|
LD A, (MB_CPMVRN)
|
|
OR A
|
|
JP Z, MB_RNDVR1
|
|
LD HL, FCB.RN+1
|
|
ADD HL, BC
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
INC HL
|
|
LD (HL), 0x0
|
|
JP MB_RNDDON
|
|
|
|
; --------------------------------------------------
|
|
MB_RNDVR1:
|
|
LD HL, 0x000D ; ToDo: Check, in original source there is FCB.EX+1
|
|
ADD HL, BC
|
|
LD A, E
|
|
RLA
|
|
LD A, D
|
|
RLA
|
|
LD D, (HL)
|
|
CP D
|
|
JP Z, MB_SAMEXT
|
|
PUSH DE
|
|
PUSH AF
|
|
PUSH HL
|
|
PUSH BC
|
|
LD DE, DMA_BUFFER
|
|
LD C, C.BUFF
|
|
CALL BDOS_ENTER
|
|
POP DE
|
|
PUSH DE
|
|
INC DE
|
|
LD C, C.CLOS
|
|
CALL BDOS_ENTER
|
|
POP DE
|
|
POP HL
|
|
POP AF
|
|
LD (HL), A
|
|
PUSH DE
|
|
INC DE
|
|
LD C, C.OPEN
|
|
PUSH DE
|
|
CALL BDOS_ENTER
|
|
POP DE
|
|
INC A
|
|
JP NZ, MB_RNDOK
|
|
LD C, C.MAKE
|
|
CALL BDOS_ENTER
|
|
INC A
|
|
JP Z, MB_ERTMF
|
|
|
|
; --------------------------------------------------
|
|
MB_RNDOK:
|
|
POP BC
|
|
POP DE
|
|
|
|
; --------------------------------------------------
|
|
MB_SAMEXT:
|
|
LD HL, 0x0021 ; ToDo: Check, in original code there is: FCB.NR+1
|
|
ADD HL, BC
|
|
LD A, E
|
|
AND 0x7f
|
|
LD (HL), A
|
|
MB_RNDDON:
|
|
POP HL
|
|
LD A, (MB_MAXTRK)
|
|
OR A
|
|
JP NZ, MB_PUTFIN
|
|
CALL MB_READIN
|
|
POP HL
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
MB_PUTFIN:
|
|
LD HL, 0x0021 ; ToDo: Check, in original code there is: FCB.NR+1
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
CP 0x7f ;LAST RECORD IN EXTENT?
|
|
PUSH AF
|
|
LD DE, DMA_BUFFER
|
|
LD HL, DATOFS
|
|
ADD HL, BC
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL Z, MB_BUFMOV
|
|
CALL MB_OUTSEQ
|
|
POP DE
|
|
POP HL
|
|
POP AF
|
|
CALL Z, MB_BUFMOV
|
|
POP HL
|
|
JP MB_FINPRT
|
|
MB_BUFMOV:
|
|
PUSH BC
|
|
LD B, 0x80
|
|
MB_BUFSLP:
|
|
LD A, (HL)
|
|
INC HL
|
|
LD (DE), A
|
|
INC DE
|
|
DEC B
|
|
JP NZ, MB_BUFSLP
|
|
POP BC
|
|
RET
|
|
MB_INDSKB:
|
|
PUSH BC
|
|
PUSH HL
|
|
MB_INDSK3:
|
|
LD HL, (MB_PTRFIL)
|
|
LD A, (HL)
|
|
CP MD.RND
|
|
JP Z, MB_FILIFV
|
|
LD BC, NMLOFS
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_FILLSQ
|
|
DEC HL
|
|
LD A, (HL)
|
|
INC HL
|
|
DEC (HL)
|
|
SUB (HL)
|
|
LD C, A
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
OR A
|
|
POP HL
|
|
POP BC
|
|
RET
|
|
MB_FILLSQ:
|
|
DEC HL
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_FILLS1
|
|
CALL MB_READ2
|
|
JP NZ, MB_INDSK3
|
|
MB_FILLS1:
|
|
SCF
|
|
POP HL
|
|
POP BC
|
|
LD A, EOFCHR
|
|
RET
|
|
MB_READ2:
|
|
LD HL, (MB_PTRFIL)
|
|
MB_READIN:
|
|
PUSH DE
|
|
LD D, H
|
|
LD E, L
|
|
INC DE
|
|
LD BC, LOCOFS
|
|
ADD HL, BC
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
INC BC
|
|
DEC HL
|
|
LD (HL), C
|
|
INC HL
|
|
LD (HL), B
|
|
INC HL
|
|
INC HL
|
|
PUSH HL
|
|
LD C, DATPSC
|
|
MB_ZRRND:
|
|
INC HL
|
|
LD (HL), 0x0
|
|
DEC C
|
|
JP NZ, MB_ZRRND
|
|
CALL MB_SETBUF
|
|
LD A, (MB_CPMREA)
|
|
CALL MB_ACCFIL
|
|
OR A
|
|
LD A, 0x0
|
|
JP NZ, MB_READI2
|
|
LD A, DATPSC
|
|
MB_READI2:
|
|
POP HL
|
|
LD (HL), A
|
|
DEC HL
|
|
LD (HL), A
|
|
OR A
|
|
POP DE
|
|
RET
|
|
MB_SETBUF:
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
LD HL, NMLOFS
|
|
ADD HL, DE
|
|
EX DE, HL
|
|
LD C, C.BUFF
|
|
CALL BDOS_ENTER
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
RET
|
|
MB_INDSKC:
|
|
CALL MB_INDSKB
|
|
RET C
|
|
CP EOFCHR
|
|
SCF
|
|
CCF
|
|
RET NZ
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, (MB_PTRFIL)
|
|
LD BC, ORNOFS ;POINT TO NUMBER ORIGINALLY IN BUFFER
|
|
ADD HL, BC
|
|
LD (HL), 0x0
|
|
INC HL
|
|
LD (HL), 0x0
|
|
SCF
|
|
POP HL
|
|
POP BC
|
|
RET
|
|
MB_NAMFIL:
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_FRESTR
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_ERNMF
|
|
PUSH AF
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, E
|
|
LD E, A
|
|
CP 0x2
|
|
JP C, MB_NODEV
|
|
LD C, (HL)
|
|
INC HL
|
|
LD A, (HL)
|
|
DEC E
|
|
CP ':'
|
|
JP Z, MB_CHKFIL
|
|
DEC HL
|
|
INC E
|
|
MB_NODEV:
|
|
DEC HL
|
|
INC E
|
|
LD C, 0x40 ; 'A'-1
|
|
MB_CHKFIL:
|
|
DEC E
|
|
JP Z, MB_DERNMF
|
|
LD A, C
|
|
AND 0xdf
|
|
SUB 0x40 ; 'A'-1
|
|
JP C, MB_DERNMF
|
|
CP 0x1b
|
|
JP NC, MB_DERNMF
|
|
LD BC, MB_FILNAM
|
|
LD (BC), A
|
|
INC BC
|
|
LD D, 11 ;name length
|
|
MB_FILINX:
|
|
INC HL
|
|
MB_FILLOP:
|
|
DEC E
|
|
JP M, MB_FILSPC
|
|
LD A, (HL)
|
|
CP '.'
|
|
JP NZ, MB_FILLO1
|
|
CALL MB_FILLNM
|
|
POP AF
|
|
SCF
|
|
PUSH AF
|
|
JP MB_FILINX
|
|
|
|
MB_FILLO1:
|
|
LD (BC), A
|
|
INC BC
|
|
INC HL
|
|
DEC D
|
|
JP NZ, MB_FILLOP
|
|
MB_GOTNAM:
|
|
XOR A
|
|
LD (MB_FILNAM+12), A
|
|
POP AF
|
|
POP HL
|
|
RET
|
|
MB_FILLNM:
|
|
LD A, D
|
|
CP 0xb
|
|
JP Z, MB_DERNMF
|
|
CP 0x3
|
|
JP C, MB_DERNMF
|
|
RET Z
|
|
MB_FILLN1:
|
|
LD A, ASCII_SP
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
JP MB_FILLNM
|
|
MB_FILSPC:
|
|
INC D
|
|
DEC D
|
|
JP Z, MB_GOTNAM
|
|
MB_FILSP2:
|
|
LD A, ASCII_SP
|
|
LD (BC), A
|
|
INC BC
|
|
DEC D
|
|
JP NZ, MB_FILSP2
|
|
JP MB_GOTNAM
|
|
MB_DERNMF:
|
|
JP MB_ERNMF
|
|
MB_NAME:
|
|
CALL MB_NAMFIL
|
|
PUSH HL
|
|
LD DE, DMA_BUFFER
|
|
LD C, C.BUFF ; SET BUFFER ADDRESS
|
|
CALL BDOS_ENTER
|
|
LD DE, MB_FILNAM
|
|
LD C, C.OPEN
|
|
CALL BDOS_ENTER
|
|
INC A
|
|
JP Z, MB_ERFNF
|
|
LD HL, MB_FILNA2
|
|
LD DE, MB_FILNAM
|
|
LD B, 12 ; 12+3*0-2*0+2*0+3*0-3*0;SET [C]=MAX FILE NAME LENGTH
|
|
MB_NAMRMV:
|
|
LD A, (DE)
|
|
LD (HL), A
|
|
INC HL
|
|
INC DE
|
|
DEC B
|
|
JP NZ, MB_NAMRMV
|
|
POP HL
|
|
CALL MB_SYNCHR
|
|
DB 'A'
|
|
CALL MB_SYNCHR
|
|
DB 'S'
|
|
CALL MB_NAMFIL
|
|
PUSH HL
|
|
LD A, (MB_FILNAM)
|
|
LD HL, MB_FILNA2
|
|
CP (HL)
|
|
JP NZ, MB_FCERR
|
|
LD DE, MB_FILNAM
|
|
LD C, C.OPEN
|
|
CALL BDOS_ENTER
|
|
INC A
|
|
JP NZ, MB_DERFAE
|
|
LD C, C.RENA
|
|
LD DE, MB_FILNA2
|
|
CALL BDOS_ENTER
|
|
POP HL
|
|
RET
|
|
|
|
; --------------------------------------------------
|
|
; OPEN STATEMENT AND ALL DIRECTORY HANDLING
|
|
; --------------------------------------------------
|
|
MB_OPEN:
|
|
LD BC, MB_FINPRT
|
|
PUSH BC
|
|
CALL MB_FRMEVL
|
|
PUSH HL
|
|
CALL MB_FRESTR
|
|
LD A, (HL)
|
|
OR A
|
|
JP Z, MB_ERBFM
|
|
INC HL
|
|
LD C, (HL)
|
|
INC HL
|
|
LD B, (HL)
|
|
LD A, (BC)
|
|
; force uppercase
|
|
AND 0xdf
|
|
LD D, MD.SQO
|
|
CP 'O'
|
|
JP Z, MB_HAVMOD
|
|
LD D, MD.SQI
|
|
CP 'I'
|
|
JP Z, MB_HAVMOD
|
|
LD D, MD.RND
|
|
CP 'R'
|
|
JP NZ, MB_ERBFM
|
|
|
|
MB_HAVMOD:
|
|
POP HL
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
PUSH DE
|
|
CP '#'
|
|
CALL Z, MB_CHRGTR
|
|
CALL MB_GETBYT
|
|
CALL MB_SYNCHR
|
|
DB ','
|
|
LD A, E
|
|
OR A
|
|
JP Z, MB_ERBFN
|
|
POP DE
|
|
|
|
MB_PRGFIL:
|
|
LD E, A
|
|
PUSH DE
|
|
CALL MB_FILIDX
|
|
JP NZ, MB_ERFAO
|
|
POP DE
|
|
PUSH BC
|
|
PUSH DE
|
|
CALL MB_NAMFIL
|
|
POP DE
|
|
POP BC
|
|
PUSH BC
|
|
PUSH AF
|
|
LD A, D
|
|
CALL MB_VARECS
|
|
POP AF
|
|
LD (MB_TEMP), HL
|
|
JP C, MB_PRGDOT
|
|
LD A, E
|
|
OR A
|
|
JP NZ, MB_PRGDOT
|
|
LD HL, MB_FILNAM+9 ; FILNAM+9-0-0-2*0 - POINT TO FIRST CHAR OF EXTENSION
|
|
LD A, (HL)
|
|
CP ' '
|
|
JP NZ, MB_PRGDOT
|
|
LD (HL), 'B'
|
|
INC HL
|
|
LD (HL), 'A'
|
|
INC HL
|
|
LD (HL), 'S'
|
|
|
|
MB_PRGDOT:
|
|
POP HL
|
|
LD A, D
|
|
PUSH AF
|
|
LD (MB_PTRFIL), HL
|
|
PUSH HL
|
|
INC HL
|
|
LD DE, MB_FILNAM
|
|
LD C, 12 ; 12+0+0*3+2*0+3*0 - NUMBER OF BYTES TO COPY
|
|
|
|
MB_OPNLP:
|
|
LD A, (DE)
|
|
LD (HL), A
|
|
INC DE
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_OPNLP
|
|
XOR A
|
|
LD (HL), A
|
|
LD DE, 20 ; POINT TO NR FIELD
|
|
ADD HL, DE
|
|
LD (HL), A
|
|
POP DE
|
|
PUSH DE
|
|
INC DE
|
|
CALL MB_SETBUF
|
|
POP HL
|
|
POP AF
|
|
PUSH AF
|
|
PUSH HL
|
|
CP 0x2
|
|
JP NZ, MB_OPNFIL
|
|
PUSH DE
|
|
MB_DELEXOF:
|
|
LD C, C.DEL
|
|
CALL BDOS_ENTER
|
|
POP DE
|
|
MB_MAKFIL:
|
|
LD C, C.MAKE
|
|
CALL BDOS_ENTER
|
|
INC A
|
|
JP Z, MB_ERTMF
|
|
JP MB_OPNSET
|
|
MB_OPNFIL:
|
|
LD C, C.OPEN
|
|
CALL BDOS_ENTER
|
|
INC A
|
|
JP NZ, MB_OPNSET
|
|
POP DE
|
|
POP AF
|
|
PUSH AF
|
|
PUSH DE
|
|
CP MD.RND
|
|
JP NZ, MB_ERFNF
|
|
INC DE
|
|
JP MB_MAKFIL
|
|
MB_OPNSET:
|
|
POP DE
|
|
POP AF
|
|
LD (DE), A
|
|
PUSH DE
|
|
LD HL, LOCOFS
|
|
ADD HL, DE
|
|
XOR A
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
POP HL
|
|
LD A, (HL)
|
|
CP MD.RND
|
|
JP Z, MB_RNDFIN
|
|
CP MD.SQI
|
|
JP NZ, MB_GTMPRT
|
|
CALL MB_READ2
|
|
LD HL, (MB_TEMP)
|
|
RET
|
|
|
|
MB_RNDFIN:
|
|
LD BC, DATOFS
|
|
ADD HL, BC
|
|
LD C, DATPSC
|
|
MB_ZRRNDT:
|
|
LD (HL), B
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_ZRRNDT
|
|
JP MB_GTMPRT
|
|
|
|
MB_SYSTEM:
|
|
RET NZ
|
|
CALL MB_CLSALL
|
|
|
|
; --------------------------------------------------
|
|
; System error, exit to CP/M
|
|
; --------------------------------------------------
|
|
MB_SYSTME:
|
|
JP WARM_BOOT
|
|
|
|
MB_RESET:
|
|
RET NZ
|
|
PUSH HL
|
|
CALL MB_CLSALL
|
|
LD C, C.GDRV
|
|
CALL BDOS_ENTER
|
|
PUSH AF
|
|
LD C, C.REST
|
|
CALL BDOS_ENTER
|
|
POP AF
|
|
LD E, A
|
|
LD C, C.SDRV
|
|
CALL BDOS_ENTER
|
|
POP HL
|
|
RET
|
|
|
|
MB_KILL:
|
|
CALL MB_NAMFIL
|
|
PUSH HL
|
|
LD DE, DMA_BUFFER
|
|
LD C, C.BUFF
|
|
CALL BDOS_ENTER
|
|
LD DE, MB_FILNAM
|
|
PUSH DE
|
|
LD C, C.OPEN
|
|
CALL BDOS_ENTER
|
|
INC A
|
|
POP DE
|
|
PUSH DE
|
|
PUSH AF
|
|
LD C, C.CLOS
|
|
JP Z, MB_NO_CLOS
|
|
CALL BDOS_ENTER
|
|
|
|
MB_NO_CLOS:
|
|
POP AF
|
|
POP DE
|
|
JP Z, MB_ERFNF
|
|
LD C, C.DEL
|
|
CALL BDOS_ENTER
|
|
POP HL
|
|
RET
|
|
|
|
MB_FILES:
|
|
JP NZ, MB_FILNB
|
|
PUSH HL
|
|
LD HL, MB_FILNAM
|
|
LD (HL), 0x0
|
|
INC HL
|
|
LD C, 0xb ;11+8*0 - MATCH ALL FILES
|
|
CALL MB_FILQST
|
|
POP HL
|
|
|
|
MB_FILNB:
|
|
CALL NZ, MB_NAMFIL
|
|
XOR A
|
|
LD (MB_FILNAM+12), A
|
|
PUSH HL
|
|
LD HL, MB_FILNAM+1
|
|
LD C, 8
|
|
CALL MB_FILQS
|
|
LD HL, MB_FILNAM+9
|
|
LD C, 3
|
|
CALL MB_FILQS
|
|
LD DE, DMA_BUFFER
|
|
LD C, C.BUFF
|
|
CALL BDOS_ENTER
|
|
LD DE, MB_FILNAM
|
|
LD C, C.SEAR
|
|
CALL BDOS_ENTER
|
|
CP 0xff
|
|
JP Z, MB_ERFNF
|
|
MB_FILNXT:
|
|
AND 0x3
|
|
ADD A, A
|
|
ADD A, A
|
|
ADD A, A
|
|
ADD A, A
|
|
ADD A, A
|
|
LD C, A
|
|
LD B, 0x0
|
|
LD HL, P_CMD_LINE
|
|
ADD HL, BC
|
|
LD C, 11 ; 11+5*0+11*0 - CHARS IN NAME
|
|
MB_MORNAM:
|
|
LD A, (HL)
|
|
INC HL
|
|
CALL MB_OUTDO
|
|
LD A, C
|
|
CP 0x4
|
|
JP NZ, MB_NOTEXT
|
|
LD A, (HL)
|
|
CP ' '
|
|
JP Z, MB_PRISPA
|
|
LD A, '.'
|
|
|
|
MB_PRISPA:
|
|
CALL MB_OUTDO
|
|
|
|
MB_NOTEXT:
|
|
DEC C
|
|
JP NZ, MB_MORNAM
|
|
LD A, (MB_TTYPOS)
|
|
ADD A, 0xd
|
|
LD D, A
|
|
LD A, (MB_LINLEN) ;= 80
|
|
CP D
|
|
JP C, MB_NWFILN
|
|
LD A, ' '
|
|
CALL MB_OUTDO
|
|
CALL MB_OUTDO
|
|
MB_NWFILN:
|
|
CALL C, MB_CRDO
|
|
LD DE, MB_FILNAM
|
|
LD C, C.SEAR_N
|
|
CALL BDOS_ENTER
|
|
CP 0xff
|
|
JP NZ, MB_FILNXT
|
|
POP HL
|
|
RET
|
|
MB_FILQS:
|
|
LD A, (HL)
|
|
CP '*'
|
|
RET NZ
|
|
MB_FILQST:
|
|
LD (HL), '?'
|
|
INC HL
|
|
DEC C
|
|
JP NZ, MB_FILQST
|
|
RET
|
|
|
|
MB_ACCFIL:
|
|
PUSH DE
|
|
LD C, A
|
|
PUSH BC
|
|
CALL BDOS_ENTER
|
|
POP BC
|
|
POP DE
|
|
PUSH AF
|
|
LD HL, FCB.RN
|
|
ADD HL, DE
|
|
INC (HL)
|
|
JP NZ, MB_ACCFL1
|
|
INC HL
|
|
INC (HL)
|
|
JP NZ, MB_ACCFL1
|
|
INC HL
|
|
INC (HL)
|
|
MB_ACCFL1:
|
|
LD A, C
|
|
CP 0x22
|
|
JP NZ, MB_ACCFL2
|
|
POP AF
|
|
OR A
|
|
RET Z
|
|
CP 0x5
|
|
JP Z, MB_ERTMF
|
|
CP 0x3
|
|
LD A, 0x1
|
|
RET Z
|
|
INC A
|
|
RET
|
|
MB_ACCFL2:
|
|
POP AF
|
|
RET
|
|
MB_VARECS:
|
|
CP MD.RND
|
|
RET NZ
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
PUSH DE
|
|
LD DE, 0x80
|
|
JP Z, MB_NOTSEP
|
|
PUSH BC
|
|
CALL MB_INTIDX
|
|
POP BC
|
|
MB_NOTSEP:
|
|
PUSH HL
|
|
LD HL, (MB_MAXREC)
|
|
CALL MB_DCOMPR
|
|
JP C, MB_FCERR
|
|
LD HL, FD.SIZ
|
|
ADD HL, BC
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
XOR A
|
|
LD E, 0x7
|
|
MB_ZOFIVB:
|
|
INC HL
|
|
LD (HL), A
|
|
DEC E
|
|
JP NZ, MB_ZOFIVB
|
|
POP HL
|
|
POP DE
|
|
RET
|
|
MB_PUT:
|
|
DB 0xF6
|
|
|
|
MB_GET:
|
|
XOR A
|
|
LD (MB_PGTFLG), A
|
|
CALL MB_FILSCN
|
|
CP MD.RND
|
|
JP NZ, MB_ERBFM
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, FD.LOG ;0+FD.LOG - Fetch current logical posit
|
|
ADD HL, BC
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
INC DE
|
|
EX (SP), HL
|
|
LD A, (HL)
|
|
CP ','
|
|
CALL Z, MB_INTIDX
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP NZ, MB_SNERR
|
|
EX (SP), HL
|
|
LD A, D
|
|
OR E
|
|
JP Z, MB_DERBRN
|
|
DEC HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
DEC DE
|
|
POP HL
|
|
POP BC
|
|
PUSH HL
|
|
PUSH BC
|
|
LD HL, FD.OPS
|
|
ADD HL, BC
|
|
XOR A
|
|
LD (HL), A
|
|
INC HL
|
|
LD (HL), A
|
|
LD HL, FD.SIZ
|
|
ADD HL, BC
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
EX DE, HL
|
|
PUSH DE
|
|
PUSH HL
|
|
LD HL, DATPSC
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
JP NZ, MB_NTLSAP
|
|
LD DE, 0x0
|
|
JP MB_DONCLC
|
|
MB_NTLSAP:
|
|
LD B, D
|
|
LD C, E
|
|
LD A, 0x10
|
|
EX DE, HL
|
|
LD HL, 0x0
|
|
PUSH HL
|
|
MB_FRMUL1:
|
|
ADD HL, HL
|
|
EX (SP), HL
|
|
JP NC, MB_FNOCRY
|
|
ADD HL, HL
|
|
INC HL
|
|
JP MB_FNOCY0
|
|
MB_FNOCRY:
|
|
ADD HL, HL
|
|
MB_FNOCY0:
|
|
EX (SP), HL
|
|
EX DE, HL
|
|
ADD HL, HL
|
|
EX DE, HL
|
|
JP NC, MB_FNOCY2
|
|
ADD HL, BC
|
|
EX (SP), HL
|
|
JP NC, MB_FNOINH
|
|
INC HL
|
|
MB_FNOINH:
|
|
EX (SP), HL
|
|
MB_FNOCY2:
|
|
DEC A
|
|
JP NZ, MB_FRMUL1
|
|
LD A, L
|
|
AND 0x7f
|
|
LD E, A
|
|
LD D, 0x0
|
|
POP BC
|
|
LD A, L
|
|
LD L, H
|
|
LD H, C
|
|
ADD HL, HL
|
|
JP C, MB_FCERR
|
|
RLA
|
|
JP NC, MB_DONINH
|
|
INC HL
|
|
MB_DONINH:
|
|
LD A, B
|
|
OR A
|
|
JP NZ, MB_FCERR
|
|
MB_DONCLC:
|
|
LD (MB_RECORD), HL
|
|
POP HL
|
|
POP BC
|
|
PUSH HL
|
|
LD HL, FD.DAT
|
|
ADD HL, BC
|
|
LD (MB_LBUFF), HL
|
|
MB_NXTOPD:
|
|
LD HL, DATOFS
|
|
ADD HL, BC
|
|
ADD HL, DE
|
|
LD (MB_PBUFF), HL
|
|
POP HL
|
|
PUSH HL
|
|
LD HL, DATPSC
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
POP DE
|
|
PUSH DE
|
|
CALL MB_DCOMPR
|
|
JP C, MB_DATMOF
|
|
LD H, D
|
|
LD L, E
|
|
MB_DATMOF:
|
|
LD A, (MB_PGTFLG)
|
|
OR A
|
|
JP Z, MB_NXFVBF
|
|
LD DE, DATPSC
|
|
CALL MB_DCOMPR
|
|
JP NC, MB_NOFVRD
|
|
PUSH HL
|
|
CALL MB_GETSUB
|
|
POP HL
|
|
MB_NOFVRD:
|
|
PUSH BC
|
|
LD B, H
|
|
LD C, L
|
|
EX DE, HL
|
|
LD HL, (MB_PBUFF)
|
|
EX DE, HL
|
|
LD HL, (MB_LBUFF)
|
|
CALL MB_FDMOV
|
|
LD (MB_LBUFF), HL
|
|
LD D, B
|
|
LD E, C
|
|
POP BC
|
|
CALL MB_PUTSUB
|
|
MB_NXFVBF0:
|
|
LD HL, (MB_RECORD)
|
|
INC HL
|
|
LD (MB_RECORD), HL
|
|
POP HL
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
LD A, H
|
|
OR L
|
|
LD DE, 0x0
|
|
PUSH HL
|
|
JP NZ, MB_NXTOPD
|
|
POP HL
|
|
POP HL
|
|
RET
|
|
|
|
MB_NXFVBF:
|
|
PUSH HL
|
|
CALL MB_GETSUB
|
|
POP HL
|
|
PUSH BC
|
|
LD B, H
|
|
LD C, L
|
|
EX DE, HL
|
|
LD HL, (MB_LBUFF)
|
|
EX DE, HL
|
|
LD HL, (MB_PBUFF)
|
|
CALL MB_FDMOV
|
|
EX DE, HL
|
|
LD (MB_LBUFF), HL
|
|
LD D, B
|
|
LD E, C
|
|
POP BC
|
|
JP MB_NXFVBF0
|
|
|
|
MB_PUTSUB:
|
|
DB 0xF6 ; OR 0xAF
|
|
MB_GETSUB:
|
|
XOR A
|
|
LD (MB_MAXTRK), A
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
EX DE, HL
|
|
LD HL, (MB_RECORD)
|
|
EX DE, HL
|
|
LD HL, FD.PHY
|
|
ADD HL, BC
|
|
PUSH HL
|
|
LD A, (HL)
|
|
INC HL
|
|
LD H, (HL)
|
|
LD L, A
|
|
INC DE
|
|
CALL MB_DCOMPR
|
|
POP HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
JP NZ, MB_NTREDS
|
|
LD A, (MB_MAXTRK)
|
|
OR A
|
|
JP Z, MB_SUBRET
|
|
MB_NTREDS:
|
|
LD HL, MB_SUBRET
|
|
PUSH HL
|
|
PUSH BC
|
|
PUSH HL
|
|
LD HL, LOCOFS+1
|
|
ADD HL, BC
|
|
JP MB_FIVDPT
|
|
MB_SUBRET:
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
RET
|
|
MB_FDMOV:
|
|
PUSH BC
|
|
MB_FDMOV1:
|
|
LD A, (HL)
|
|
LD (DE), A
|
|
INC HL
|
|
INC DE
|
|
DEC BC
|
|
LD A, B
|
|
OR C
|
|
JP NZ, MB_FDMOV1
|
|
POP BC
|
|
RET
|
|
MB_FILOFV:
|
|
POP AF
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
LD B, H
|
|
LD C, L
|
|
CALL MB_CMPFPS
|
|
JP Z, MB_DERFOV1
|
|
CALL MB_SETFPI
|
|
LD HL, 0xb1
|
|
ADD HL, BC
|
|
ADD HL, DE
|
|
POP AF
|
|
LD (HL), A
|
|
PUSH AF
|
|
LD HL, NMLOFS ;0+NMLOFS - Set up [H, L] to point at print posit
|
|
ADD HL, BC
|
|
LD D, (HL)
|
|
LD (HL), 0x0
|
|
CP ASCII_CR
|
|
JP Z, MB_FISCR
|
|
ADD A, 0xe0
|
|
LD A, D
|
|
ADC A, 0x0
|
|
LD (HL), A
|
|
MB_FISCR:
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
RET
|
|
|
|
MB_DERFOV1:
|
|
JP MB_DERFOV
|
|
|
|
MB_FILIFV:
|
|
PUSH DE
|
|
CALL MB_CMPFBC
|
|
JP Z, MB_DERFOV1
|
|
CALL MB_SETFPI
|
|
LD HL, FD.DAT-1 ;0+FD.DAT-1 - Point to data
|
|
ADD HL, BC
|
|
ADD HL, DE
|
|
LD A, (HL)
|
|
OR A
|
|
POP DE
|
|
POP HL
|
|
POP BC
|
|
RET
|
|
MB_GETFSZ:
|
|
LD HL, FD.SIZ ;0+FD.SIZ - Point to record size
|
|
JP MB_GETFP1
|
|
MB_GETFPS:
|
|
LD HL, FD.OPS ;0+FD.OPS - Point to output position
|
|
MB_GETFP1:
|
|
ADD HL, BC
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
RET
|
|
MB_SETFPI:
|
|
INC DE
|
|
MB_SETFPS:
|
|
LD HL, FD.OPS ;0+FD.OPS - Point to output position
|
|
ADD HL, BC
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
RET
|
|
MB_CMPFBC:
|
|
LD B, H
|
|
LD C, L
|
|
MB_CMPFPS:
|
|
CALL MB_GETFPS
|
|
PUSH DE
|
|
CALL MB_GETFSZ
|
|
EX DE, HL
|
|
POP DE
|
|
CALL MB_DCOMPR
|
|
RET
|
|
MB_PROSAV:
|
|
CALL MB_CHRGTR
|
|
LD (MB_TEMP), HL
|
|
CALL MB_SCCPTR
|
|
CALL MB_PENCOD
|
|
LD A, 0xfe
|
|
CALL MB_BINPSV
|
|
CALL MB_PDECOD
|
|
JP MB_GTMPRT
|
|
MB_PENCOD:
|
|
LD BC, 0xd0b ;0+N1+N2*256 - Initialize both counters
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
EX DE, HL
|
|
MB_ENCDBL:
|
|
LD HL, (MB_VARTAB)
|
|
CALL MB_DCOMPR
|
|
RET Z
|
|
LD HL, MB_ATNCON
|
|
LD A, L
|
|
ADD A, C
|
|
LD L, A
|
|
LD A, H
|
|
ADC A, 0x0
|
|
LD H, A
|
|
LD A, (DE)
|
|
SUB B
|
|
XOR (HL)
|
|
PUSH AF
|
|
LD HL, MB_SINCON
|
|
LD A, L
|
|
ADD A, B
|
|
LD L, A
|
|
LD A, H
|
|
ADC A, 0x0
|
|
LD H, A
|
|
POP AF
|
|
XOR (HL)
|
|
ADD A, C
|
|
LD (DE), A
|
|
INC DE
|
|
DEC C
|
|
JP NZ, MB_CNTZER
|
|
LD C, N1
|
|
MB_CNTZER:
|
|
DEC B
|
|
JP NZ, MB_ENCDBL
|
|
LD B, N2
|
|
JP MB_ENCDBL
|
|
MB_PDECOD:
|
|
LD BC, 0xd0b ;N1+N2*256
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
EX DE, HL
|
|
MB_DECDBL:
|
|
LD HL, (MB_VARTAB)
|
|
CALL MB_DCOMPR
|
|
RET Z
|
|
LD HL, MB_SINCON
|
|
LD A, L
|
|
ADD A, B
|
|
LD L, A
|
|
LD A, H
|
|
ADC A, 0x0
|
|
LD H, A
|
|
LD A, (DE)
|
|
SUB C
|
|
XOR (HL)
|
|
PUSH AF
|
|
LD HL, MB_ATNCON
|
|
LD A, L
|
|
ADD A, C
|
|
LD L, A
|
|
LD A, H
|
|
ADC A, 0x0
|
|
LD H, A
|
|
POP AF
|
|
XOR (HL)
|
|
ADD A, B
|
|
LD (DE), A
|
|
INC DE
|
|
DEC C
|
|
JP NZ, MB_CNTZR2
|
|
LD C, N1
|
|
MB_CNTZR2:
|
|
DEC B
|
|
JP NZ, MB_DECDBL
|
|
LD B, N2
|
|
JP MB_DECDBL
|
|
MB_PRODIR:
|
|
PUSH HL
|
|
LD HL, (MB_CURLIN) ;= 65534
|
|
LD A, H
|
|
AND L
|
|
POP HL
|
|
INC A
|
|
RET NZ
|
|
|
|
MB_PROCHK:
|
|
PUSH AF
|
|
LD A, (MB_PROFLG)
|
|
OR A
|
|
JP NZ, MB_FCERR
|
|
POP AF
|
|
RET
|
|
|
|
MB_RECORD:
|
|
DW 0x00
|
|
MB_LBUFF:
|
|
DW 0x00
|
|
MB_PBUFF:
|
|
DW 0x00
|
|
MB_PGTFLG:
|
|
DB 00h
|
|
MB_INITSA:
|
|
CALL MB_NODSKS
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
DEC HL
|
|
LD (HL), 0x0
|
|
LD HL, (MB_CPMFIL)
|
|
LD A, (HL)
|
|
OR A
|
|
JP NZ, MB_LRUN
|
|
JP MB_READY
|
|
|
|
MB_DSKDAT:
|
|
DW 0x00
|
|
|
|
; ---------------------------------------------------
|
|
; Entry point to init Basic
|
|
; ---------------------------------------------------
|
|
MB_INIT:
|
|
LD HL, MB_TSTACK ; Setup temp stack
|
|
LD SP, HL
|
|
; Initialize protect flag
|
|
XOR A
|
|
LD (MB_PROFLG), A
|
|
LD (MB_TOPMEM), HL ;= 60A3h
|
|
LD SP, HL
|
|
LD HL, MB_RST_INP
|
|
LD (HL), ':'
|
|
CALL MB_STKINI ;= ??
|
|
LD (MB_TTYPOS), A
|
|
LD (MB_SAVSTK), HL
|
|
; Get Console status address
|
|
LD HL, (WARM_BOOT_ADDR)
|
|
LD BC, 0x4
|
|
ADD HL, BC ; HL = PTR to CSTS address
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL) ; DE -> CSTS
|
|
EX DE, HL
|
|
LD (CTC_ADDR3), HL ; Ctrl+C chk
|
|
LD (CTC_ADDR1), HL ; Save
|
|
LD (CTC_ADDR2), HL ; Fast Ctrl+C Chk
|
|
EX DE, HL
|
|
; Get Console Input address
|
|
INC HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (CI_ADDR), HL ; Console input call address
|
|
; Get CO address
|
|
EX DE, HL
|
|
INC HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (CO_ADDR), HL ; Console output call address
|
|
;
|
|
EX DE, HL
|
|
INC HL
|
|
INC HL
|
|
LD E, (HL)
|
|
INC HL
|
|
LD D, (HL)
|
|
EX DE, HL
|
|
LD (LPTO_ADDR), HL
|
|
|
|
; Check CP/M Version Number
|
|
LD C, C.VER
|
|
CALL BDOS_ENTER ;= ??
|
|
LD (MB_CPMVRN), A
|
|
OR A
|
|
LD HL, 0x1514 ;21*256+20+0 - 1.x Read / Write
|
|
JP Z, MB_CPM_VR1
|
|
MB_CPM_VR2:
|
|
LD HL, 0x2221 ;34*256+33+0 - 2.x Read / Write
|
|
MB_CPM_VR1:
|
|
LD (MB_CPMREA), HL
|
|
LD HL, 65534 ;SAY INITIALIZATION IS EXECUTING
|
|
LD (MB_CURLIN), HL ;= 65534
|
|
XOR A
|
|
LD (MB_CNTOFL), A
|
|
LAB_ram_5f3c:
|
|
LD (MB_ENDBUF), A
|
|
LD (MB_CHNFLG), A
|
|
LD (MB_MRGFLG), A
|
|
LD (MB_ERRFLG), A
|
|
LD HL, 0
|
|
LD (MB_LPTPOS), HL
|
|
LD HL, 128
|
|
LD (MB_MAXREC), HL
|
|
LD HL, MB_TEMPST
|
|
LD (MB_TEMPPT), HL
|
|
LD HL, MB_PRMSTK
|
|
LD (MB_PRMPRV), HL
|
|
LD HL, (BDOS_ENTER_ADDR)
|
|
LD (MB_MEMSIZ), HL
|
|
|
|
; ---------------------------------------------------
|
|
; THE FOLLOWING CODE SCANS A CP/M COMMAND LINE FOR BASIC.
|
|
; THE FORMAT OF THE COMMAND IS:
|
|
; BASIC <FILE NAME>[/M:<TOPMEM>][/F:<FILES>]
|
|
; ---------------------------------------------------
|
|
LD A, 0x3
|
|
LD (MB_MAXFIL), A
|
|
LD HL, MB_ZEROB
|
|
LD (MB_CPMFIL), HL
|
|
LD A, (MB_COMAGN)
|
|
OR A
|
|
JP NZ, MB_ERRCMD
|
|
LAB_ram_5f78:
|
|
INC A
|
|
LAB_ram_5f79:
|
|
LD (MB_COMAGN), A
|
|
LAB_ram_5f7c:
|
|
LD HL, DMA_BUFFER
|
|
LD A, (HL)
|
|
OR A
|
|
LD (MB_CPMFIL), HL
|
|
JP Z, MB_ERRCMD
|
|
LD B, (HL)
|
|
INC HL
|
|
MB_TBFLP:
|
|
LD A, (HL) ;get DB from buffer
|
|
DEC HL
|
|
LD (HL), A
|
|
INC HL
|
|
INC HL
|
|
DEC B
|
|
JP NZ, MB_TBFLP
|
|
DEC HL
|
|
MB_ENDCMD:
|
|
LD (HL), 0x0
|
|
LD (MB_CPMFIL), HL
|
|
LD HL, DMA_BUFFER - 1
|
|
CALL MB_CHRGTR
|
|
OR A
|
|
JP Z, MB_ERRCMD
|
|
CP SWTCHR
|
|
JP Z, MB_FNDSLH
|
|
DEC HL
|
|
LD (HL), '"'
|
|
LD (MB_CPMFIL), HL
|
|
INC HL
|
|
|
|
MB_ISSLH:
|
|
CP SWTCHR
|
|
JP Z, MB_FNDSLH
|
|
CALL MB_CHRGTR
|
|
OR A
|
|
JP NZ, MB_ISSLH
|
|
JP MB_ERRCMD
|
|
|
|
MB_FNDSLH:
|
|
LD (HL), 0x0
|
|
CALL MB_CHRGTR
|
|
|
|
MB_SCANS1:
|
|
CALL MB_MAKUPL
|
|
CP 'S' ; IS IT /S: ? (SET MAX RECORD SIZE)
|
|
JP Z, MB_WASS
|
|
CP 'M' ; MEMORY OPTION
|
|
PUSH AF
|
|
JP Z, MB_WASM
|
|
CP 'F' ; FILES OPTION
|
|
JP NZ, MB_SNERR
|
|
|
|
MB_WASM:
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB ':'
|
|
CALL MB_CNSGET
|
|
POP AF
|
|
JP Z, MB_MEM
|
|
LD A, D
|
|
OR A
|
|
JP NZ, MB_FCERR
|
|
LD A, E
|
|
CP 16
|
|
JP NC, MB_FCERR
|
|
LD (MB_MAXFIL), A
|
|
JP MB_FOK
|
|
|
|
MB_MEM:
|
|
EX DE, HL
|
|
LD (MB_MEMSIZ), HL
|
|
EX DE, HL
|
|
|
|
MB_FOK:
|
|
DEC HL
|
|
CALL MB_CHRGTR
|
|
JP Z, MB_ERRCMD
|
|
CALL MB_SYNCHR
|
|
CPL
|
|
JP MB_SCANS1
|
|
|
|
MB_WASS:
|
|
CALL MB_CHRGTR
|
|
CALL MB_SYNCHR
|
|
DB ':'
|
|
CALL MB_CNSGET
|
|
EX DE, HL
|
|
LD (MB_MAXREC), HL
|
|
EX DE, HL
|
|
JP MB_FOK
|
|
|
|
MB_ZEROB:
|
|
DB 0
|
|
|
|
MB_COMAGN:
|
|
DB 0
|
|
|
|
MB_ERRCMD:
|
|
DEC HL
|
|
LD HL, (MB_MEMSIZ)
|
|
DEC HL
|
|
LD (MB_MEMSIZ), HL
|
|
DEC HL
|
|
PUSH HL ; MB_STACK-1
|
|
|
|
; ---------------------------------------------------
|
|
; DISK INITIALIZATION ROUTINE
|
|
; SETUP FILE INFO BLOCKS
|
|
; THE NUMBER OF EACH AND INFORMATION FOR
|
|
; GETTING TO POINTERS TO EACH IS STORED. NO LOCATIONS ARE
|
|
; INITIALIZED, THIS IS DONE BY NODSKS, FIRST CLOSING ALL FILES.
|
|
; THE NUMBER OF FILES IS THE FILE POINTER TABLE
|
|
; ---------------------------------------------------
|
|
|
|
LD A, (MB_MAXFIL)
|
|
LD HL, MB_DSKDAT
|
|
LD (MB_FILPT1), HL
|
|
LD DE, MB_FILPTR
|
|
LD (MB_MAXFIL), A
|
|
INC A
|
|
LD BC, DBLK.C ; DBLK.C SIZE OF A FILE INFO BLOCK PLUS $CODE
|
|
|
|
MB_LOPFLB:
|
|
EX DE, HL
|
|
LD (HL), E
|
|
INC HL
|
|
LD (HL), D
|
|
INC HL
|
|
EX DE, HL
|
|
ADD HL, BC
|
|
|
|
PUSH HL
|
|
LD HL, (MB_MAXREC)
|
|
LD BC, FNZBLK ;x FNZBLK
|
|
ADD HL, BC
|
|
LD B, H
|
|
LD C, L
|
|
POP HL ; =>MB_STACK-2
|
|
DEC A
|
|
JP NZ, MB_LOPFLB
|
|
|
|
MB_HAVFNS:
|
|
INC HL
|
|
LD (MB_TXTTAB), HL ;= 6040h
|
|
LD (MB_SAVSTK), HL
|
|
POP DE
|
|
LD A, E
|
|
SUB L
|
|
LD L, A
|
|
LD A, D
|
|
SBC A, H
|
|
LD H, A
|
|
JP C, MB_OMERR
|
|
LD B, 0x3
|
|
MB_SHFLF3:
|
|
OR A
|
|
LD A, H
|
|
RRA
|
|
LD H, A
|
|
LD A, L
|
|
RRA
|
|
LD L, A
|
|
DEC B
|
|
JP NZ, MB_SHFLF3
|
|
LD A, H
|
|
CP 2
|
|
JP C, MB_SMLSTK
|
|
LD HL, 512
|
|
|
|
; SUBTRACT STACK SIZE FROM TOP MEM
|
|
MB_SMLSTK:
|
|
LD A, E
|
|
SUB L
|
|
LD L, A
|
|
LD A, D
|
|
SBC A, H
|
|
LD H, A
|
|
JP C, MB_OMERR
|
|
LD (MB_MEMSIZ), HL
|
|
EX DE, HL
|
|
LD (MB_TOPMEM), HL ;= 60A3h
|
|
LD (MB_FRETOP), HL
|
|
LD SP, HL
|
|
LD (MB_SAVSTK), HL
|
|
LD HL, (MB_TXTTAB) ;= 6040h
|
|
EX DE, HL
|
|
CALL MB_REASON
|
|
LD A, L
|
|
SUB E
|
|
LD L, A
|
|
LD A, H
|
|
SBC A, D
|
|
LD H, A
|
|
DEC HL
|
|
DEC HL
|
|
PUSH HL
|
|
LD HL, MB_HEDING ;= "\r\nBASIC-80 R.5/240\r\n"
|
|
|
|
CALL MB_STROUT
|
|
POP HL
|
|
CALL MB_LINPTR
|
|
LD HL, MB_WORDS ;= " Bytes free"
|
|
CALL MB_STROUT
|
|
LD HL, MB_STROUT
|
|
LD (MB_REPINI+1), HL
|
|
CALL MB_CRDO
|
|
LD HL, MB_READYR
|
|
JP MB_INITSA
|
|
|
|
MB_AUTTXT:
|
|
DB "\r\n\nOwned by Microsoft\r\n", 0
|
|
MB_WORDS:
|
|
DB " Bytes free", 0
|
|
|
|
MB_HEDING:
|
|
DB "BASIC-80 Rev. 5.21\r\n[CP/M Version]\r\n"
|
|
DB "Copyright 1977-1981 (C) by Microsoft\r\n"
|
|
DB "Created: 28-Jul-81\r\n"
|
|
DB 0, 0, 0, 0, 0, 0, 0, 0
|
|
|
|
MB_TSTACK EQU $+63
|