Home of the original IBM PC emulator for browsers.
[PCjs Machine "ibm5170"]
Waiting for machine "ibm5170" to load....
MVP-FORTH (Mountain View Press Public Domain FORTH) is the programming
language FORTH intended primarily for advanced FORTH programmers on the
college or graduate level. This program was developed to accompany the
book ``Starting Forth,'' by Leo Brodie. This program is an
interpreter, not a compiler and, as such, will not create stand alone
EXE files.
Disk No 31
Program Title: MVP-FORTH
PC-SIG version 2.1
This disk contains the Mountain View Press Public Domain FORTH language.
For documentation refer to the book "Starting Forth" by Leo Brodie.
MVPFORTH is a fully executable FORTH compiler that can be either started
from DOS or booted from scratch. This system requires familarity with the
FORTH language.
Usage: For Advanced FORTH programmers, college or graduate
level.
System Requirements: 64K, 1 disk drive and monochrome display.
How to Start: To read the documentation enter TYPE MVPFORTH.DOC and
press <ENTER>. The documentation refers to the book "Starting Forth", and
it is a good idea to have a copy on hand.
File Descriptions:
MVPFORTH ASM Assembly language source for MVPFORTH
MVPFORTH EXE Executable FORTH - type MVPFORTH to start from DOS
MVPFORTH DOC Where to look for documentation - "Starting Forth"
PC-SIG
1030D E Duane Avenue
Sunnyvale Ca. 94086
(408) 730-9291
(c) Copyright 1987 PC-SIG Inc.
╔═════════════════════════════════════════════════════════════════════════╗
║ <<<< Disk #31 MVP FORTH >>>> ║
╠═════════════════════════════════════════════════════════════════════════╣
║ To read the documentation enter TYPE MVPFORTH.DOC and (press enter) ║
║ The documentation refers to the book "Starting Forth", and it is ║
║ a good idea to have a copy on hand. ║
║ ║
║ To copy the documentation to your printer type: ║
║ COPY MVPFORTH.DOC PRN and (press enter) ║
╚═════════════════════════════════════════════════════════════════════════╝
PAGE 60,96
TITLE 'MVPFORTH VERSION 1.0405.03 - 21 APRIL 83'
;
; MVPFORTH KERNEL VERSION 1.0405.03
;
; A FORTH OPERATING SYSSTEM
;
; FORTH THE IBM PERSONAL COMPUTER
;
;
; PREPARED FOR
;
; MOUNTAIN VIEW PRESS, INC.
; PO BOX 4656
; MOUNTAIN VIEW, CA 94040
;
; IMPLEMENTATION BY
;
; HAYDON ENTERPRISES
; BOX 429 ROUTE 2
; LA HONDA, CA 94020
;
;
;THIS PUBLICATION IS PLACED IN THE PUBLIC
;DOMAIN. PERMISSION TO DISTRIBUTE IS GRANTED
;BY THE INCLUSION OF CREDIT TO MOUNTAIN VIEW
;PRESS, INC., AND HAYDON ENTERPRISES.
;
;
;THIS IMPLEMENTATION INCLUDES THE ENTIRE
;FORTH-79 REQUIRED WORD SET. THE BOOK
;"ALL ABOUT FORTH" BY GLEN B. HAYDON FULLY
;DOCUMENTS MVPFORTH. IT IS AVAILABLE FROM
;MOUNTAIN VIEW PRESS, INC.
;
;THE IMPLEMENTATION HAS BEEN TRANSCRIBED FROM
;THE ORIGINAL CROSS COMPILER VER. 1.0000.02 .
;IT WILL ASSEMBLE WITH "MASM.COM" UNDER MDOS
;VER. 1.0 OR 1.1 .
;
;UPDATE: ?STACK, BUFFER, COLD, LIST
;20 FEB 1983
;THE PUBLISHED MVP-FORTH SOURCE LISTING FOR
;THE IBM - PC HAS BEEN EDITED. THE DELETED
;PORTIONS HAVE BEEN COMMENTED OUT, AND THE
;NEW PORTIONS HAVE BEEN LABELED " ; 1.0405.03".
;21 APRIL 1983
PAGE
;
;THE FORTH REGISTERS ARE ASSIGNED ACCORDING
;TO FIG-FORTH FOR THE 8086/88, VERSION 1.0,
;AS IMPLEMENTED BY THOMAS NEWMAN, 27444
;BERENDA WAY, HAYWARD, CA 94544, AND MADE
;AVAILABLE BY THE FORTH INTEREST GROUP,
;BOX 1105, SAN CARLOS, CA 94070.
;
;FORTH REGISTERS
;
;FORTH 8088 FORTH PRESERVATION RULES
;
; IP SI INTERPRETER POINTER.
; MUST BE PRESERVED
; ACROSS FORTH WORDS.
;
; W DX WORKING REGISTER.
; JUMP TO 'DPUSH' WILL
; PUSH CONTENTS ONTO THE
; PARAMETER STACK BEFORE
; EXECUTING 'APUSH'.
;
; SP SP PARAMETER STACK POINTER.
; MUST BE PRESERVED ACROSS
; FORTH WORDS. THIS IS ALSO
; THE SYSTEM STACK, WHICH
; IS SOMETIMES CALLED THE
; HARDWARE STACK -HS .
;
; RP BP RETURN STACK POINTER.
; MUST BE PRESERVED ACROSS
; FORTH WORDS.
;
;
;IN ADDITION, THE 8088 CODE SEGMENT, DATA
;SEGMENT AND STACK SEGMENT REGISTERS ( CS,
;DS, AND SS, MUST BE PRESERVED ACROSS
;FORTH WORDS.
;
;THE OTHER REGISTERS OF THE 8088 CPU MAY
;BE USED FREELY.
;
;10 AUGUST 1982
PAGE
;
; EQUATES:
;
ABL EQU 20H
ACR EQU 0DH
AMINUS EQU 2DH
ADOT EQU 2EH
BELL EQU 07H
ALF EQU 0AH
FFEED EQU 0CH
ADEL EQU 7FH
ADLE EQU 10H
BSOUT EQU 08H
BSIN EQU 08H
;
;
;
BPS EQU 80H
EM EQU 6000H
HDBT EQU 404H
NBUF EQU 02H
BUF1 EQU EM-HDBT*NBUF
US EQU 52H
INITR0 EQU BUF1-US
RTS EQU 0A0H
INITSP0 EQU INITR0-RTS
;
STACK SEGMENT PARA STACK
DB 200H DUP( 0 )
STACK ENDS
;
FSEG SEGMENT COMMON
ASSUME CS:FSEG,SS:STACK,DS:FSEG,ES:FSEG
PAGE
;
ORG 100H
;
ORIG: MOV AX,CS
MOV DS,AX
MOV SS,AX
MOV ES,AX
MOV SI,TCOLD
MOV SP,INITUSER
MOV BP,RPP
JMP NEXT
TCOLD DW TCOLD1
TCOLD1 DW COLD
;
;
INITFORTH DW RBRAC-4
INITUSER DW INITSP0
;
DW INITR0
DW INITSP0
DW 01FH
DW 01H
;
;
INITFENCE DW RBRAC-4
INITDP DW RBRAC+0CH
INITVOCLINK DW FORTH+6
;
;
DW ADFIND
DW AQTERM
DW AABORT
DW ABLOCK
DW ACRA
DW AEMIT
DW AEXPECT
DW AINTER
DW AKEY
DW ALOAD
DW ANUM
DW APAGE
DW ARSLW
DW ATSCALC
DW AV79
DW AWORD
UP DW INITR0
RPP DW INITR0
;
;
;
PAGE
;
;
;
DPUSH: PUSH DX
APUSH: PUSH AX
NEXT: MOV AX,[SI]
INC SI
INC SI
MOV BX,AX
NEXT1: MOV DX,BX
INC DX
JMP WORD PTR [BX]
;
;
;
DP0 DB 81H ; STORE
DB '!'+80H
DW 0
STORE DW $+2
POP BX
POP AX
MOV [BX],AX
JMP NEXT
;
DB 82H ; STOREL
DB '!'
DB 'L'+80H
DW STORE-4
STOREL DW $+2
POP BX
POP DS
POP AX
MOV [BX],AX
MOV BX,CS
MOV DS,BX
JMP NEXT
;
DB 81H ; #
DB '#'+80H
DW STOREL-5
DIG DW DOCOL
DW BASE
DW ATT
DW MSMOD
DW ROT
DW LIT
DW 9
DW OVER
DW LESS
DW ZBRAN
DW OFFSET DIG1-$
DW LIT
DW 7
DW PLUS
DIG1 DW LIT
DW 30H
DW PLUS
DW HOLD
DW EXIT
;
DB 82H ; #>
DB '#'
DB '>'+80H
DW DIG-4
EDIGS DW DOCOL
DW DDROP
DW HLD
DW ATT
DW PAD
DW OVER
DW SUBB
DW EXIT
;
DB 85H ; #BUFF
DB '#BUF'
DB 'F'+80H
DW EDIGS-5
NOBUF DW DOCON
DW NBUF
;
DB 82H ; #S
DB '#'
DB 'S'+80H
DW NOBUF-8
DIGS DW DOCOL
DIGS1 DW DIG
DW DDUP
DW ORR
DW NOTT
DW ZBRAN
DW OFFSET DIGS1-$
DW EXIT
;
DB 0C1H ; '
DB 0A7H
DW DIGS-5
TICK DW DOCOL
DW DFIND
DW NOTT
DW AABORTQ
DB 09H
DB 'NOT FOUND'
DW DROP
DW LITER
DW EXIT
;
DB 86H ; '-FIND
DB 27H,'-FIN'
DB 'D'+80H
DW TICK-4
TDFIND DW DOUSE
DW 16H
;
DB 8AH ; '?TERMINAL
DB 27H,'?TERMINA'
DB 'L'+80H
DW TDFIND-9
TQTERM DW DOUSE
DW 18H
;
DB 86H ; 'ABORT
DB 27H,'ABOR'
DB 'T'+80H
DW TQTERM-0DH
TABORT DW DOUSE
DW 1AH
;
DB 86H ; 'BLOCK
DB 27H,'BLOC'
DB 'K'+80H
DW TABORT-9
TBLOCK DW DOUSE
DW 1CH
;
DB 83H ; 'CR
DB 27H,'C'
DB 'R'+80H
DW TBLOCK-9
TCR DW DOUSE
DW 1EH
;
DB 85H ; 'EMIT
DB 27H,'EMI'
DB 'T'+80H
DW TCR-6
TEMIT DW DOUSE
DW 20H
;
DB 87H ; 'EXPECT
DB 27H,'EXPEC'
DB 'T'+80H
DW TEMIT-8
TEXPECT DW DOUSE
DW 22H
;
DB 8AH ; 'INTERPRET
DB 27H,'INTERPRE'
DB 'T'+80H
DW TEXPECT-0AH
TINTER DW DOUSE
DW 24H
;
DB 84H ; 'KEY
DB 27H,'KE'
DB 'Y'+80H
DW TINTER-0DH
TKEY DW DOUSE
DW 26H
;
DB 85H ; 'LOAD
DB 27H,'LOA'
DB 'D'+80H
DW TKEY-7
TLOAD DW DOUSE
DW 28H
;
DB 87H ; 'NUMBER
DB 27H,'NUMBE'
DB 'R'+80H
DW TLOAD-8
TNUM DW DOUSE
DW 2AH
;
DB 85H ; 'PAGE
DB 27H,'PAG'
DB 'E'+80H
DW TNUM-0AH
TPAGE DW DOUSE
DW 2CH
;
DB 84H ; 'R/W
DB 27H,'R/'
DB 'W'+80H
DW TPAGE-8
TRSLW DW DOUSE
DW 2EH
;
DB 87H ; 'STREAM
DB 27H,'STREA'
DB 'M'+80H
DW TRSLW-7
TSTREAM DW DOCOL
DW BLK
DW ATT
DW QDUP
DW ZBRAN
DW TSTRM1-$
DW BLOCK
DW BRAN
DW TSTRM2-$
TSTRM1 DW TIB
DW ATT
TSTRM2 DW TOIN
DW ATT
DW PLUS
DW EXIT
;
DB 88H ; 'T&SCALC
DB 27H,'T&SCAL'
DB 'C'+80H
DW TSTREAM-0AH
TTSCALC DW DOUSE
DW 30H
;
DB 8BH ; 'VOCABULARY
DB 27H,'VOCABULAR'
DB 'Y'+80H
DW TTSCALC-0BH
TVOCAB DW DOUSE
DW 32H
;
DB 85H ; 'WORD
DB 27H,'WOR'
DB 'D'+80H
DW TVOCAB-0EH
TWORD DW DOUSE
DW 34H
;
DB 0C1H ; (
DB '('+80H
DW TWORD-8
PAREN DW DOCOL
DW LIT
DW 0FFFFH
DW TOIN
DW PSTOR
DW LIT
DW 29H
DW WORDD
DW CAT
DW ONEP
DW HERE
DW PLUS
DW CAT
DW LIT
DW 29H
DW EQUAL
DW NOTT
DW QSTREAM
DW EXIT
;
DB 81H ; *
DB '*'+80H
DW PAREN-4
STAR DW DOCOL
DW USTAR
DW DROP
DW EXIT
;
DB 82H ; */
DB '*'
DB '/'+80H
DW STAR-4
SSLA DW DOCOL
DW SSMOD
DW SWAP
DW DROP
DW EXIT
;
DB 85H ; */MOD
DB '*/MO'
DB 'D'+80H
DW SSLA-5
SSMOD DW DOCOL
DW TOR
DW MSTAR
DW FROMR
DW MSLAS
DW EXIT
;
DB 81H ; +
DB '+'+80H
DW SSMOD-8
PLUS DW $+2
POP AX
POP BX
ADD AX,BX
JMP APUSH
;
DB 82H ; +STORE
DB '+'
DB '!'+80H
DW PLUS-4
PSTOR DW $+2
POP BX
POP AX
ADD [BX],AX
JMP NEXT
;
DB 82H ; +-
DB '+'
DB '-'+80H
DW PSTOR-5
PM DW DOCOL
DW ZLESS
DW ZBRAN
DW OFFSET PM1-$
DW NEG
PM1 DW EXIT
;
DB 84H ; +BUF
DB '+BU'
DB 'F'+80H
DW PM-5
PBUF DW DOCOL
DW LIT
DW HDBT
DW PLUS
DW DUPP
DW LIMIT
DW EQUAL
DW ZBRAN
DW OFFSET PBUF1-$
DW DROP
DW FIRST
PBUF1 DW DUPP
DW PREV
DW ATT
DW SUBB
DW EXIT
;
DB 0C5H ; +LOOP
DB '+LOO'
DB 'P'+80H
DW PBUF-7
PLOOP DW DOCOL
DW LIT
DW 3
DW QPAIR
DW COMP
DW APLOOP
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 81H ; ,
DB ','+80H
DW PLOOP-8
COMMA DW DOCOL
DW HERE
DW STORE
DW TWO
DW ALLOT
DW EXIT
;
DB 81H ; -
DB '-'+80H
DW COMMA-4
SUBB DW $+2
POP DX
POP AX
SUB AX,DX
JMP APUSH
;
DB 85H ; -FIND
DB '-FIN'
DB 'D'+80H
DW SUBB-4
DFIND DW DOCOL
DW TDFIND
DW ATT
DW EXEC
DW EXIT
;
DB 89H ; -TRAILING
DB '-TRAILIN'
DB 'G'+80H
DW DFIND-8
DTRAI DW DOCOL
DW DUPP
DW ZERO
DW ADO
DTRAI1 DW DDUP
DW PLUS
DW ONEM
DW CAT
DW BLL
DW SUBB
DW ZBRAN
DW OFFSET DTRAI2-$
DW LEAVE
DW BRAN
DW OFFSET DTRAI3-$
DTRAI2 DW ONEM
DTRAI3 DW ALOOP
DW OFFSET DTRAI1-$
DW EXIT
;
DB 81H ; .
DB '.'+80H
DW DTRAI-0CH
DOT DW DOCOL
DW STOD
DW DDOT
DW EXIT
;
DB 0C2H ; ."
DB '.'
DB '"'+80H
DW DOT-4
DOTQ DW DOCOL
DW TSTREAM
DW CAT
DW LIT
DW 22H
DW EQUAL
DW ZBRAN
DW OFFSET DOTQ1-$
DW ONE
DW TOIN
DW PSTOR
DW BRAN
DW OFFSET DOTQ2-$
DOTQ1 DW LIT
DW 22H
DW STATE
DW ATT
DW ZBRAN
DW OFFSET DOTQ3-$
DW COMP
DW ADOTQ
DOTQ3 DW WORDD
DW DUPP
DW CAT
DW ONEP
DW OVER
DW PLUS
DW CAT
DW LIT
DW 22H
DW EQUAL
DW NOTT
DW QSTREAM
DW STATE
DW ATT
DW ZBRAN
DW OFFSET DOTQ4-$
DW CAT
DW ONEP
DW ALLOT
DW BRAN
DW OFFSET DOTQ2-$
DOTQ4 DW COUNT
DW TYPEE
DOTQ2 DW EXIT
;
DB 85H ; .LINE
DB '.LIN'
DB 'E'+80H
DW DOTQ-5
DLINE DW DOCOL
DW ALINE
DW DTRAI
DW TYPEE
DW EXIT
;
DB 82H ; .R
DB '.'
DB 'R'+80H
DW DLINE-8
DOTR DW DOCOL
DW TOR
DW STOD
DW FROMR
DW DDOTR
DW EXIT
;
DB 81H ; /
DB '/'+80H
DW DOTR-5
SLASH DW DOCOL
DW SLMOD
DW SWAP
DW DROP
DW EXIT
;
DB 0C5H ; /LOOP
DB '/LOO'
DB 'P'+80H
DW SLASH-4
UPLOOP DW DOCOL
DW LIT
DW 3
DW QPAIR
DW COMP
DW AUPLOOP
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 84H ; /MOD
DB '/MO'
DB 'D'+80H
DW UPLOOP-8
SLMOD DW DOCOL
DW TOR
DW STOD
DW FROMR
DW MSLAS
DW EXIT
;
DB 81H ; 0
DB '0'+80H
DW SLMOD-7
ZERO DW DOCON
DW 00
;
DB 82H ; 0<
DB '0'
DB '<'+80H
DW ZERO-4
ZLESS DW $+2
POP AX
OR AX,AX
MOV AX,1
JS ZLES1
DEC AX
ZLES1: JMP APUSH
;
DB 82H ; 0=
DB '0'
DB '='+80H
DW ZLESS-5
ZEQU DW DOCOL
DW NOTT
DW EXIT
;
DB 82H ; 0>
DB '0'
DB '>'+80H
DW ZEQU-5
ZGREAT DW DOCOL
DW ZERO
DW GREAT
DW EXIT
;
DB 87H ; 0BRANCH
DB '0BRANC'
DB 'H'+80H
DW ZGREAT-5
ZBRAN DW $+2
POP AX
OR AX,AX
JZ ZBRAN1
INC SI
INC SI
JMP NEXT
ZBRAN1: JMP BRAN1
;
DB 81H ; 1
DB '1'+80H
DW ZBRAN-0AH
ONE DW DOCON
DW 01
;
DB 82H ; 1+
DB '1'
DB '+'+80H
DW ONE-4
ONEP DW $+2
POP AX
INC AX
JMP APUSH
;
DB 82H ; 1-
DB '1'
DB '-'+80H
DW ONEP-5
ONEM DW $+2
POP AX
DEC AX
JMP APUSH
;
DB 81H ; 2
DB '2'+80H
DW ONEM-5
TWO DW DOCON
DW 02
;
DB 82H ; 2*
DB '2'
DB '*'+80H
DW TWO-4
TWOST DW $+2
POP AX
ADD AX,AX
JMP APUSH
;
DB 82H ; 2+
DB '2'
DB '+'+80H
DW TWOST-5
TWOP DW $+2
POP AX
INC AX
INC AX
JMP APUSH
;
DB 82H ; 2-
DB '2'
DB '-'+80H
DW TWOP-5
TWOM DW $+2
POP AX
DEC AX
DEC AX
JMP APUSH
;
DB 82H ; 2/
DB '2'
DB '/'+80H
DW TWOM-5
TWOSL DW DOCOL
DW TWO
DW SLASH
DW EXIT
;
DB 8BH ; 79-STANDARD
DB '79-STANDAR'
DB 'D'+80H
DW TWOSL-5
STAND DW DOCOL
DW EXIT
;
DB 81H ; :
DB ':'+80H
DW STAND-0EH
COLON DW DOCOL
DW SPAT
DW CSP
DW STORE
DW CURR
DW ATT
DW CONT
DW STORE
DW CREATE
DW SMUDG
DW RBRAC
DW ASCODE
DOCOL: INC DX
DEC BP
DEC BP
MOV [BP],SI
MOV SI,DX
JMP NEXT
;
DB 0C1H ; ;
DB ';'+80H
DW COLON-4
SEMI DW DOCOL
DW QCSP
DW COMP
DW EXIT
DW SMUDG
DW LBRAC
DW EXIT
;
DB 81H ; <
DB '<'+80H
DW SEMI-4
LESS DW $+2
POP DX
POP AX
MOV BX,DX
XOR BX,AX
JS LES1
SUB AX,DX
LES1: OR AX,AX
MOV AX,0
JNS LES2
INC AX
LES2: JMP APUSH
;
DB 82H ; <#
DB '<'
DB '#'+80H
DW LESS-4
BDIGS DW DOCOL
DW PAD
DW HLD
DW STORE
DW EXIT
;
DB 87H ; <+LOOP>
DB '<+LOOP'
DB '>'+80H
DW BDIGS-5
APLOOP DW $+2
POP BX
JMP ALOOP1
;
DB 87H ; <-FIND>
DB '<-FIND'
DB '>'+80H
DW APLOOP-0AH
ADFIND DW DOCOL
DW BLL
DW WORDD
DW CONT
DW ATT
DW ATT
DW AFIND
DW EXIT
;
DB 84H ; <.">
DB '<."'
DB '>'+80H
DW ADFIND-0AH
ADOTQ DW DOCOL
DW RAT
DW COUNT
DW DUPP
DW ONEP
DW FROMR
DW PLUS
DW TOR
DW TYPEE
DW EXIT
;
DB 87H ; </LOOP>
DB '</LOOP'
DB '>'+80H
DW ADOTQ-7
AUPLOOP DW $+2
POP BX
ADD [BP],BX
JB AUPLO1
MOV AX,[BP]
SUB AX,2[BP]
JNB AUPLO1
JMP BRAN1
AUPLO1: ADD BP,4H
INC SI
INC SI
JMP NEXT
;
DB 87H ; <;CODE>
DB '<;CODE'
DB '>'+80H
DW AUPLOOP-0AH
ASCODE DW DOCOL
DW FROMR
DW LATES
DW PFA
DW CFA
DW STORE
DW EXIT
;
DB 88H ; <<CMOVE>
DB '<<CMOVE'
DB '>'+80H
DW ASCODE-0AH
ADCMOVE DW $+2
MOV BX,SI
POP CX
POP DI
ADD DI,CX
DEC DI
POP SI
ADD SI,CX
DEC SI
STD
REP MOVSB
CLD
MOV SI,BX
JMP NEXT
;
DB 8BH ; <?TERMINAL> ( --- C , F )
DB '<?TERMINAL'
DB '>'+80H
DW ADCMOVE-0BH
;AQTERM DW $+2
; PUSH DS
; PUSH BX
; MOV BX,40H
; MOV DS,BX
; MOV BX,1AH
; MOV CX,[BX]
; MOV AX,CX
; MOV BX,1CH
; SUB AX,[BX]
; MOV [BX],CX
; JZ AQTER1
; MOV AX,[BX]
; MOV BX,AX
; MOV AX,[BX]
; SUB AH,AH
;AQTER1: POP BX
; POP DS
; JMP APUSH
AQTERM DW DOCOL ; 1.0405.03
DW LIT ; 1.0405.03
DW 0600H ; 1.0405.03
DW ZERO ; 1.0405.03
DW ZERO ; 1.0405.03
DW LIT ; 1.0405.03
DW 0FFH ; 1.0405.03
DW LIT ; 1.0405.03
DW 21H ; 1.0405.03
DW INTCAL ; 1.0405.03
DW LIT ; 1.0405.03
DW 0FFH ; 1.0405.03
DW ANDD ; 1.0405.03
DW EXIT ; 1.0405.03
;
DB 88H ; <ABORT">
DB '<ABORT"'
DB '>'+80H
DW AQTERM-0EH
AABORTQ DW DOCOL
DW ZBRAN
DW AABTQ1-$
DW WHERE
DW CR
DW RAT
DW COUNT
DW TYPEE
DW SPSTO
DW QUIT
DW BRAN
DW AABTQ2-$
AABTQ1 DW FROMR
DW DUPP
DW CAT
DW PLUS
DW ONEP
DW TOR
AABTQ2 DW EXIT
;
DB 87H ; <ABORT>
DB '<ABORT'
DB '>'+80H
DW AABORTQ-0BH
AABORT DW DOCOL
DW SPSTO
DW QSTAC
DW FORTH
DW DEFIN
DW QUIT
DW EXIT
;
DB 87H ; <BLOCK>
DB '<BLOCK'
DB '>'+80H
DW AABORT-0AH
ABLOCK DW DOCOL
DW OFSET
DW ATT
DW PLUS
DW TOR
DW PREV
DW ATT
DW DUPP
DW ATT
DW RAT
DW SUBB
DW TWOST
DW ZBRAN
DW OFFSET ABLOCK3-$
ABLOCK1 DW PBUF
DW NOTT
DW ZBRAN
DW OFFSET ABLOCK2-$
DW DROP
DW RAT
DW BUFFE
DW DUPP
DW RAT
DW ONE
DW RSLW
DW TWOM
ABLOCK2 DW DUPP
DW ATT
DW RAT
DW SUBB
DW TWOST
DW NOTT
DW ZBRAN
DW OFFSET ABLOCK1-$
DW DUPP
DW PREV
DW STORE
ABLOCK3 DW FROMR
DW DROP
DW TWOP
DW EXIT
;
DB 86H ; <CMOVE
DB '<CMOV'
DB 'E'+80H
DW ABLOCK-0AH
DCMOVE DW DOCOL
DW DUPP
DW ONE
DW LESS
DW ZBRAN
DW DCMOVE1-$
DW DDROP
DW DROP
DW BRAN
DW DCMOVE2-$
DCMOVE1 DW ADCMOVE
DCMOVE2 DW EXIT
;
DB 87H ; <CMOVE>
DB '<CMOVE'
DB '>'+80H
DW DCMOVE-09
ACMOVE DW $+2
CLD
MOV BX,SI
POP CX
POP DI
POP SI
MOV AX,DS
MOV ES,AX
REP MOVSB
MOV SI,BX
JMP NEXT
;
DB 84H ; <CR>
DB '<CR'
DB '>'+80H
DW ACMOVE-0AH
ACRA DW DOCOL
DW LIT
DW 0DH
DW EMIT
DW LIT
DW 0AH
DW EMIT
DW ZERO
DW OUTT
DW STORE
DW EXIT
;
DB 84H ; <DO>
DB '<DO'
DB '>'+80H
DW ACRA-7
ADO DW $+2
POP DX
POP AX
XCHG BP,SP
PUSH AX
PUSH DX
XCHG BP,SP
JMP NEXT
;
DB 86H ; <EMIT>
DB '<EMIT'
DB '>'+80H
DW ADO-7
AEMIT DW DOCOL
DW EPRINT
DW ATT
DW ZBRAN
DW OFFSET AEMIT1-$
DW DUPP
; DW ZERO
; DW ZERO
; DW ZERO
; DW LIT
; DW 17H
DW LIT ; 1.0405.03
DW 0500H ; 1.0405.03
DW ZERO ; 1.0405.03
DW ROT ; 1.0405.03
DW ZERO ; 1.0405.03
DW SWAP ; 1.0405.03
DW LIT ; 1.0405.03
DW 21H ; 1.0405.03
DW INTCAL
DW DROP
AEMIT1 DW LIT
; DW 0E00H
; DW PLUS
; DW LIT
; DW 07H
; DW ZERO
; DW ZERO
; DW LIT
; DW 10H
DW 0200H ; 1.0405.03
DW ZERO ; 1.0405.03
DW ROT ; 1.0405.03
DW ZERO ; 1.0405.03
DW SWAP ; 1.0405.03
DW LIT ; 1.0405.03
DW 21H ; 1.0405.03
DW INTCAL
DW DROP
DW ONE
DW OUTT
DW PSTOR
DW EXIT
;
DB 88H ; <EXPECT>
DB '<EXPECT'
DB '>'+80H
DW AEMIT-9
AEXPECT DW DOCOL
DW OVER
DW PLUS
DW OVER
DW ADO
AEXPEC1 DW KEY
DW DUPP
DW LIT
DW 8
DW EQUAL
DW OVER
DW LIT
DW 7FH
DW EQUAL
DW ORR
DW ZBRAN
DW OFFSET AEXPEC4-$
DW DROP
DW DUPP
DW IDO
DW EQUAL
DW DUPP
DW FROMR
DW TWOM
DW PLUS
DW TOR
DW ZBRAN
DW OFFSET AEXPEC2-$
DW LIT
DW 7
DW BRAN
DW OFFSET AEXPEC3-$
AEXPEC2 DW LIT
DW 8
DW DUPP
DW EMIT
DW LIT
DW 20H
DW EMIT
DW LIT
DW 0FFFDH
DW OUTT
DW PSTOR
AEXPEC3 DW BRAN
DW OFFSET AEXPEC7-$
AEXPEC4 DW DUPP
DW LIT
DW 0DH
DW EQUAL
DW ZBRAN
DW OFFSET AEXPEC5-$
DW LEAVE
DW DROP
DW BLL
DW ZERO
DW BRAN
DW OFFSET AEXPEC6-$
AEXPEC5 DW DUPP
AEXPEC6 DW IDO
DW CSTOR
DW ZERO
DW IDO
DW ONEP
DW STORE
AEXPEC7 DW EMIT
DW ONE
DW AUPLOOP
DW OFFSET AEXPEC1-$
DW DROP
DW EXIT
;
DB 86H ; <FILL>
DB '<FILL'
DB '>'+80H
DW AEXPECT-0BH
AFILL DW $+2
POP AX
POP CX
POP DI
MOV BX,DS
MOV ES,BX
CLD
REP STOSB
JMP NEXT
;
DB 86H ; <FIND>
DB '<FIND'
DB '>'+80H
DW AFILL-9
AFIND DW $+2
MOV AX,DS
MOV ES,AX
POP BX
POP CX
AFIND1: MOV DI,CX
MOV AL,[BX]
MOV DL,AL
XOR AL,[DI]
AND AL,3FH
JNZ AFIND3
AFIND2: INC BX
INC DI
MOV AL,[BX]
XOR AL,[DI]
ADD AL,AL
JNZ AFIND3
JNB AFIND2
ADD BX,5
PUSH BX
MOV AX,1
SUB DH,DH
JMP DPUSH
AFIND3: INC BX
JB AFIND4
MOV AL,[BX]
ADD AL,AL
JMP AFIND3
AFIND4: MOV BX,[BX]
OR BX,BX
JNZ AFIND1
MOV AX,0
JMP APUSH
;
DB 8BH ; <INTERPRET>
DB '<INTERPRET'
DB '>'+80H
DW AFIND-9
AINTER DW DOCOL
AINTER1 DW DFIND
DW ZBRAN
DW OFFSET AINTER4-$
DW STATE
DW ATT
DW LESS
DW ZBRAN
DW OFFSET AINTER2-$
DW CFA
DW COMMA
DW BRAN
DW OFFSET AINTER3-$
AINTER2 DW CFA
DW EXEC
AINTER3 DW BRAN
DW OFFSET AINTER6-$
AINTER4 DW HERE
DW NUM
DW DPL
DW ATT
DW ONEP
DW ZBRAN
DW OFFSET AINTER5-$
DW DLITE
DW BRAN
DW OFFSET AINTER6-$
AINTER5 DW DROP
DW LITER
AINTER6 DW QSTAC
DW BRAN
DW OFFSET AINTER1-$
DW EXIT
;
DB 85H ; <KEY>
DB '<KEY'
DB '>'+80H
DW AINTER-0EH
AKEY DW DOCOL
;AKEY1 DW ZERO
AKEY1 DW LIT ; 1.0405.03
DW 0700H ; 1.0405.03
DW ZERO
DW ZERO
DW ZERO
DW LIT
; DW 16H
DW 21H ; 1.0405.03
DW INTCAL
DW LIT
DW 0FFH
DW ANDD
DW DUPP
DW LIT
DW 10H
DW SUBB
DW NOTT
DW ZBRAN
DW OFFSET AKEY2-$
DW DROP
DW ONE
DW EPRINT
DW ATT
DW XORR
DW EPRINT
DW STORE
DW BRAN
DW OFFSET AKEY1-$
AKEY2 DW EXIT
;
DB 86H ; <LINE>
DB '<LINE'
DB '>'+80H
DW AKEY-8
ALINE DW DOCOL
DW BLOCK
DW SWAP
DW CSLL
DW STAR
DW PLUS
DW CSLL
DW EXIT
;
DB 86H ; <LOAD>
DB '<LOAD'
DB '>'+80H
DW ALINE-9
ALOAD DW DOCOL
DW QDUP
DW NOTT
DW AABORTQ
DB 0AH
DB 'UNLOADABLE'
DW BLK
DW ATT
DW TOR
DW TOIN
DW ATT
DW TOR
DW ZERO
DW TOIN
DW STORE
DW BLK
DW STORE
DW INTER
DW FROMR
DW TOIN
DW STORE
DW FROMR
DW BLK
DW STORE
DW EXIT
;
DB 86H ; <LOOP>
DB '<LOOP'
DB '>'+80H
DW ALOAD-9
ALOOP DW $+2
MOV BX,1H
ALOOP1: MOV CX,[BP]
ADD [BP],BX
JS ALOOP2
MOV AX,CX
AND AX,BX
JNS ALOOP3
ALOOP2: MOV AX,CX
OR AX,BX
JNS ALOOP8
ALOOP3: MOV AX,[BP]
SUB AX,2[BP]
JS ALOOP7
MOV AX,[BP]
AND AX,AX
JS ALOOP5
ALOOP4: MOV AX,BX
AND AX,AX
JNS ALOOP8
JMP BRAN1
ALOOP5: MOV AX,2[BP]
AND AX,AX
JS ALOOP4
ALOOP6: MOV AX,BX
AND AX,AX
JS ALOOP8
JMP BRAN1
ALOOP7: MOV AX,[BP]
AND AX,AX
JS ALOOP6
JMP ALOOP5
ALOOP8: ADD BP,4H
INC SI
INC SI
JMP NEXT
;
DB 88H ; <NUMBER>
DB '<NUMBER'
DB '>'+80H
DW ALOOP-9
ANUM DW DOCOL
DW ZERO
DW ZERO
DW ROT
DW DUPP
DW ONEP
DW CAT
DW LIT
DW 2DH
DW EQUAL
DW DUPP
DW TOR
DW PLUS
DW LIT
DW 0FFFFH
DW DPL
DW STORE
DW CONV
DW DUPP
DW CAT
DW BLL
DW GREAT
DW ZBRAN
DW OFFSET ANUM1-$
DW DUPP
DW CAT
DW LIT
DW 2EH
DW EQUAL
DW NOTT
DW AABORTQ
DB 0EH
DB 'NOT RECOGNIZED'
DW ZERO
DW DPL
DW STORE
DW CONV
DW DUPP
DW CAT
DW BLL
DW GREAT
DW AABORTQ
DB 0EH
DB 'NOT RECOGNIZED'
ANUM1 DW DROP
DW FROMR
DW ZBRAN
DW OFFSET ANUM2-$
DW DNEG
ANUM2 DW EXIT
;
DB 86H ; <PAGE>
DB '<PAGE'
DB '>'+80H
DW ANUM-0BH
APAGE DW DOCOL
; DW ZERO
; DW ZERO
; DW ZERO
; DW ZERO
; DW LIT
; DW 10H
; DW INTCAL
; DW DROP
DW LIT ; 1.0405.03
DW 0DH ; 1.0405.03
DW EMIT ; 1.0405.03
DW LIT ; 1.0405.03
DW 0AH ; 1.0405.03
DW EMIT ; 1.0405.03
DW EXIT
;
DB 85H ; <R/W>
DB '<R/W'
DB '>'+80H
DW APAGE-9
ARSLW DW DOCOL
DW USEE
DW ATT
DW TOR
DW ROT
DW USEE
DW STORE
DW SWAP
DW MAXDRV
DW ZERO
DW ADO
ARSLW1 DW IDO
DW DRDEN
DW DENSTY
DW STORE
DW DUPP
DW BPDRV
DW SUBB
DW LIT
DW 0FFFFH
DW GREAT
DW ZBRAN
DW ARSLW3-$
DW BPDRV
DW SUBB
DW IDO
DW ONEP
DW MAXDRV
DW EQUAL
DW ZBRAN
DW ARSLW2-$
DW FROMR
DW FROMR
DW DDROP
DW FROMR
DW USEE
DW STORE
DW ONE
DW AABORTQ
DB 12H
DB 'BLOCK OUT OF RANGE'
ARSLW2 DW BRAN
DW ARSLW4-$
ARSLW3 DW IDO
DW DRIVE
DW STORE
DW LEAVE
ARSLW4 DW ALOOP
DW ARSLW1-$
DW SPBLK
DW STAR
DW SPBLK
DW ZERO
DW ADO
ARSLW5 DW DDUP
DW TSCALC
DW ZBRAN
DW ARSLW6-$
DW SECRD
DW BRAN
DW ARSLW7-$
ARSLW6 DW SECWT
ARSLW7 DW ONEP
DW LIT
DW 404H
DW LIT
DW 4
DW SUBB
DW SPBLK
DW SLASH
DW USEE
DW PSTOR
DW ALOOP
DW ARSLW5-$
DW DDROP
DW FROMR
DW USEE
DW STORE
DW EXIT
;
DB 89H ; <T&SCALC>
DB '<T&SCALC'
DB '>'+80H
DW ARSLW-8
ATSCALC DW DOCOL
; DW SPT
; DW SLMOD
; DW TRACK
; DW STORE
; DW DEN
; DW DRIVE
; DW ATT
; DW TWOST
; DW PLUS
; DW ATT
; DW ONE
; DW EQUAL
; DW ZBRAN
; DW ATSCAL2-$
; DW LIT
; DW 08H
; DW SLMOD
; DW DRIVE
; DW ATT
; DW LIT
; DW 0FH
; DW ANDD
; DW SWAP
; DW ZBRAN
; DW ATSCAL1-$
; DW LIT
; DW 100H
; DW PLUS
;ATSCAL1 DW DRIVE
; DW STORE
;ATSCAL2 DW ONEP
DW DENSTY ; 1.0405.03
DW ATT ; 1.0405.03
DW ONE ; 1.0405.03
DW EQUAL ; 1.0405.03
DW ZBRAN ; 1.0405.03
DW ATSCAL2-$ ; 1.0405.03
DW SPT ; 1.0405.03
DW TWOST ; 1.0405.03
DW SLMOD ; 1.0405.03
DW SWAP ; 1.0405.03
DW SPT ; 1.0405.03
DW SLMOD ; 1.0405.03
DW ZBRAN ; 1.0405.03
DW ATSCAL1-$ ; 1.0405.03
DW LIT ; 1.0405.03
DW 140H ; 320 1.0405.03
DW PLUS ; 1.0405.03
ATSCAL1 DW SWAP ; 1.0405.03
DW SPT ; 1.0405.03
DW STAR ; 1.0405.03
DW PLUS ; 1.0405.03
ATSCAL2 DW SEC
DW STORE
DW EXIT
;
DB 8EH ; <VOCABULARY79>
DB '<VOCABULARY79'
DB '>'+80H
DW ATSCALC-0CH
AV79 DW DOCOL
DW CREATE
DW LIT
DW 0A081H
DW COMMA
DW LIT
DW FORTH+2
DW COMMA
DW HERE
DW VOCL
DW ATT
DW COMMA
DW VOCL
DW STORE
DW ASCODE
DOVOC DB 0E8H
DW DODOES-$-2
DW TWOP
DW CONT
DW STORE
DW EXIT
;
DB 8FH ; <VOCABULARYFIG>
DB '<VOCABULARYFIG'
DB '>'+80H
DW AV79-11H
AVFIG DW DOCOL
DW CREATE
DW LIT
DW 0A081H
DW COMMA
DW CURR
DW ATT
DW CFA
DW COMMA
DW HERE
DW VOCL
DW ATT
DW COMMA
DW VOCL
DW STORE
DW ASCODE
DB 0E8H
DW DODOES-$-2
DW TWOP
DW CONT
DW STORE
DW EXIT
;
DB 86H ; <WORD>
DB '<WORD'
DB '>'+80H
DW AVFIG-12H
AWORD DW DOCOL
DW TSTREAM
DW SWAP
DW ENCL
DW DDUP
DW GREAT
DW ZBRAN
DW OFFSET AWORD1-$
DW DDROP
DW DDROP
DW ZERO
DW HERE
DW STORE
DW BRAN
DW OFFSET AWORD2-$
AWORD1 DW TOIN
DW PSTOR
DW OVER
DW SUBB
DW DUPP
DW TOR
DW HERE
DW CSTOR
DW PLUS
DW HERE
DW ONEP
DW FROMR
DW DUPP
DW LIT
DW 0FFH
DW GREAT
DW AABORTQ
DB 0BH
DB 'INPUT > 255'
DW ONEP
DW CMOVE
AWORD2 DW HERE
DW EXIT
;
DB 81H ; =
DB '='+80H
DW AWORD-9
EQUAL DW DOCOL
DW SUBB
DW NOTT
DW EXIT
;
DB 81H ; >
DB '>'+80H
DW EQUAL-4
GREAT DW DOCOL
DW SWAP
DW LESS
DW EXIT
;
DB 83H ; >IN
DB '>I'
DB 'N'+80H
DW GREAT-4
TOIN DW DOUSE
DW 36H
;
DB 82H ; >R
DB '>'
DB 'R'+80H
DW TOIN-6
TOR DW $+2
POP BX
DEC BP
DEC BP
MOV [BP],BX
JMP NEXT
;
DB 81H ; ?
DB '?'+80H
DW TOR-5
QUES DW DOCOL
DW ATT
DW DOT
DW EXIT
;
DB 85H ; ?COMP
DB '?COM'
DB 'P'+80H
DW QUES-4
QCOMP DW DOCOL
DW STATE
DW ATT
DW NOTT
DW AABORTQ
DB 0CH
DB 'COMPILE ONLY'
DW EXIT
;
DB 8AH ; ?CONFIGURE
DB '?CONFIGUR'
DB 'E'+80H
DW QCOMP-8
QCONF DW DOCOL
DW CR
DW CR
DW MAXDRV
DW DOT
DW ADOTQ
DB 16H
DB 'DRIVES WITH DENSITIES:'
DW MAXDRV
DW ZERO
DW ADO
QCONF1 DW IDO
DW DRDEN
DW TWO
DW SPACS
DW DOT
DW ALOOP
DW QCONF1-$
DW CR
DW CR
DW ADOTQ
DB 0CH
DB 'DENSITY CODE'
DW CR
DW ADOTQ
DB 0AH
DB '0 - 5-SSDD'
DW CR
DW ADOTQ
DB 0AH
DB '1 - 5-DSDD'
DW CR
DW ADOTQ
DB 0AH
DB '2 - 8-DSSD'
DW CR
DW ADOTQ
DB 0AH
DB '3 - 8-SSDD'
DW CR
DW ADOTQ
DB 0AH
DB '4 - 8-DSDD'
DW CR
DW ADOTQ
DB 0BH
DB '5 - 8-SSEXT'
DW CR
DW ADOTQ
DB 0BH
DB '6 - 8-DSEXT'
DW CR
DW EXIT
;
DB 84H ; ?CSP
DB '?CS'
DB 'P'+80H
DW QCONF-0DH
QCSP DW DOCOL
DW SPAT
DW CSP
DW ATT
DW SUBB
DW AABORTQ
DB 17H
DB 'DEFINITION NOT FINISHED'
DW EXIT
;
DB 84H ; ?DUP
DB '?DU'
DB 'P'+80H
DW QCSP-7
QDUP DW DOCOL
DW DUPP
DW ZBRAN
DW QDUP1-$
DW DUPP
QDUP1 DW EXIT
;
DB 88H ; ?LOADING
DB '?LOADIN'
DB 'G'+80H
DW QDUP-7
QLOAD DW DOCOL
DW BLK
DW ATT
DW NOTT
DW AABORTQ
DB 0CH
DB 'LOADING ONLY'
DW EXIT
;
DB 86H ; ?PAIRS
DB '?PAIR'
DB 'S'+80H
DW QLOAD-0BH
QPAIR DW DOCOL
DW SUBB
DW AABORTQ
DB 17H
DB 'CONDITIONALS NOT PAIRED'
DW EXIT
;
DB 86H ; ?STACK
DB '?STAC'
DB 'K'+80H
DW QPAIR-9
QSTAC DW DOCOL
DW SPAT
DW SZERO
DW SWAP
DW ULESS
DW AABORTQ
DB 13H
DB 'STACK OUT OF BOUNDS'
DW SPAT
DW HERE
DW LIT
DW 80H
DW PLUS
DW ULESS
DW AABORTQ
DB 0AH
DB 'FULL STACK'
DW EXIT
;
DB 87H ; ?STREAM
DB '?STREA'
DB 'M'+80H
DW QSTAC-9
QSTREAM DW DOCOL
DW AABORTQ
DB 16H
DB 'INPUT STREAM EXHAUSTED'
DW EXIT
;
DB 89H ; ?TERMINAL
DB '?TERMINA'
DB 'L'+80H
DW QSTREAM-0AH
QTERM DW DOCOL
DW TQTERM
DW ATT
DW EXEC
DW EXIT
;
DB 81H ; @
DB '@'+80H
DW QTERM-0CH
ATT DW $+2
POP BX
MOV AX,[BX]
JMP APUSH
;
DB 82H ; @L
DB '@'
DB 'L'+80H
DW ATT-4
ATL DW $+2
POP BX
POP DS
MOV AX,[BX]
MOV BX,CS
MOV DS,BX
JMP APUSH
;
DB 85H ; ABORT
DB 'ABOR'
DB 'T'+80H
DW ATL-5
ABORT DW DOCOL
DW TABORT
DW ATT
DW EXEC
DW EXIT
;
DB 0C6H ; ABORT"
DB 'ABORT'
DB '"'+80H
DW ABORT-8
ABORTQ DW DOCOL
DW QCOMP
DW COMP
DW AABORTQ
DW TSTREAM
DW CAT
DW LIT
DW 22H
DW EQUAL
DW ZBRAN
DW ABORTQ1-$
DW ONE
DW TOIN
DW PSTOR
DW ZERO
DW CCOMM
DW BRAN
DW ABORTQ2-$
ABORTQ1 DW LIT
DW 22H
DW WORDD
DW DUPP
DW CAT
DW ONEP
DW SWAP
DW OVER
DW PLUS
DW CAT
DW LIT
DW 22H
DW EQUAL
DW NOTT
DW QSTREAM
DW ALLOT
ABORTQ2 DW EXIT
;
DB 83H ; ABS
DB 'AB'
DB 'S'+80H
DW ABORTQ-9
ABSS DW DOCOL
DW DUPP
DW PM
DW EXIT
;
DB 0C5H ; AGAIN
DB 'AGAI'
DB 'N'+80H
DW ABSS-6
AGAIN DW DOCOL
DW ONE
DW QPAIR
DW COMP
DW BRAN
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 85H ; ALLOT
DB 'ALLO'
DB 'T'+80H
DW AGAIN-8
ALLOT DW DOCOL
DW DP
DW PSTOR
DW EXIT
;
DB 83H ; AND
DB 'AN'
DB 'D'+80H
DW ALLOT-8
ANDD DW $+2
POP BX
POP AX
AND AX,BX
JMP APUSH
;
DB 85H ; APUSH
DB 'APUS'
DB 'H'+80H
DW ANDD-6
APUSHH DW DOCON
DW APUSH
;
DB 84H ; BASE
DB 'BAS'
DB 'E'+80H
DW APUSHH-8
BASE DW DOUSE
DW 38H
;
DB 0C5H ; BEGIN
DB 'BEGI'
DB 'N'+80H
DW BASE-7
BEGIN DW DOCOL
DW QCOMP
DW HERE
DW ONE
DW EXIT
;
DB 82H ; BL
DB 'B'
DB 'L'+80H
DW BEGIN-8
BLL DW DOCON
DW 20H
;
DB 85H ; BLANK
DB 'BLAN'
DB 'K'+80H
DW BLL-5
BLANK DW DOCOL
DW BLL
DW FILL
DW EXIT
;
DB 83H ; BLK
DB 'BL'
DB 'K'+80H
DW BLANK-8
BLK DW DOUSE
DW 3AH
;
DB 87H ; BLK/DRV
DB 'BLK/DR'
DB 'V'+80H
DW BLK-6
BPDR DW DOVAR
DW 0A0H
DW 140H
DW 1F4H
DW 1F4H
DW 3E8H
DW 268H
DW 4D0H
;
DB 85H ; BLOCK
DB 'BLOC'
DB 'K'+80H
DW BPDR-0AH
BLOCK DW DOCOL
DW TBLOCK
DW ATT
DW EXEC
DW EXIT
;
DB 85H ; BPDRV
DB 'BPDR'
DB 'V'+80H
DW BLOCK-8
BPDRV DW DOCOL
DW DENSTY
DW ATT
DW LIT
DW 6H
DW MIN
DW TWOST
DW BPDR
DW PLUS
DW ATT
DW EXIT
;
DB 86H ; BRANCH
DB 'BRANC'
DB 'H'+80H
DW BPDRV-8
BRAN DW $+2
BRAN1: ADD SI,[SI]
JMP NEXT
;
DB 86H ; BUFFER
DB 'BUFFE'
DB 'R'+80H
DW BRAN-9
BUFFE DW DOCOL
DW USEE
DW ATT
DW PREV
DW ATT
DW EQUAL
DW ZBRAN
DW BUFF1-$
DW USEE
DW ATT
DW PBUF
DW DROP
DW USEE
DW STORE
BUFF1 DW USEE
DW ATT
DW DUPP
DW TOR
BUFF2 DW PBUF
DW ZBRAN
DW OFFSET BUFF2-$
DW USEE
DW STORE
DW RAT
DW ATT
DW ZLESS
DW ZBRAN
DW OFFSET BUFF3-$
DW RAT
DW TWOP
DW RAT
DW ATT
DW LIT
DW 7FFFH
DW ANDD
DW ZERO
DW RSLW
BUFF3 DW RAT
DW STORE
DW RAT
DW PREV
DW STORE
DW FROMR
DW TWOP
DW EXIT
;
DB 83H ; BYE
DB 'BY'
DB 'E'+80H
DW BUFFE-9
BYE DW DOCOL
DW FREEZE
DW ZERO
DW ZERO
DW SYSCALL
DW EXIT
;
DB 82H ; CSTORE
DB 'C'
DB '!'+80H
DW BYE-6
CSTOR DW $+2
POP BX
POP AX
MOV [BX],AL
JMP NEXT
;
DB 83H ; CSTOREL
DB 'C!'
DB 'L'+80H
DW CSTOR-5
CSTORL DW $+2
POP BX
POP DS
POP AX
MOV [BX],AL
MOV BX,CS
MOV DS,BX
JMP NEXT
;
DB 82H ; C,
DB 'C'
DB ','+80H
DW CSTORL-6
CCOMM DW DOCOL
DW HERE
DW CSTOR
DW ONE
DW ALLOT
DW EXIT
;
DB 83H ; C/L
DB 'C/'
DB 'L'+80H
DW CCOMM-5
CSLL DW DOCON
DW 40H
;
DB 82H ; C@
DB 'C'
DB '@'+80H
DW CSLL-6
CAT DW $+2
POP BX
MOV AL,[BX]
SUB AH,AH
JMP APUSH
;
DB 83H ; C@L
DB 'C@'
DB 'L'+80H
DW CAT-5
CATL DW $+2
POP BX
POP DS
MOV AL,[BX]
SUB AH,AH
MOV BX,CS
MOV DS,BX
JMP APUSH
;
DB 83H ; CFA
DB 'CF'
DB 'A'+80H
DW CATL-6
CFA DW DOCOL
DW TWOM
DW EXIT
;
DB 86H ; CHANGE
DB 'CHANG'
DB 'E'+80H
DW CFA-6
CHANGE DW DOCOL
DW FREEZE
DW LIMIT
DW LIT
DW 404H
DW NOBUF
DW STAR
DW SUBB
DW DUPP
DW LIT
DW FIRST+2
DW STORE
DW LIT
DW US
DW SUBB
DW DUPP
DW LIT
DW RTS
DW SUBB
DW DUPP
DW LIT
DW INITUSER
DW STORE
DW LIT
DW INITUSER+4
DW STORE
DW DUPP
DW LIT
DW INITUSER+2
DW STORE
DW LIT
DW UP
DW OVER
DW LIT
DW RPP
DW LIT
DW ORIG
DW HERE
DW STORE
DW HERE
DW ROT
DW ROT
DW STORE
DW ROT
DW ROT
DW STORE
DW EXEC
DW EXIT
;
DB 85H ; CLEAR
DB 'CLEA'
DB 'R'+80H
DW CHANGE-9
CLEAR DW DOCOL
DW OFSET
DW ATT
DW PLUS
DW BUFFE
DW LIT
DW 400H
DW BLL
DW FILL
DW UPDAT
DW EXIT
;
DB 85H ; CMOVE
DB 'CMOV'
DB 'E'+80H
DW CLEAR-8
CMOVE DW DOCOL
DW DUPP
DW ONE
DW LESS
DW ZBRAN
DW CMOVE1-$
DW DDROP
DW DROP
DW BRAN
DW CMOVE2-$
CMOVE1 DW ACMOVE
CMOVE2 DW EXIT
;
DB 84H ; COLD
DB 'COL'
DB 'D'+80H
DW CMOVE-8
COLD DW DOCOL
DW MTBUF
DW LIT
DW INITUSER
DW LIT
DW UP
DW ATT
DW LIT
DW 6
DW PLUS
DW LIT
DW 30H
DW CMOVE
DW PAGEE
DW ADOTQ
DB 1DH
DB 'MVP-FORTH VERSION 1.0405.03'
DW CR
DW ONE
DW DENSTY
DW STORE
DW FIRST
DW USEE
DW STORE
DW FIRST
DW PREV
DW STORE
DW DR0
DW ZERO
DW EPRINT
DW STORE
DW LIT
DW INITFORTH
DW ATT
DW LIT
DW FORTH+2
DW TWOP
DW STORE
DW DEC
; DW LIT
; DW 40H
; DW LIT
; DW 40H
; DW LIT
; DW 17H
; DW STOREL
DW ABORT
DW EXIT
;
DB 87H ; COMPILE
DB 'COMPIL'
DB 'E'+80H
DW COLD-7
COMP DW DOCOL
DW QCOMP
DW FROMR
DW DUPP
DW TWOP
DW TOR
DW ATT
DW COMMA
DW EXIT
;
DB 89H ; CONFIGURE
DB 'CONFIGUR'
DB 'E'+80H
DW COMP-0AH
CONF DW DOCOL
DW QCONF
DW CR
DW ADOTQ
DB 13H
DB 'NUMBER OF DRIVES ? '
DW KEY
DW LIT
DW 31H
DW SUBB
DW DUPP
DW LIT
DW 5
DW ULESS
DW NOTT
DW AABORTQ
DB 0FH
DB 'TOO MANY DRIVES'
DW DUPP
DW LIT
DW 31H
DW PLUS
DW EMIT
DW ONEP
DW LIT
DW MAXDRV+2
DW STORE
DW MAXDRV
DW ZERO
DW ADO
CONF1 DW CR
DW ADOTQ
DB 6
DB 'DRIVE '
DW IDO
DW DOT
DW ADOTQ
DB 2
DB '? '
DW KEY
DW LIT
DW 30H
DW SUBB
DW DUPP
DW LIT
DW 7
DW ULESS
DW NOTT
DW AABORTQ
DB 0CH
DB 'OUT OF RANGE'
DW DUPP
DW LIT
DW 30H
DW PLUS
DW EMIT
DW IDO
DW TWOST
DW DEN
DW PLUS
DW STORE
DW ALOOP
DW CONF1-$
DW DR0
DW CR
DW CR
DW ADOTQ
DB 0DH
DB 'DR0 SELECTED '
DW CR
DW EXIT
;
DB 88H ; CONSTANT
DB 'CONSTAN'
DB 'T'+80H
DW CONF-0CH
CON DW DOCOL
DW CREATE
DW COMMA
DW ASCODE
DOCON: INC DX
MOV BX,DX
MOV AX,[BX]
JMP APUSH
;
DB 87H ; CONTEXT
DB 'CONTEX'
DB 'T'+80H
DW CON-0BH
CONT DW DOUSE
DW 3CH
;
DB 87H ; CONVERT
DB 'CONVER'
DB 'T'+80H
DW CONT-0AH
CONV DW DOCOL
CONV1 DW ONEP
DW DUPP
DW TOR
DW CAT
DW BASE
DW ATT
DW DIGIT
DW ZBRAN
DW OFFSET CONV3-$
DW SWAP
DW BASE
DW ATT
DW USTAR
DW DROP
DW ROT
DW BASE
DW ATT
DW USTAR
DW DPLUS
DW DPL
DW ATT
DW ONEP
DW ZBRAN
DW OFFSET CONV2-$
DW ONE
DW DPL
DW PSTOR
CONV2 DW FROMR
DW BRAN
DW OFFSET CONV1-$
CONV3 DW FROMR
DW EXIT
;
DB 85H ; COUNT
DB 'COUN'
DB 'T'+80H
DW CONV-0AH
COUNT DW DOCOL
DW DUPP
DW ONEP
DW SWAP
DW CAT
DW EXIT
;
DB 82H ; CR
DB 'C'
DB 'R'+80H
DW COUNT-8
CR DW DOCOL
DW TCR
DW ATT
DW EXEC
DW EXIT
;
DB 86H ; CREATE
DB 'CREAT'
DB 'E'+80H
DW CR-5
CREATE DW DOCOL
DW BLL
DW WORDD
DW DUPP
DW DUPP
DW ONEP
DW CAT
DW ZERO
DW EQUAL
DW AABORTQ
DB 1AH
DB 'ATTEMPTED TO REDEFINE NULL'
DW DUPP
DW CONT
DW ATT
DW ATT
DW AFIND
DW ZBRAN
DW OFFSET CREA1-$
DW DDROP
DW WARN
DW ATT
DW ZBRAN
DW OFFSET CREA1-$
DW DUPP
DW COUNT
DW TYPEE
DW SPACE
DW ADOTQ
DB 0DH
DB 'ISN',27H,'T UNIQUE '
CREA1 DW CAT
DW WIDTHH
DW ATT
DW MIN
DW ONEP
DW ALLOT
DW DUPP
DW LIT
DW 80H
DW TOGGL
DW HERE
DW ONEM
DW LIT
DW 80H
DW TOGGL
DW LATES
DW COMMA
DW TWO
DW ALLOT
DW CURR
DW ATT
DW STORE
DW ASCODE
DOVAR: INC DX
PUSH DX
JMP NEXT
;
DB 83H ; CSP
DB 'CS'
DB 'P'+80H
DW CREATE-9
CSP DW DOUSE
DW 3EH
;
DB 87H ; CURRENT
DB 'CURREN'
DB 'T'+80H
DW CSP-6
CURR DW DOUSE
DW 40H
;
DB 82H ; DSTORE
DB 'D'
DB '!'+80H
DW CURR-0AH
DSTOR DW $+2
POP BX
POP AX
MOV [BX],AX
POP AX
MOV 2[BX],AX
JMP NEXT
;
DB 82H ; D+
DB 'D'
DB '+'+80H
DW DSTOR-5
DPLUS DW $+2
POP AX
POP DX
POP BX
POP CX
ADD DX,CX
ADC AX,BX
JMP DPUSH
;
DB 83H ; D+-
DB 'D+'
DB '-'+80H
DW DPLUS-5
DPM DW DOCOL
DW ZLESS
DW ZBRAN
DW OFFSET DPM1-$
DW DNEG
DPM1 DW EXIT
;
DB 82H ; D.
DB 'D'
DB '.'+80H
DW DPM-6
DDOT DW DOCOL
DW ZERO
DW DDOTR
DW SPACE
DW EXIT
;
DB 83H ; D.R
DB 'D.'
DB 'R'+80H
DW DDOT-5
DDOTR DW DOCOL
DW DEPTH
DW LIT
DW 3
DW LESS
DW AABORTQ
DB 0BH
DB 'EMPTY STACK'
DW TOR
DW SWAP
DW OVER
DW DUPP
DW DPM
DW BDIGS
DW DIGS
DW ROT
DW SIGN
DW EDIGS
DW FROMR
DW OVER
DW SUBB
DW SPACS
DW TYPEE
DW EXIT
;
DB 82H ; D<
DB 'D'
DB '<'+80H
DW DDOTR-6
DLESS DW DOCOL
DW ROT
DW DDUP
DW EQUAL
DW ZBRAN
DW DLESS1-$
DW ROT
DW ROT
DW DNEG
DW DPLUS
DW ZLESS
DW BRAN
DW DLESS2-$
DLESS1 DW SWAP
DW LESS
DW SWAP
DW DROP
DLESS2 DW SWAP
DW DROP
DW EXIT
;
DB 84H ; DABS
DB 'DAB'
DB 'S'+80H
DW DLESS-5
DABS DW DOCOL
DW DUPP
DW DPM
DW EXIT
;
DB 85H ; DDROP
DB 'DDRO'
DB 'P'+80H
DW DABS-7
DDROP DW $+2
POP BX
POP BX
JMP NEXT
;
DB 84H ; DDUP
DB 'DDU'
DB 'P'+80H
DW DDROP-8
DDUP DW $+2
POP AX
POP DX
PUSH DX
PUSH AX
JMP DPUSH
;
DB 87H ; DECIMAL
DB 'DECIMA'
DB 'L'+80H
DW DDUP-7
DEC DW DOCOL
DW LIT
DW 0AH
DW BASE
DW STORE
DW EXIT
;
DB 8BH ; DEFINITIONS
DB 'DEFINITION'
DB 'S'+80H
DW DEC-0AH
DEFIN DW DOCOL
DW CONT
DW ATT
DW CURR
DW STORE
DW EXIT
;
DB 83H ; DEN
DB 'DE'
DB 'N'+80H
DW DEFIN-0EH
DEN DW DOVAR
DW 0
DW 0
DW 1
DW 1
DW 1
;
DB 87H ; DENSITY
DB 'DENSIT'
DB 'Y'+80H
DW DEN-6
DENSTY DW DOVAR
DW 0
;
DB 85H ; DEPTH
DB 'DEPT'
DB 'H'+80H
DW DENSTY-0AH
DEPTH DW DOCOL
DW SPAT
DW SZERO
DW SWAP
DW SUBB
DW TWOSL
DW EXIT
;
DB 85H ; DIGIT
DB 'DIGI'
DB 'T'+80H
DW DEPTH-8
DIGIT DW $+2
POP DX
POP AX
SUB AL,'0'
JB DIGI2
CMP AL,9H
JBE DIGI1
SUB AL,7H
CMP AL,0AH
JB DIGI2
DIGI1: CMP AL,DL
JAE DIGI2
SUB DX,DX
MOV DL,AL
MOV AL,01H
JMP DPUSH
DIGI2: SUB AX,AX
JMP APUSH
;
DB 8AH ; DISK-ERROR
DB 'DISK-ERRO'
DB 'R'+80H
DW DIGIT-8
DSKERR DW DOVAR
DW 0
;
DB 0C8H ; DLITERAL
DB 'DLITERA'
DB 'L'+80H
DW DSKERR-0DH
DLITE DW DOCOL
DW STATE
DW ATT
DW ZBRAN
DW OFFSET DLITE1-$
DW SWAP
DW LITER
DW LITER
DLITE1 DW EXIT
;
DB 87H ; DNEGATE
DB 'DNEGAT'
DB 'E'+80H
DW DLITE-0BH
DNEG DW $+2
POP BX
POP CX
SUB AX,AX
MOV DX,AX
SUB DX,CX
SBB AX,BX
JMP DPUSH
;
DB 0C2H ; DO
DB 'D'
DB 'O'+80H
DW DNEG-0AH
DO DW DOCOL
DW COMP
DW ADO
DW HERE
DW LIT
DW 3
DW EXIT
;
DB 0C5H ; DOES>
DB 'DOES'
DB '>'+80H
DW DO-5
DOES DW DOCOL
DW QCSP
DW COMP
DW ASCODE
DW LIT
DW 0E8H
DW CCOMM
DW LIT
DW DODOES
DW HERE
DW TWOP
DW SUBB
DW COMMA
DW EXIT
;
DODOES: INC DX
DEC BP
DEC BP
MOV [BP],SI
POP SI
PUSH DX
JMP NEXT
;
DB 82H ; DP
DB 'D'
DB 'P'+80H
DW DOES-8
DP DW DOUSE
DW 12H
;
DB 83H ; DPL
DB 'DP'
DB 'L'+80H
DW DP-5
DPL DW DOUSE
DW 42H
;
DB 85H ; DPUSH
DB 'DPUS'
DB 'H'+80H
DW DPL-6
DPUS DW DOCON
DW DPUSH
;
DB 86H ; DR-DEN
DB 'DR-DE'
DB 'N'+80H
DW DPUS-8
DRDEN DW DOCOL
DW TWOST
DW DEN
DW PLUS
DW ATT
DW EXIT
;
DB 83H ; DR0
DB 'DR'
DB '0'+80H
DW DRDEN-9
DR0 DW DOCOL
DW ZERO
DW OFSET
DW STORE
DW EXIT
;
DB 83H ; DR1
DB 'DR'
DB '1'+80H
DW DR0-6
DR1 DW DOCOL
DW DR0
DW ZERO
DW SETDRX
DW EXIT
;
DB 83H ; DR2
DB 'DR'
DB '2'+80H
DW DR1-6
DR2 DW DOCOL
DW DR1
DW ONE
DW SETDRX
DW EXIT
;
DB 83H ; DR3
DB 'DR'
DB '3'+80H
DW DR2-6
DR3 DW DOCOL
DW DR2
DW TWO
DW SETDRX
DW EXIT
;
DB 83H ; DR4
DB 'DR'
DB '4'+80H
DW DR3-6
DR4 DW DOCOL
DW DR3
DW LIT
DW 3
DW SETDRX
DW EXIT
;
DB 85H ; DRIVE
DB 'DRIV'
DB 'E'+80H
DW DR4-6
DRIVE DW DOVAR
DW 00
;
DB 84H ; DROP
DB 'DRO'
DB 'P'+80H
DW DRIVE-8
DROP DW $+2
POP AX
JMP NEXT
;
DB 83H ; DUP
DB 'DU'
DB 'P'+80H
DW DROP-7
DUPP DW $+2
POP AX
PUSH AX
JMP APUSH
;
DB 0C4H ; ELSE
DB 'ELS'
DB 'E'+80H
DW DUPP-6
ELSEE DW DOCOL
DW TWO
DW QPAIR
DW COMP
DW BRAN
DW HERE
DW ZERO
DW COMMA
DW SWAP
DW TWO
DW THENN
DW TWO
DW EXIT
;
DB 84H ; EMIT
DB 'EMI'
DB 'T'+80H
DW ELSEE-7
EMIT DW DOCOL
DW TEMIT
DW ATT
DW EXEC
DW EXIT
;
DB 8DH ; EMPTY-BUFFERS
DB 'EMPTY-BUFFER'
DB 'S'+80H
DW EMIT-7
MTBUF DW DOCOL
DW FIRST
DW LIMIT
DW OVER
DW SUBB
DW ZERO
DW AFILL
DW NOBUF
DW ZERO
DW ADO
MTBUF1 DW LIT
DW 7FFFH
DW LIT
DW 404H
DW IDO
DW STAR
DW FIRST
DW PLUS
DW STORE
DW ALOOP
DW OFFSET MTBUF1-$
DW EXIT
;
DB 87H ; ENCLOSE
DB 'ENCLOS'
DB 'E'+80H
DW MTBUF-10H
ENCL DW $+2
POP AX
POP BX
PUSH BX
MOV DX,0FFFFH
DEC BX
ENCL1: INC BX
INC DX
CMP AL,[BX]
JZ ENCL1
PUSH DX
INC BYTE PTR [BX]
DEC BYTE PTR [BX]
JNZ ENCL2
INC DX
PUSH DX
DEC DX
PUSH DX
JMP NEXT
ENCL2: INC BX
INC DX
CMP AL,[BX]
JZ ENCL3
INC BYTE PTR [BX]
DEC BYTE PTR [BX]
JNZ ENCL2
PUSH DX
PUSH DX
JMP NEXT
ENCL3: PUSH DX
INC DX
PUSH DX
JMP NEXT
;
DB 86H ; EPRINT
DB 'EPRIN'
DB 'T'+80H
DW ENCL-0AH
EPRINT DW DOVAR
DW 0
;
DB 87H ; EXECUTE
DB 'EXECUT'
DB 'E'+80H
DW EPRINT-9
EXEC DW $+2
POP BX
JMP NEXT1
;
DB 84H ; EXIT
DB 'EXI'
DB 'T'+80H
DW EXEC-0AH
EXIT DW $+2
MOV SI,[BP]
INC BP
INC BP
JMP NEXT
;
DB 86H ; EXPECT
DB 'EXPEC'
DB 'T'+80H
DW EXIT-7
EXPEC DW DOCOL
DW TEXPECT
DW ATT
DW EXEC
DW EXIT
;
DB 85H ; FENCE
DB 'FENC'
DB 'E'+80H
DW EXPEC-9
FENCE DW DOUSE
DW 10H
;
DB 84H ; FILL
DB 'FIL'
DB 'L'+80H
DW FENCE-8
FILL DW DOCOL
DW OVER
DW ZGREAT
DW ZBRAN
DW FILL1-$
DW AFILL
DW BRAN
DW FILL2-$
FILL1 DW DDROP
DW DROP
FILL2 DW EXIT
;
DB 84H ; FIND
DB 'FIN'
DB 'D'+80H
DW FILL-7
FIND DW DOCOL
DW DFIND
DW ZBRAN
DW FIND1-$
DW DROP
DW CFA
DW BRAN
DW FIND2-$
FIND1 DW ZERO
FIND2 DW EXIT
;
DB 85H ; FIRST
DB 'FIRS'
DB 'T'+80H
DW FIND-7
FIRST DW DOCON
DW BUF1
;
DB 83H ; FLD
DB 'FL'
DB 'D'+80H
DW FIRST-8
FLD DW DOUSE
DW 44H
;
DB 86H ; FORGET
DB 'FORGE'
DB 'T'+80H
DW FLD-6
FORG DW DOCOL
DW BLL
DW WORDD
DW CURR
DW ATT
DW ATT
DW AFIND
DW ZEQU
DW AABORTQ
DB 19H
DB 'NOT IN CURRENT VOCABULARY'
DW DROP
DW NFA
DW DUPP
DW FENCE
DW ATT
DW ULESS
DW AABORTQ
DB 17H
DB 'IN PROTECTED DICTIONARY'
DW TOR
DW RAT
DW CONT
DW ATT
DW ULESS
DW ZBRAN
DW FORG1-$
DW FORTH
FORG1 DW RAT
DW CURR
DW ATT
DW ULESS
DW ZBRAN
DW FORG2-$
DW FORTH
DW DEFIN
FORG2 DW VOCL
DW ATT
FORG3 DW RAT
DW OVER
DW ULESS
DW ZBRAN
DW FORG4-$
DW ATT
DW BRAN
DW FORG3-$
FORG4 DW DUPP
DW VOCL
DW STORE
FORG5 DW DUPP
DW LIT
DW 4
DW SUBB
FORG6 DW PFA
DW LFA
DW ATT
DW DUPP
DW RAT
DW ULESS
DW ZBRAN
DW FORG6-$
DW OVER
DW TWOM
DW STORE
DW ATT
DW QDUP
DW ZEQU
DW ZBRAN
DW FORG5-$
DW FROMR
DW DP
DW STORE
DW EXIT
;
DB 0C5H ; FORTH
DB 'FORT'
DB 'H'+80H
DW FORG-9
FORTH DW DOVOC
DW 0A081H
DW RBRAC-4
DW 00
;
DB 86H ; FREEZE
DB 'FREEZ'
DB 'E'+80H
DW FORTH-8
FREEZE DW DOCOL
DW LIT
DW UP
DW ATT
DW LIT
DW 6
DW PLUS
DW LIT
DW INITUSER
DW LIT
DW 30H
DW CMOVE
DW LIT
DW FORTH+2
DW TWOP
DW ATT
DW LIT
DW INITFORTH
DW STORE
DW EXIT
;
DB 84H ; HERE
DB 'HER'
DB 'E'+80H
DW FREEZE-9
HERE DW DOCOL
DW DP
DW ATT
DW EXIT
;
DB 83H ; HEX
DB 'HE'
DB 'X'+80H
DW HERE-7
HEX DW DOCOL
DW LIT
DW 10H
DW BASE
DW STORE
DW EXIT
;
DB 83H ; HLD
DB 'HL'
DB 'D'+80H
DW HEX-6
HLD DW DOUSE
DW 46H
;
DB 84H ; HOLD
DB 'HOL'
DB 'D'+80H
DW HLD-6
HOLD DW DOCOL
DW LIT
DW 0FFFFH
DW HLD
DW PSTOR
DW HLD
DW ATT
DW CSTOR
DW EXIT
;
DB 81H ; I
DB 'I'+80H
DW HOLD-7
IDO DW $+2
MOV AX,[BP]
JMP APUSH
;
DB 82H ; I'
DB 'I'
DB 0A7H
DW IDO-4
IPDO DW $+2
MOV AX,[BP+2]
JMP APUSH
;
DB 0C2H ; IF
DB 'I'
DB 'F'+80H
DW IPDO-5
IFF DW DOCOL
DW COMP
DW ZBRAN
DW HERE
DW ZERO
DW COMMA
DW TWO
DW EXIT
;
DB 89H ; IMMEDIATE
DB 'IMMEDIAT'
DB 'E'+80H
DW IFF-5
IMMED DW DOCOL
DW LATES
DW LIT
DW 40H
DW TOGGL
DW EXIT
;
DB 8AH ; INIT-FORTH
DB 'INIT-FORT'
DB 'H'+80H
DW IMMED-0CH
IFORTH DW DOCON
DW INITFORTH
;
DB 89H ; INIT-USER
DB 'INIT-USE'
DB 'R'+80H
DW IFORTH-0DH
IUSER DW DOCON
DW INITUSER
;
DB 87H ; INTCALL
DB 'INTCAL'
DB 'L'+80H
DW IUSER-0CH
INTCAL DW DOCOL
DW LIT
DW INTCA2+1
DW CSTOR
DW LIT
DW INTCA1
DW EXEC
DW EXIT
;
INTCA1 DW $+2
POP DX
POP CX
POP BX
POP AX
PUSH SI
PUSH BP
INTCA2: INT 0
POP BP
POP SI
JMP APUSH
;
DB 89H ; INTERPRET
DB 'INTERPRE'
DB 'T'+80H
DW INTCAL-0AH
INTER DW DOCOL
DW TINTER
DW ATT
DW EXEC
DW EXIT
;
;
DB 81H ; J
DB 'J'+80H
DW INTER-0CH
JDO DW $+2
MOV AX,[BP+4]
JMP APUSH
;
DB 83H ; KEY
DB 'KE'
DB 'Y'+80H
DW JDO-4
KEY DW DOCOL
DW TKEY
DW ATT
DW EXEC
DW EXIT
;
DB 86H ; LATEST
DB 'LATES'
DB 'T'+80H
DW KEY-6
LATES DW DOCOL
DW CURR
DW ATT
DW ATT
DW EXIT
;
DB 85H ; LEAVE
DB 'LEAV'
DB 'E'+80H
DW LATES-9
LEAVE DW $+2
MOV AX,[BP]
MOV 2[BP],AX
JMP NEXT
;
DB 83H ; LFA
DB 'LF'
DB 'A'+80H
DW LEAVE-8
LFA DW DOCOL
DW LIT
DW 4
DW SUBB
DW EXIT
;
DB 85H ; LIMIT
DB 'LIMI'
DB 'T'+80H
DW LFA-6
LIMIT DW DOCON
DW EM
;
DB 84H ; LIST
DB 'LIS'
DB 'T'+80H
DW LIMIT-8
LIST DW DOCOL
DW CR
DW DUPP
DW SCR
DW STORE
DW ADOTQ
DB 5
DB 'SCR #'
DW UDOT
DW LIT
DW 10H
DW ZERO
DW ADO
LIST1 DW CR
DW RAT
DW LIT
DW 3
DW DOTR
DW SPACE
DW RAT
DW SCR
DW ATT
DW DLINE
DW QTERM
DW ZBRAN
DW OFFSET LIST2-$
DW LEAVE
LIST2 DW ALOOP
DW OFFSET LIST1-$
DW CR
DW EXIT
;
DB 83H ; LIT
DB 'LI'
DB 'T'+80H
DW LIST-7
LIT DW $+2
MOV AX,[SI]
INC SI
INC SI
JMP APUSH
;
DB 0C7H ; LITERAL
DB 'LITERA'
DB 'L'+80H
DW LIT-6
LITER DW DOCOL
DW STATE
DW ATT
DW ZBRAN
DW OFFSET LITER1-$
DW COMP
DW LIT
DW COMMA
LITER1 DW EXIT
;
DB 84H ; LOAD
DB 'LOA'
DB 'D'+80H
DW LITER-0AH
LOAD DW DOCOL
DW TLOAD
DW ATT
DW EXEC
DW EXIT
;
DB 0C4H ; LOOP
DB 'LOO'
DB 'P'+80H
DW LOAD-7
LOOP DW DOCOL
DW LIT
DW 3
DW QPAIR
DW COMP
DW ALOOP
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 82H ; M*
DB 'M'
DB '*'+80H
DW LOOP-7
MSTAR DW DOCOL
DW DDUP
DW XORR
DW TOR
DW ABSS
DW SWAP
DW ABSS
DW USTAR
DW FROMR
DW DPM
DW EXIT
;
DB 83H ; M*/
DB 'M*'
DB '/'+80H
DW MSTAR-5
MSTARSL DW DOCOL
DW DDUP
DW XORR
DW SWAP
DW ABSS
DW TOR
DW SWAP
DW ABSS
DW TOR
DW OVER
DW XORR
DW ROT
DW ROT
DW DABS
DW SWAP
DW RAT
DW USTAR
DW ROT
DW FROMR
DW USTAR
DW ROT
DW ZERO
DW DPLUS
DW RAT
DW USLM
DW ROT
DW ROT
DW FROMR
DW USLM
DW SWAP
DW DROP
DW SWAP
DW ROT
DW DPM
DW EXIT
;
DB 82H ; M+
DB 'M'
DB '+'+80H
DW MSTARSL-6
MPLUS DW DOCOL
DW STOD
DW DPLUS
DW EXIT
;
DB 82H ; M/
DB 'M'
DB '/'+80H
DW MPLUS-5
MSLAS DW DOCOL
DW OVER
DW TOR
DW TOR
DW DUPP
DW DPM
DW RAT
DW ABSS
DW USLM
DW FROMR
DW RAT
DW XORR
DW PM
DW SWAP
DW FROMR
DW PM
DW SWAP
DW EXIT
;
DB 85H ; M/MOD
DB 'M/MO'
DB 'D'+80H
DW MSLAS-5
MSMOD DW DOCOL
DW TOR
DW ZERO
DW RAT
DW USLM
DW FROMR
DW SWAP
DW TOR
DW USLM
DW FROMR
DW EXIT
;
DB 83H ; MAX
DB 'MA'
DB 'X'+80H
DW MSMOD-8
MAX DW DOCOL
DW DDUP
DW LESS
DW ZBRAN
DW OFFSET MAX1-$
DW SWAP
MAX1 DW DROP
DW EXIT
;
DB 87H ; MAX-DRV
DB 'MAX-DR'
DB 'V'+80H
DW MAX-6
MAXDRV DW DOCON
DW 2
;
DB 83H ; MIN
DB 'MI'
DB 'N'+80H
DW MAXDRV-0AH
MIN DW DOCOL
DW DDUP
DW GREAT
DW ZBRAN
DW OFFSET MIN1-$
DW SWAP
MIN1 DW DROP
DW EXIT
;
DB 83H ; MOD
DB 'MO'
DB 'D'+80H
DW MIN-6
MODD DW DOCOL
DW SLMOD
DW DROP
DW EXIT
;
DB 84H ; MOVE
DB 'MOV'
DB 'E'+80H
DW MODD-6
MOVE DW DOCOL
DW ZERO
DW MAX
DW TWOST
DW ACMOVE
DW EXIT
;
DB 86H ; NEGATE
DB 'NEGAT'
DB 'E'+80H
DW MOVE-7
NEG DW $+2
POP AX
NEG AX
JMP APUSH
;
DB 84H ; NEXT
DB 'NEX'
DB 'T'+80H
DW NEG-9
CNEXT DW DOCON
DW NEXT
;
DB 85H ; NEXT1
DB 'NEXT'
DB '1'+80H
DW CNEXT-7
CNEXT1 DW DOCON
DW NEXT1
;
DB 83H ; NFA
DB 'NF'
DB 'A'+80H
DW CNEXT1-8
NFA DW DOCOL
DW LIT
DW 5
DW SUBB
DW LIT
DW 0FFFFH
DW TRAV
DW EXIT
;
DB 83H ; NOT
DB 'NO'
DB 'T'+80H
DW NFA-6
NOTT DW $+2
POP AX
OR AX,AX
MOV AX,1H
JZ NOT1
DEC AX
NOT1: JMP APUSH
;
DB 86H ; NUMBER
DB 'NUMBE'
DB 'R'+80H
DW NOTT-6
NUM DW DOCOL
DW TNUM
DW ATT
DW EXEC
DW EXIT
;
DB 86H ; OFFSET
DB 'OFFSE'
DB 'T'+80H
DW NUM-9
OFSET DW DOUSE
DW 48H
;
DB 82H ; OR
DB 'O'
DB 'R'+80H
DW OFSET-9
ORR DW $+2
POP AX
POP BX
OR AX,BX
JMP APUSH
;
DB 83H ; OUT
DB 'OU'
DB 'T'+80H
DW ORR-5
OUTT DW DOUSE
DW 4AH
;
DB 84H ; OVER
DB 'OVE'
DB 'R'+80H
DW OUTT-6
OVER DW $+2
POP DX
POP AX
PUSH AX
JMP DPUSH
;
DB 82H ; PSTORE
DB 'P'
DB '!'+80H
DW OVER-7
PTSTOR DW $+2
POP DX
POP AX
OUT DX,AL
JMP NEXT
;
DB 82H ; P@
DB 'P'
DB '@'+80H
DW PTSTOR-5
PTAT DW $+2
POP DX
IN AL,DX
SUB AH,AH
JMP APUSH
;
DB 83H ; PAD
DB 'PA'
DB 'D'+80H
DW PTAT-5
PAD DW DOCOL
DW HERE
DW LIT
DW 44H
DW PLUS
DW EXIT
;
DB 84H ; PAGE
DB 'PAG'
DB 'E'+80H
DW PAD-6
PAGEE DW DOCOL
DW TPAGE
DW ATT
DW EXEC
DW EXIT
;
DB 83H ; PFA
DB 'PF'
DB 'A'+80H
DW PAGEE-7
PFA DW DOCOL
DW ONE
DW TRAV
DW LIT
DW 5
DW PLUS
DW EXIT
;
DB 84H ; PICK
DB 'PIC'
DB 'K'+80H
DW PFA-6
PICK DW DOCOL
DW DUPP
DW ONE
DW LESS
DW AABORTQ
DB 11H
DB 'PICK ARGUMENT < 1'
DW TWOST
DW SPAT
DW PLUS
DW ATT
DW EXIT
;
DB 82H ; PP
DB 'P'
DB 'P'+80H
DW PICK-7
PP DW DOCOL
DW DUPP
DW LIT
DW 0FFF0H
DW ANDD
DW AABORTQ
DB 0AH
DB 'OFF SCREEN'
DW ONE
DW TEXT
DW PAD
DW ONEP
DW SWAP
DW SCR
DW ATT
DW ALINE
DW CMOVE
DW UPDAT
DW EXIT
;
DB 84H ; PREV
DB 'PRE'
DB 'V'+80H
DW PP-5
PREV DW DOVAR
DW BUF1
;
DB 83H ; PWSTORE
DB 'PW'
DB '!'+80H
DW PREV-7
PWSTOR DW $+2
POP DX
POP AX
OUT DX,AX
JMP NEXT
;
DB 83H ; PW@
DB 'PW'
DB '@'+80H
DW PWSTOR-6
PWAT DW $+2
POP DX
IN AX,DX
JMP APUSH
;
DB 85H ; QUERY
DB 'QUER'
DB 'Y'+80H
DW PWAT-6
QUERY DW DOCOL
DW TIB
DW ATT
DW LIT
DW 50H
DW EXPEC
DW ZERO
DW TOIN
DW STORE
DW EXIT
;
DB 84H ; QUIT
DB 'QUI'
DB 'T'+80H
DW QUERY-8
QUIT DW DOCOL
DW ZERO
DW BLK
DW STORE
DW LBRAC
QUIT1 DW CR
DW RPSTO
DW QUERY
DW INTER
DW STATE
DW ATT
DW NOTT
DW ZBRAN
DW OFFSET QUIT2-$
DW ADOTQ
DB 2
DB 'OK'
QUIT2 DW BRAN
DW QUIT1-$
DW EXIT
;
DB 82H ; R#
DB 'R'
DB '#'+80H
DW QUIT-7
RSHARP DW DOUSE
DW 4CH
;
DB 83H ; R/W
DB 'R/'
DB 'W'+80H
DW RSHARP-5
RSLW DW DOCOL
DW TRSLW
DW ATT
DW EXEC
DW EXIT
;
DB 82H ; R0
DB 'R'
DB '0'+80H
DW RSLW-6
RZERO DW DOUSE
DW 08
;
DB 82H ; R>
DB 'R'
DB '>'+80H
DW RZERO-5
FROMR DW $+2
MOV AX,[BP]
INC BP
INC BP
JMP APUSH
;
DB 82H ; R@
DB 'R'
DB '@'+80H
DW FROMR-5
RAT DW $+2
MOV AX,[BP]
JMP APUSH
;
DB 0C6H ; REPEAT
DB 'REPEA'
DB 'T'+80H
DW RAT-5
REPEA DW DOCOL
DW TOR
DW TOR
DW AGAIN
DW FROMR
DW FROMR
DW TWOM
DW THENN
DW EXIT
;
DB 84H ; ROLL
DB 'ROL'
DB 'L'+80H
DW REPEA-9
ROLL DW DOCOL
DW DUPP
DW ONE
DW LESS
DW AABORTQ
DB 11H
DB 'ROLL ARGUMENT < 1'
DW ONEP
DW DUPP
DW PICK
DW SWAP
DW TWOST
DW SPAT
DW PLUS
ROLL1 DW DUPP
DW TWOM
DW ATT
DW OVER
DW STORE
DW TWOM
DW SPAT
DW OVER
DW ULESS
DW NOTT
DW ZBRAN
DW ROLL1-$
DW DDROP
DW EXIT
;
DB 83H ; ROT
DB 'RO'
DB 'T'+80H
DW ROLL-7
ROT DW $+2
POP DX
POP BX
POP AX
PUSH BX
JMP DPUSH
;
DB 83H ; RPSTORE
DB 'RP'
DB '!'+80H
DW ROT-6
RPSTO DW $+2
MOV BX,UP
MOV BP,8[BX]
JMP NEXT
;
DB 83H ; RP@
DB 'RP'
DB '@'+80H
DW RPSTO-6
RPAT DW $+2
MOV AX,BP
JMP APUSH
;
DB 83H ; RPP
DB 'RP'
DB 'P'+80H
DW RPAT-6
RPPP DW DOCON
DW RPP
;
DB 84H ; S->D
DB 'S->'
DB 'D'+80H
DW RPPP-6
STOD DW $+2
POP DX
SUB AX,AX
OR DX,DX
JNS STOD1
DEC AX
STOD1: JMP DPUSH
;
DB 82H ; S0
DB 'S'
DB '0'+80H
DW STOD-7
SZERO DW DOCOL
DW SPZERO
DW ATT
DW EXIT
;
DB 8CH ; SAVE-BUFFERS
DB 'SAVE-BUFFER'
DB 'S'+80H
DW SZERO-5
SAVBUF DW DOCOL
DW NOBUF
DW ONEP
DW ZERO
DW ADO
SAVBUF1 DW LIT
DW 7FFFH
DW BUFFE
DW DROP
DW ALOOP
DW OFFSET SAVBUF1-$
DW EXIT
;
DB 83H ; SCR
DB 'SC'
DB 'R'+80H
DW SAVBUF-0FH
SCR DW DOUSE
DW 4EH
;
DB 83H ; SEC
DB 'SE'
DB 'C'+80H
DW SCR-6
SEC DW DOVAR
DW 0
;
DB 88H ; SEC-READ
DB 'SEC-REA'
DB 'D'+80H
DW SEC-6
;SECRD DW DOCOL
; DW LIT
; DW 201H
; DW LIT
; DW SECRW
; DW EXEC
; DW EXIT
;
;SECRW DW DOCOL
; DW LIT
; DW 3
; DW ZERO
; DW ADO
;SECRW1 DW DUPP
; DW USEE
; DW ATT
; DW TRACK
; DW ATT
; DW LIT
; DW 100H
; DW STAR
; DW SEC
; DW ATT
; DW PLUS
; DW DRIVE
; DW ATT
; DW LIT
; DW 13H
; DW INTCAL
; DW DUPP
; DW DSKERR
; DW STORE
; DW ZEQU
; DW ZBRAN
; DW OFFSET SECRW2-$
; DW LEAVE
; DW BRAN
; DW OFFSET SECRW3-$
;SECRW2 DW ZERO
; DW ZERO
; DW ZERO
; DW ZERO
; DW LIT
; DW 13H
; DW INTCAL
; DW DROP
;SECRW3 DW ALOOP
; DW OFFSET SECRW1-$
; DW DROP
; DW EXIT
SECRD DW $+2 ; 1.0405.03
MOV AX,DRIVE+2 ; 1.0405.03
MOV BX,USEE+2 ; 1.0405.03
MOV CX,01H ; 1.0405.03
MOV DX,SEC+2 ; 1.0405.03
PUSH SI ; 1.0405.03
PUSH BP ; 1.0405.03
INT 25H ; 1.0405.03
POPF ; 1.0405.03
POP BP ; 1.0405.03
POP SI ; 1.0405.03
MOV AH,0 ; 1.0405.03
MOV DSKERR+2,AX ; 1.0405.03
JMP NEXT
;
DB 89H ; SEC-WRITE
DB 'SEC-WRIT'
DB 'E'+80H
DW SECRD-0BH
;SECWT DW DOCOL
; DW LIT
; DW 301H
; DW LIT
; DW SECRW
; DW EXEC
; DW EXIT
SECWT DW $+2 ; 1.0405.03
MOV AX,DRIVE+2 ; 1.0405.03
MOV BX,USEE+2 ; 1.0405.03
MOV CX,01H ; 1.0405.03
MOV DX,SEC+2 ; 1.0405.03
PUSH SI ; 1.0405.03
PUSH BP ; 1.0405.03
INT 26H ; 1.0405.03
POPF ; 1.0404.03
POP BP ; 1.0405.03
POP SI ; 1.0405.03
MOV AH,0 ; 1.0405.03
MOV DSKERR+2,AX ; 1.0405.03
JMP NEXT ; 1.0405.03
;
DB 87H ; SEC/BLK
DB 'SEC/BL'
DB 'K'+80H
DW SECWT-0CH
SPBL DW DOVAR
DW 2
DW 2
DW 8
DW 8
DW 8
DW 8
DW 8
;
DB 86H ; SEC/TR
DB 'SEC/T'
DB 'R'+80H
DW SPBL-0AH
SPTR DW DOVAR
DW 8H
DW 8H
DW 1AH
DW 34H
DW 34H
DW 40H
DW 40H
;
DB 87H ; SET-DRX
DB 'SET-DR'
DB 'X'+80H
DW SPTR-9H
SETDRX DW DOCOL
DW DRDEN
DW DENSTY
DW STORE
DW BPDRV
DW OFSET
DW PSTOR
DW EXIT
;
DB 84H ; SIGN
DB 'SIG'
DB 'N'+80H
DW SETDRX-0AH
SIGN DW DOCOL
DW ZLESS
DW ZBRAN
DW OFFSET SIGN1-$
DW LIT
DW 2DH
DW HOLD
SIGN1 DW EXIT
;
DB 86H ; SMUDGE
DB 'SMUDG'
DB 'E'+80H
DW SIGN-7
SMUDG DW DOCOL
DW LATES
DW LIT
DW 20H
DW TOGGL
DW EXIT
;
DB 83H ; SPSTORE
DB 'SP'
DB '!'+80H
DW SMUDG-9
SPSTO DW $+2
MOV BX,UP
MOV SP,6[BX]
JMP NEXT
;
DB 83H ; SP0
DB 'SP'
DB '0'+80H
DW SPSTO-6
SPZERO DW DOUSE
DW 06
;
DB 83H ; SP@
DB 'SP'
DB '@'+80H
DW SPZERO-6
SPAT DW $+2
MOV AX,SP
JMP APUSH
;
DB 85H ; SPACE
DB 'SPAC'
DB 'E'+80H
DW SPAT-6
SPACE DW DOCOL
DW BLL
DW EMIT
DW EXIT
;
DB 86H ; SPACES
DB 'SPACE'
DB 'S'+80H
DW SPACE-8
SPACS DW DOCOL
DW ZERO
DW MAX
DW QDUP
DW ZBRAN
DW OFFSET SPACS2-$
DW ZERO
DW ADO
SPACS1 DW SPACE
DW ALOOP
DW OFFSET SPACS1-$
SPACS2 DW EXIT
;
DB 85H ; SPBLK
DB 'SPBL'
DB 'K'+80H
DW SPACS-9
SPBLK DW DOCOL
DW DENSTY
DW ATT
DW LIT
DW 6
DW MIN
DW TWOST
DW SPBL
DW PLUS
DW ATT
DW EXIT
;
DB 85H ; SPDRV
DB 'SPDR'
DB 'V'+80H
DW SPBLK-8
SPDRV DW DOCOL
DW BPDRV
DW SPBLK
DW STAR
DW EXIT
;
DB 83H ; SPT
DB 'SP'
DB 'T'+80H
DW SPDRV-8
SPT DW DOCOL
DW DENSTY
DW ATT
DW LIT
DW 6
DW MIN
DW TWOST
DW SPTR
DW PLUS
DW ATT
DW EXIT
;
DB 85H ; STATE
DB 'STAT'
DB 'E'+80H
DW SPT-6
STATE DW DOUSE
DW 50H
;
DB 84H ; SWAP
DB 'SWA'
DB 'P'+80H
DW STATE-8
SWAP DW $+2
POP DX
POP AX
JMP DPUSH
;
DB 87H ; SYSCALL
DB 'SYSCAL'
DB 'L'+80H
DW SWAP-7
SYSCALL DW DOCOL
DW SWAP
DW LIT
DW 100H
DW STAR
DW SWAP
DW ZERO
DW ZERO
DW ROT
DW LIT
DW 21H
DW INTCAL
DW EXIT
;
DB 87H ; T&SCALC
DB 'T&SCAL'
DB 'C'+80H
DW SYSCALL-0AH
TSCALC DW DOCOL
DW TTSCALC
DW ATT
DW EXEC
DW EXIT
;
DB 84H ; TEXT
DB 'TEX'
DB 'T'+80H
DW TSCALC-0AH
TEXT DW DOCOL
DW HERE
DW CSLL
DW ONEP
DW BLANK
DW WORDD
DW BLL
DW OVER
DW DUPP
DW CAT
DW PLUS
DW ONEP
DW CSTOR
DW PAD
DW CSLL
DW ONEP
DW CMOVE
DW EXIT
;
DB 0C4H ; THEN
DB 'THE'
DB 'N'+80H
DW TEXT-7
THENN DW DOCOL
DW QCOMP
DW TWO
DW QPAIR
DW HERE
DW OVER
DW SUBB
DW SWAP
DW STORE
DW EXIT
;
DB 83H ; TIB
DB 'TI'
DB 'B'+80H
DW THENN-7
TIB DW DOUSE
DW 0AH
;
DB 86H ; TOGGLE
DB 'TOGGL'
DB 'E'+80H
DW TIB-6
TOGGL DW $+2
POP AX
POP BX
XOR [BX],AL
JMP NEXT
;
DB 85H ; TRACK
DB 'TRAC'
DB 'K'+80H
DW TOGGL-9
TRACK DW DOVAR
DW 0
;
DB 88H ; TRAVERSE
DB 'TRAVERS'
DB 'E'+80H
DW TRACK-8
TRAV DW DOCOL
DW SWAP
TRAV1 DW OVER
DW PLUS
DW LIT
DW 07FH
DW OVER
DW CAT
DW LESS
DW ZBRAN
DW OFFSET TRAV1-$
DW SWAP
DW DROP
DW EXIT
;
DB 84H ; TYPE
DB 'TYP'
DB 'E'+80H
DW TRAV-0BH
TYPEE DW DOCOL
DW DUPP
DW ZGREAT
DW ZBRAN
DW OFFSET TYPE2-$
DW OVER
DW PLUS
DW SWAP
DW ADO
TYPE1 DW IDO
DW CAT
DW EMIT
DW ONE
DW AUPLOOP
DW OFFSET TYPE1-$
DW BRAN
DW OFFSET TYPE3-$
TYPE2 DW DDROP
TYPE3 DW EXIT
;
DB 82H ; U*
DB 'U'
DB '*'+80H
DW TYPEE-7
USTAR DW $+2
POP AX
POP BX
MUL BX
XCHG AX,DX
JMP DPUSH
;
DB 82H ; U.
DB 'U'
DB '.'+80H
DW USTAR-5
UDOT DW DOCOL
DW ZERO
DW DDOT
DW EXIT
;
DB 85H ; U/MOD
DB 'U/MO'
DB 'D'+80H
DW UDOT-5
USLM DW $+2
POP BX
POP DX
POP AX
DIV BX
JMP DPUSH
;
DB 82H ; U<
DB 'U'
DB '<'+80H
DW USLM-8
ULESS DW DOCOL
DW ZERO
DW SWAP
DW ZERO
DW DLESS
DW EXIT
;
DB 0C5H ; UNTIL
DB 'UNTI'
DB 'L'+80H
DW ULESS-5
UNTIL DW DOCOL
DW ONE
DW QPAIR
DW COMP
DW ZBRAN
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 82H ; UP
DB 'U'
DB 'P'+80H
DW UNTIL-8
UPP DW DOCON
DW UP
;
DB 86H ; UPDATE
DB 'UPDAT'
DB 'E'+80H
DW UPP-5
UPDAT DW DOCOL
DW PREV
DW ATT
DW ATT
DW LIT
DW 8000H
DW ORR
DW PREV
DW ATT
DW STORE
DW EXIT
;
DB 83H ; USE
DB 'US'
DB 'E'+80H
DW UPDAT-9
USEE DW DOVAR
DW BUF1
;
DB 84H ; USER
DB 'USE'
DB 'R'+80H
DW USEE-6
USER DW DOCOL
DW CON
DW ASCODE
DOUSE: INC DX
MOV BX,DX
MOV BL,[BX]
SUB BH,BH
MOV DI,UP
LEA AX,[BX+DI]
JMP APUSH
;
DB 88H ; VARIABLE
DB 'VARIABL'
DB 'E'+80H
DW USER-7
VAR DW DOCOL
DW CREATE
DW TWO
DW ALLOT
DW EXIT
;
DB 88H ; VOC-LINK
DB 'VOC-LIN'
DB 'K'+80H
DW VAR-0BH
VOCL DW DOUSE
DW 14H
;
DB 8AH ; VOCABULARY
DB 'VOCABULAR'
DB 'Y'+80H
DW VOCL-0BH
VOC DW DOCOL
DW TVOCAB
DW ATT
DW EXEC
DW EXIT
;
DB 87H ; WARNING
DB 'WARNIN'
DB 'G'+80H
DW VOC-0DH
WARN DW DOUSE
DW 0EH
;
DB 85H ; WHERE
DB 'WHER'
DB 'E'+80H
DW WARN-0AH
WHERE DW DOCOL
DW BLK
DW ATT
DW ZBRAN
DW WHERE1-$
DW BLK
DW ATT
DW DUPP
DW SCR
DW STORE
DW CR
DW CR
DW ADOTQ
DB 5
DB 'SCR# '
DW DUPP
DW DOT
DW TOIN
DW ATT
DW LIT
DW 3FFH
DW MIN
DW CSLL
DW SLMOD
DW DUPP
DW ADOTQ
DB 6
DB 'LINE# '
DW DOT
DW CSLL
DW STAR
DW ROT
DW BLOCK
DW PLUS
DW CR
DW CR
DW CSLL
DW DTRAI
DW TYPEE
DW TOIN
DW ATT
DW LIT
DW 3FFH
DW GREAT
DW PLUS
DW BRAN
DW WHERE2-$
WHERE1 DW TOIN
DW ATT
WHERE2 DW CR
DW HERE
DW CAT
DW DUPP
DW TOR
DW SUBB
DW HERE
DW RAT
DW PLUS
DW ONEP
DW CAT
DW LIT
DW 20H
DW EQUAL
DW ZBRAN
DW WHERE3-$
DW ONEM
WHERE3 DW SPACS
DW FROMR
DW ZERO
DW ADO
WHERE4 DW LIT
DW 5EH
DW EMIT
DW ALOOP
DW WHERE4-$
DW EXIT
;
DB 0C5H ; WHILE
DB 'WHIL'
DB 'E'+80H
DW WHERE-8
WHILE DW DOCOL
DW IFF
DW TWOP
DW EXIT
;
DB 85H ; WIDTH
DB 'WIDT'
DB 'H'+80H
DW WHILE-8
WIDTHH DW DOUSE
DW 0CH
;
DB 84H ; WORD
DB 'WOR'
DB 'D'+80H
DW WIDTHH-8
WORDD DW DOCOL
DW TWORD
DW ATT
DW EXEC
DW EXIT
;
DB 0C0H ; X (NULL)
DB 80H
DW WORDD-7
NULL DW DOCOL
DW BLK
DW ATT
DW ZBRAN
DW OFFSET NULL1-$
DW STATE
DW ATT
DW QSTREAM
NULL1 DW FROMR
DW DROP
DW EXIT
;
DB 83H ; XOR
DB 'XO'
DB 'R'+80H
DW NULL-4
XORR DW $+2
POP AX
POP BX
XOR AX,BX
JMP APUSH
;
DB 0C1H ; [
DB '['+80H
DW XORR-6
LBRAC DW DOCOL
DW ZERO
DW STATE
DW STORE
DW EXIT
;
DB 0C9H ; [COMPILE]
DB '[COMPILE'
DB ']'+80H
DW LBRAC-4
BCOMP DW DOCOL
DW QCOMP
DW DFIND
DW NOTT
DW AABORTQ
DB 9
DB 'NOT FOUND'
DW DROP
DW CFA
DW COMMA
DW EXIT
;
DB 81H ; ]
DB ']'+80H
DW BCOMP-0CH
RBRAC DW DOCOL
DW LIT
DW 0C0H
DW STATE
DW STORE
DW EXIT
;
FSEG ENDS
;
END ORIG
;
MVP-FORTH
by
Glen B. Haydon
Box 429 Star Route 2
La Honda, CA 94020
distributed by
MOUNTAIN VIEW PRESS, INC
P.O. Box 4656
Mountain View, CA 94040
(415) 961-4103
MVP-FORTH is a well documented public domain implementation of FORTH
which has remained stable since early 1982. The run time file, FORTH.COM, all
of the standard 8088/8086 assembler source code for the kernel, and the FORTH
source screens which have been compiled on top of the MVP-FORTH kernel are
included in the ARCed file MVPFORTH.ARC.
These files are what Mountain View Press includes in the disks with
the MVP-FORTH Programmer's Kit. I will provide support for those who buy
the disks from them or make a contribution to me which will register you as a
ShareWare user. Otherwise you are on your own. All of the source is
included but you have to know how to use it.
It is recommended that you get the following documentation:
All About FORTH, 2nd Edition, by Glen B. Haydon -- A glossary of all
FORTH function including other dialects which were in common usage when the
book was published.
MVP-FORTH Assembly Source Code, by Glen B. Haydon and Robert Kuntz --
The assembley source listing for the MVP-FORTH kernel in 8080, 8088/86 and
6502 language assemblers.
FORTH GUIDE, by Glen B. Haydon -- A guide for novice beginners and
intermediate users based on two years of teaching a weekly seminair. The
experts may even pick up a few pearls.
Starting FORTH, by Leo Brodie -- The first and one of the classic
tutorials for FORTH. MVP-FORTH has added supplemental functions to cover
those used in this book. There are only a couple of slight differences which
could not be implemented - see All About FORTH
The Complete FORTH, by Allan Winfield -- A second complete tutorial
for FORTH. It too goes well with MVP-FORTH.
In addition to these books, a series of nine Volumes include a public
domain quad precision and floating point implementation, an expert system, an
elaborate file management system, a full word processor, and the Professional
Applications Development System known as PADS. These and many other
publications on FORTH are available from THE FORTH SOURCE, Mountain View
Press. Contact them for more materials.
As with all versions of MVP-FORTH on BBS systems, this implementation
has defined two words FILE>SCREENS and SCREENS>FILE, along with the necessary
primitives. These make it possible to ARC the source screens, for
distribution and to reconstitute a FORTH SCREENS disk as distributed by
Mountain View Press.
The file, SCREENS.MVP, when deARCed, yields a file of 140 compressed
FORTH SCREENS. They can be decompressed and loaded onto a freshly formatted
floppy disk. You are prompted for the necessary information as required.
Because of the power of FORTH, you can easily crash you system. Do
not diapair. At first, use a single floppy drive to get familiar with what
you are doing.
You will not need the FORTH SCREENS containing the source code. It
has all been compiled in to FORTH.COM. I suggest that you start with a
scratch FORTH SCREENS disk in Drive A, known to FORTH as DR0. Keep a separate
FORTH SCREENS disk and FORTH FILES disk. When you use SAVE-FORTH, put the
FORTH FILES disk in Drive A. Otherwise, keep the FORTH SCREENS disk in Drive
A.
At the very beginning deARC MVP-FORTH to a floppy disk on drive A.
Load the program FORTH.COM. (You can return to the system with BYE - upper
case.) Enter the function FILE>SCREENS. The file you want at the prompt is: A:SCREENS.MVP. Then before entering the beginning screen number, remove the
DOS disk from Drive A, and insert a freshly formatted and labeled FORTH
SCREENS disk. Now enter the beginning screen number as 10. The screens will
be written to the FORTH SCREENS disk. The new code with which this is done is
now on Screens 130 through 138. After you learn some FORTH you might be
interested in seeing how this is done.
After you are familiar with what you are doing, you can move the file
FORTH.COM to any location you wish. I would still keep my FORTH Screens on a
floppy disk in Drive A, until you are further along. Then a number of other
ways of using the system will become obvious.
There are many ways you can use FORTH and other programs on the same
computer without getting into trouble. I partition the top 2 megabytes of a
10 meg hard disk for FORTH SCREENS. My only concern is that I do not let the
other program files get larger that 8 megs of space. In another system I have
a separate partition of a hard disk exclusively for FORTH SCREENS. In still
other systems, I can access FORTH SCREENS as random records in DOS files. But
these techniques are more advanced. I will try to clean up the various
techniques I use and put them on BBSs as time allows.
FORTH is the most powerful programming language I know.
The user is responsible for the use of all of that power.
FORTH originated as a simplified operating system.
FORTH grew to emulate a simple necessary and sufficient processor.
To use FORTH, master the few kernel functions.
KEEP IT SIMPLE.
PAGE 60,96
TITLE 'MVPFORTH VERSION 1.0405.03 - 21 APRIL 83'
;
; MVPFORTH KERNEL VERSION 1.0405.03
;
; A FORTH OPERATING SYSSTEM
;
; FORTH THE IBM PERSONAL COMPUTER
;
;
; PREPARED FOR
;
; MOUNTAIN VIEW PRESS, INC.
; PO BOX 4656
; MOUNTAIN VIEW, CA 94040
;
; IMPLEMENTATION BY
;
; HAYDON ENTERPRISES
; BOX 429 ROUTE 2
; LA HONDA, CA 94020
;
;
;THIS PUBLICATION IS PLACED IN THE PUBLIC
;DOMAIN. PERMISSION TO DISTRIBUTE IS GRANTED
;BY THE INCLUSION OF CREDIT TO MOUNTAIN VIEW
;PRESS, INC., AND HAYDON ENTERPRISES.
;
;
;THIS IMPLEMENTATION INCLUDES THE ENTIRE
;FORTH-79 REQUIRED WORD SET. THE BOOK
;"ALL ABOUT FORTH" BY GLEN B. HAYDON FULLY
;DOCUMENTS MVPFORTH. IT IS AVAILABLE FROM
;MOUNTAIN VIEW PRESS, INC.
;
;THE IMPLEMENTATION HAS BEEN TRANSCRIBED FROM
;THE ORIGINAL CROSS COMPILER VER. 1.0000.02 .
;IT WILL ASSEMBLE WITH "MASM.COM" UNDER MDOS
;VER. 1.0 OR 1.1 .
;
;UPDATE: ?STACK, BUFFER, COLD, LIST
;20 FEB 1983
;THE PUBLISHED MVP-FORTH SOURCE LISTING FOR
;THE IBM - PC HAS BEEN EDITED. THE DELETED
;PORTIONS HAVE BEEN COMMENTED OUT, AND THE
;NEW PORTIONS HAVE BEEN LABELED " ; 1.0405.03".
;21 APRIL 1983
PAGE
;
;THE FORTH REGISTERS ARE ASSIGNED ACCORDING
;TO FIG-FORTH FOR THE 8086/88, VERSION 1.0,
;AS IMPLEMENTED BY THOMAS NEWMAN, 27444
;BERENDA WAY, HAYWARD, CA 94544, AND MADE
;AVAILABLE BY THE FORTH INTEREST GROUP,
;BOX 1105, SAN CARLOS, CA 94070.
;
;FORTH REGISTERS
;
;FORTH 8088 FORTH PRESERVATION RULES
;
; IP SI INTERPRETER POINTER.
; MUST BE PRESERVED
; ACROSS FORTH WORDS.
;
; W DX WORKING REGISTER.
; JUMP TO 'DPUSH' WILL
; PUSH CONTENTS ONTO THE
; PARAMETER STACK BEFORE
; EXECUTING 'APUSH'.
;
; SP SP PARAMETER STACK POINTER.
; MUST BE PRESERVED ACROSS
; FORTH WORDS. THIS IS ALSO
; THE SYSTEM STACK, WHICH
; IS SOMETIMES CALLED THE
; HARDWARE STACK -HS .
;
; RP BP RETURN STACK POINTER.
; MUST BE PRESERVED ACROSS
; FORTH WORDS.
;
;
;IN ADDITION, THE 8088 CODE SEGMENT, DATA
;SEGMENT AND STACK SEGMENT REGISTERS ( CS,
;DS, AND SS, MUST BE PRESERVED ACROSS
;FORTH WORDS.
;
;THE OTHER REGISTERS OF THE 8088 CPU MAY
;BE USED FREELY.
;
;10 AUGUST 1982
PAGE
;
; EQUATES:
;
ABL EQU 20H
ACR EQU 0DH
AMINUS EQU 2DH
ADOT EQU 2EH
BELL EQU 07H
ALF EQU 0AH
FFEED EQU 0CH
ADEL EQU 7FH
ADLE EQU 10H
BSOUT EQU 08H
BSIN EQU 08H
;
;
;
BPS EQU 80H
EM EQU 6000H
HDBT EQU 404H
NBUF EQU 02H
BUF1 EQU EM-HDBT*NBUF
US EQU 52H
INITR0 EQU BUF1-US
RTS EQU 0A0H
INITSP0 EQU INITR0-RTS
;
STACK SEGMENT PARA STACK
DB 200H DUP( 0 )
STACK ENDS
;
FSEG SEGMENT COMMON
ASSUME CS:FSEG,SS:STACK,DS:FSEG,ES:FSEG
PAGE
;
ORG 100H
;
ORIG: MOV AX,CS
MOV DS,AX
MOV SS,AX
MOV ES,AX
MOV SI,TCOLD
MOV SP,INITUSER
MOV BP,RPP
JMP NEXT
TCOLD DW TCOLD1
TCOLD1 DW COLD
;
;
INITFORTH DW RBRAC-4
INITUSER DW INITSP0
;
DW INITR0
DW INITSP0
DW 01FH
DW 01H
;
;
INITFENCE DW RBRAC-4
INITDP DW RBRAC+0CH
INITVOCLINK DW FORTH+6
;
;
DW ADFIND
DW AQTERM
DW AABORT
DW ABLOCK
DW ACRA
DW AEMIT
DW AEXPECT
DW AINTER
DW AKEY
DW ALOAD
DW ANUM
DW APAGE
DW ARSLW
DW ATSCALC
DW AV79
DW AWORD
UP DW INITR0
RPP DW INITR0
;
;
;
PAGE
;
;
;
DPUSH: PUSH DX
APUSH: PUSH AX
NEXT: MOV AX,[SI]
INC SI
INC SI
MOV BX,AX
NEXT1: MOV DX,BX
INC DX
JMP WORD PTR [BX]
;
;
;
DP0 DB 81H ; STORE
DB '!'+80H
DW 0
STORE DW $+2
POP BX
POP AX
MOV [BX],AX
JMP NEXT
;
DB 82H ; STOREL
DB '!'
DB 'L'+80H
DW STORE-4
STOREL DW $+2
POP BX
POP DS
POP AX
MOV [BX],AX
MOV BX,CS
MOV DS,BX
JMP NEXT
;
DB 81H ; #
DB '#'+80H
DW STOREL-5
DIG DW DOCOL
DW BASE
DW ATT
DW MSMOD
DW ROT
DW LIT
DW 9
DW OVER
DW LESS
DW ZBRAN
DW OFFSET DIG1-$
DW LIT
DW 7
DW PLUS
DIG1 DW LIT
DW 30H
DW PLUS
DW HOLD
DW EXIT
;
DB 82H ; #>
DB '#'
DB '>'+80H
DW DIG-4
EDIGS DW DOCOL
DW DDROP
DW HLD
DW ATT
DW PAD
DW OVER
DW SUBB
DW EXIT
;
DB 85H ; #BUFF
DB '#BUF'
DB 'F'+80H
DW EDIGS-5
NOBUF DW DOCON
DW NBUF
;
DB 82H ; #S
DB '#'
DB 'S'+80H
DW NOBUF-8
DIGS DW DOCOL
DIGS1 DW DIG
DW DDUP
DW ORR
DW NOTT
DW ZBRAN
DW OFFSET DIGS1-$
DW EXIT
;
DB 0C1H ; '
DB 0A7H
DW DIGS-5
TICK DW DOCOL
DW DFIND
DW NOTT
DW AABORTQ
DB 09H
DB 'NOT FOUND'
DW DROP
DW LITER
DW EXIT
;
DB 86H ; '-FIND
DB 27H,'-FIN'
DB 'D'+80H
DW TICK-4
TDFIND DW DOUSE
DW 16H
;
DB 8AH ; '?TERMINAL
DB 27H,'?TERMINA'
DB 'L'+80H
DW TDFIND-9
TQTERM DW DOUSE
DW 18H
;
DB 86H ; 'ABORT
DB 27H,'ABOR'
DB 'T'+80H
DW TQTERM-0DH
TABORT DW DOUSE
DW 1AH
;
DB 86H ; 'BLOCK
DB 27H,'BLOC'
DB 'K'+80H
DW TABORT-9
TBLOCK DW DOUSE
DW 1CH
;
DB 83H ; 'CR
DB 27H,'C'
DB 'R'+80H
DW TBLOCK-9
TCR DW DOUSE
DW 1EH
;
DB 85H ; 'EMIT
DB 27H,'EMI'
DB 'T'+80H
DW TCR-6
TEMIT DW DOUSE
DW 20H
;
DB 87H ; 'EXPECT
DB 27H,'EXPEC'
DB 'T'+80H
DW TEMIT-8
TEXPECT DW DOUSE
DW 22H
;
DB 8AH ; 'INTERPRET
DB 27H,'INTERPRE'
DB 'T'+80H
DW TEXPECT-0AH
TINTER DW DOUSE
DW 24H
;
DB 84H ; 'KEY
DB 27H,'KE'
DB 'Y'+80H
DW TINTER-0DH
TKEY DW DOUSE
DW 26H
;
DB 85H ; 'LOAD
DB 27H,'LOA'
DB 'D'+80H
DW TKEY-7
TLOAD DW DOUSE
DW 28H
;
DB 87H ; 'NUMBER
DB 27H,'NUMBE'
DB 'R'+80H
DW TLOAD-8
TNUM DW DOUSE
DW 2AH
;
DB 85H ; 'PAGE
DB 27H,'PAG'
DB 'E'+80H
DW TNUM-0AH
TPAGE DW DOUSE
DW 2CH
;
DB 84H ; 'R/W
DB 27H,'R/'
DB 'W'+80H
DW TPAGE-8
TRSLW DW DOUSE
DW 2EH
;
DB 87H ; 'STREAM
DB 27H,'STREA'
DB 'M'+80H
DW TRSLW-7
TSTREAM DW DOCOL
DW BLK
DW ATT
DW QDUP
DW ZBRAN
DW TSTRM1-$
DW BLOCK
DW BRAN
DW TSTRM2-$
TSTRM1 DW TIB
DW ATT
TSTRM2 DW TOIN
DW ATT
DW PLUS
DW EXIT
;
DB 88H ; 'T&SCALC
DB 27H,'T&SCAL'
DB 'C'+80H
DW TSTREAM-0AH
TTSCALC DW DOUSE
DW 30H
;
DB 8BH ; 'VOCABULARY
DB 27H,'VOCABULAR'
DB 'Y'+80H
DW TTSCALC-0BH
TVOCAB DW DOUSE
DW 32H
;
DB 85H ; 'WORD
DB 27H,'WOR'
DB 'D'+80H
DW TVOCAB-0EH
TWORD DW DOUSE
DW 34H
;
DB 0C1H ; (
DB '('+80H
DW TWORD-8
PAREN DW DOCOL
DW LIT
DW 0FFFFH
DW TOIN
DW PSTOR
DW LIT
DW 29H
DW WORDD
DW CAT
DW ONEP
DW HERE
DW PLUS
DW CAT
DW LIT
DW 29H
DW EQUAL
DW NOTT
DW QSTREAM
DW EXIT
;
DB 81H ; *
DB '*'+80H
DW PAREN-4
STAR DW DOCOL
DW USTAR
DW DROP
DW EXIT
;
DB 82H ; */
DB '*'
DB '/'+80H
DW STAR-4
SSLA DW DOCOL
DW SSMOD
DW SWAP
DW DROP
DW EXIT
;
DB 85H ; */MOD
DB '*/MO'
DB 'D'+80H
DW SSLA-5
SSMOD DW DOCOL
DW TOR
DW MSTAR
DW FROMR
DW MSLAS
DW EXIT
;
DB 81H ; +
DB '+'+80H
DW SSMOD-8
PLUS DW $+2
POP AX
POP BX
ADD AX,BX
JMP APUSH
;
DB 82H ; +STORE
DB '+'
DB '!'+80H
DW PLUS-4
PSTOR DW $+2
POP BX
POP AX
ADD [BX],AX
JMP NEXT
;
DB 82H ; +-
DB '+'
DB '-'+80H
DW PSTOR-5
PM DW DOCOL
DW ZLESS
DW ZBRAN
DW OFFSET PM1-$
DW NEG
PM1 DW EXIT
;
DB 84H ; +BUF
DB '+BU'
DB 'F'+80H
DW PM-5
PBUF DW DOCOL
DW LIT
DW HDBT
DW PLUS
DW DUPP
DW LIMIT
DW EQUAL
DW ZBRAN
DW OFFSET PBUF1-$
DW DROP
DW FIRST
PBUF1 DW DUPP
DW PREV
DW ATT
DW SUBB
DW EXIT
;
DB 0C5H ; +LOOP
DB '+LOO'
DB 'P'+80H
DW PBUF-7
PLOOP DW DOCOL
DW LIT
DW 3
DW QPAIR
DW COMP
DW APLOOP
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 81H ; ,
DB ','+80H
DW PLOOP-8
COMMA DW DOCOL
DW HERE
DW STORE
DW TWO
DW ALLOT
DW EXIT
;
DB 81H ; -
DB '-'+80H
DW COMMA-4
SUBB DW $+2
POP DX
POP AX
SUB AX,DX
JMP APUSH
;
DB 85H ; -FIND
DB '-FIN'
DB 'D'+80H
DW SUBB-4
DFIND DW DOCOL
DW TDFIND
DW ATT
DW EXEC
DW EXIT
;
DB 89H ; -TRAILING
DB '-TRAILIN'
DB 'G'+80H
DW DFIND-8
DTRAI DW DOCOL
DW DUPP
DW ZERO
DW ADO
DTRAI1 DW DDUP
DW PLUS
DW ONEM
DW CAT
DW BLL
DW SUBB
DW ZBRAN
DW OFFSET DTRAI2-$
DW LEAVE
DW BRAN
DW OFFSET DTRAI3-$
DTRAI2 DW ONEM
DTRAI3 DW ALOOP
DW OFFSET DTRAI1-$
DW EXIT
;
DB 81H ; .
DB '.'+80H
DW DTRAI-0CH
DOT DW DOCOL
DW STOD
DW DDOT
DW EXIT
;
DB 0C2H ; ."
DB '.'
DB '"'+80H
DW DOT-4
DOTQ DW DOCOL
DW TSTREAM
DW CAT
DW LIT
DW 22H
DW EQUAL
DW ZBRAN
DW OFFSET DOTQ1-$
DW ONE
DW TOIN
DW PSTOR
DW BRAN
DW OFFSET DOTQ2-$
DOTQ1 DW LIT
DW 22H
DW STATE
DW ATT
DW ZBRAN
DW OFFSET DOTQ3-$
DW COMP
DW ADOTQ
DOTQ3 DW WORDD
DW DUPP
DW CAT
DW ONEP
DW OVER
DW PLUS
DW CAT
DW LIT
DW 22H
DW EQUAL
DW NOTT
DW QSTREAM
DW STATE
DW ATT
DW ZBRAN
DW OFFSET DOTQ4-$
DW CAT
DW ONEP
DW ALLOT
DW BRAN
DW OFFSET DOTQ2-$
DOTQ4 DW COUNT
DW TYPEE
DOTQ2 DW EXIT
;
DB 85H ; .LINE
DB '.LIN'
DB 'E'+80H
DW DOTQ-5
DLINE DW DOCOL
DW ALINE
DW DTRAI
DW TYPEE
DW EXIT
;
DB 82H ; .R
DB '.'
DB 'R'+80H
DW DLINE-8
DOTR DW DOCOL
DW TOR
DW STOD
DW FROMR
DW DDOTR
DW EXIT
;
DB 81H ; /
DB '/'+80H
DW DOTR-5
SLASH DW DOCOL
DW SLMOD
DW SWAP
DW DROP
DW EXIT
;
DB 0C5H ; /LOOP
DB '/LOO'
DB 'P'+80H
DW SLASH-4
UPLOOP DW DOCOL
DW LIT
DW 3
DW QPAIR
DW COMP
DW AUPLOOP
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 84H ; /MOD
DB '/MO'
DB 'D'+80H
DW UPLOOP-8
SLMOD DW DOCOL
DW TOR
DW STOD
DW FROMR
DW MSLAS
DW EXIT
;
DB 81H ; 0
DB '0'+80H
DW SLMOD-7
ZERO DW DOCON
DW 00
;
DB 82H ; 0<
DB '0'
DB '<'+80H
DW ZERO-4
ZLESS DW $+2
POP AX
OR AX,AX
MOV AX,1
JS ZLES1
DEC AX
ZLES1: JMP APUSH
;
DB 82H ; 0=
DB '0'
DB '='+80H
DW ZLESS-5
ZEQU DW DOCOL
DW NOTT
DW EXIT
;
DB 82H ; 0>
DB '0'
DB '>'+80H
DW ZEQU-5
ZGREAT DW DOCOL
DW ZERO
DW GREAT
DW EXIT
;
DB 87H ; 0BRANCH
DB '0BRANC'
DB 'H'+80H
DW ZGREAT-5
ZBRAN DW $+2
POP AX
OR AX,AX
JZ ZBRAN1
INC SI
INC SI
JMP NEXT
ZBRAN1: JMP BRAN1
;
DB 81H ; 1
DB '1'+80H
DW ZBRAN-0AH
ONE DW DOCON
DW 01
;
DB 82H ; 1+
DB '1'
DB '+'+80H
DW ONE-4
ONEP DW $+2
POP AX
INC AX
JMP APUSH
;
DB 82H ; 1-
DB '1'
DB '-'+80H
DW ONEP-5
ONEM DW $+2
POP AX
DEC AX
JMP APUSH
;
DB 81H ; 2
DB '2'+80H
DW ONEM-5
TWO DW DOCON
DW 02
;
DB 82H ; 2*
DB '2'
DB '*'+80H
DW TWO-4
TWOST DW $+2
POP AX
ADD AX,AX
JMP APUSH
;
DB 82H ; 2+
DB '2'
DB '+'+80H
DW TWOST-5
TWOP DW $+2
POP AX
INC AX
INC AX
JMP APUSH
;
DB 82H ; 2-
DB '2'
DB '-'+80H
DW TWOP-5
TWOM DW $+2
POP AX
DEC AX
DEC AX
JMP APUSH
;
DB 82H ; 2/
DB '2'
DB '/'+80H
DW TWOM-5
TWOSL DW DOCOL
DW TWO
DW SLASH
DW EXIT
;
DB 8BH ; 79-STANDARD
DB '79-STANDAR'
DB 'D'+80H
DW TWOSL-5
STAND DW DOCOL
DW EXIT
;
DB 81H ; :
DB ':'+80H
DW STAND-0EH
COLON DW DOCOL
DW SPAT
DW CSP
DW STORE
DW CURR
DW ATT
DW CONT
DW STORE
DW CREATE
DW SMUDG
DW RBRAC
DW ASCODE
DOCOL: INC DX
DEC BP
DEC BP
MOV [BP],SI
MOV SI,DX
JMP NEXT
;
DB 0C1H ; ;
DB ';'+80H
DW COLON-4
SEMI DW DOCOL
DW QCSP
DW COMP
DW EXIT
DW SMUDG
DW LBRAC
DW EXIT
;
DB 81H ; <
DB '<'+80H
DW SEMI-4
LESS DW $+2
POP DX
POP AX
MOV BX,DX
XOR BX,AX
JS LES1
SUB AX,DX
LES1: OR AX,AX
MOV AX,0
JNS LES2
INC AX
LES2: JMP APUSH
;
DB 82H ; <#
DB '<'
DB '#'+80H
DW LESS-4
BDIGS DW DOCOL
DW PAD
DW HLD
DW STORE
DW EXIT
;
DB 87H ; <+LOOP>
DB '<+LOOP'
DB '>'+80H
DW BDIGS-5
APLOOP DW $+2
POP BX
JMP ALOOP1
;
DB 87H ; <-FIND>
DB '<-FIND'
DB '>'+80H
DW APLOOP-0AH
ADFIND DW DOCOL
DW BLL
DW WORDD
DW CONT
DW ATT
DW ATT
DW AFIND
DW EXIT
;
DB 84H ; <.">
DB '<."'
DB '>'+80H
DW ADFIND-0AH
ADOTQ DW DOCOL
DW RAT
DW COUNT
DW DUPP
DW ONEP
DW FROMR
DW PLUS
DW TOR
DW TYPEE
DW EXIT
;
DB 87H ; </LOOP>
DB '</LOOP'
DB '>'+80H
DW ADOTQ-7
AUPLOOP DW $+2
POP BX
ADD [BP],BX
JB AUPLO1
MOV AX,[BP]
SUB AX,2[BP]
JNB AUPLO1
JMP BRAN1
AUPLO1: ADD BP,4H
INC SI
INC SI
JMP NEXT
;
DB 87H ; <;CODE>
DB '<;CODE'
DB '>'+80H
DW AUPLOOP-0AH
ASCODE DW DOCOL
DW FROMR
DW LATES
DW PFA
DW CFA
DW STORE
DW EXIT
;
DB 88H ; <<CMOVE>
DB '<<CMOVE'
DB '>'+80H
DW ASCODE-0AH
ADCMOVE DW $+2
MOV BX,SI
POP CX
POP DI
ADD DI,CX
DEC DI
POP SI
ADD SI,CX
DEC SI
STD
REP MOVSB
CLD
MOV SI,BX
JMP NEXT
;
DB 8BH ; <?TERMINAL> ( --- C , F )
DB '<?TERMINAL'
DB '>'+80H
DW ADCMOVE-0BH
;AQTERM DW $+2
; PUSH DS
; PUSH BX
; MOV BX,40H
; MOV DS,BX
; MOV BX,1AH
; MOV CX,[BX]
; MOV AX,CX
; MOV BX,1CH
; SUB AX,[BX]
; MOV [BX],CX
; JZ AQTER1
; MOV AX,[BX]
; MOV BX,AX
; MOV AX,[BX]
; SUB AH,AH
;AQTER1: POP BX
; POP DS
; JMP APUSH
AQTERM DW DOCOL ; 1.0405.03
DW LIT ; 1.0405.03
DW 0600H ; 1.0405.03
DW ZERO ; 1.0405.03
DW ZERO ; 1.0405.03
DW LIT ; 1.0405.03
DW 0FFH ; 1.0405.03
DW LIT ; 1.0405.03
DW 21H ; 1.0405.03
DW INTCAL ; 1.0405.03
DW LIT ; 1.0405.03
DW 0FFH ; 1.0405.03
DW ANDD ; 1.0405.03
DW EXIT ; 1.0405.03
;
DB 88H ; <ABORT">
DB '<ABORT"'
DB '>'+80H
DW AQTERM-0EH
AABORTQ DW DOCOL
DW ZBRAN
DW AABTQ1-$
DW WHERE
DW CR
DW RAT
DW COUNT
DW TYPEE
DW SPSTO
DW QUIT
DW BRAN
DW AABTQ2-$
AABTQ1 DW FROMR
DW DUPP
DW CAT
DW PLUS
DW ONEP
DW TOR
AABTQ2 DW EXIT
;
DB 87H ; <ABORT>
DB '<ABORT'
DB '>'+80H
DW AABORTQ-0BH
AABORT DW DOCOL
DW SPSTO
DW QSTAC
DW FORTH
DW DEFIN
DW QUIT
DW EXIT
;
DB 87H ; <BLOCK>
DB '<BLOCK'
DB '>'+80H
DW AABORT-0AH
ABLOCK DW DOCOL
DW OFSET
DW ATT
DW PLUS
DW TOR
DW PREV
DW ATT
DW DUPP
DW ATT
DW RAT
DW SUBB
DW TWOST
DW ZBRAN
DW OFFSET ABLOCK3-$
ABLOCK1 DW PBUF
DW NOTT
DW ZBRAN
DW OFFSET ABLOCK2-$
DW DROP
DW RAT
DW BUFFE
DW DUPP
DW RAT
DW ONE
DW RSLW
DW TWOM
ABLOCK2 DW DUPP
DW ATT
DW RAT
DW SUBB
DW TWOST
DW NOTT
DW ZBRAN
DW OFFSET ABLOCK1-$
DW DUPP
DW PREV
DW STORE
ABLOCK3 DW FROMR
DW DROP
DW TWOP
DW EXIT
;
DB 86H ; <CMOVE
DB '<CMOV'
DB 'E'+80H
DW ABLOCK-0AH
DCMOVE DW DOCOL
DW DUPP
DW ONE
DW LESS
DW ZBRAN
DW DCMOVE1-$
DW DDROP
DW DROP
DW BRAN
DW DCMOVE2-$
DCMOVE1 DW ADCMOVE
DCMOVE2 DW EXIT
;
DB 87H ; <CMOVE>
DB '<CMOVE'
DB '>'+80H
DW DCMOVE-09
ACMOVE DW $+2
CLD
MOV BX,SI
POP CX
POP DI
POP SI
MOV AX,DS
MOV ES,AX
REP MOVSB
MOV SI,BX
JMP NEXT
;
DB 84H ; <CR>
DB '<CR'
DB '>'+80H
DW ACMOVE-0AH
ACRA DW DOCOL
DW LIT
DW 0DH
DW EMIT
DW LIT
DW 0AH
DW EMIT
DW ZERO
DW OUTT
DW STORE
DW EXIT
;
DB 84H ; <DO>
DB '<DO'
DB '>'+80H
DW ACRA-7
ADO DW $+2
POP DX
POP AX
XCHG BP,SP
PUSH AX
PUSH DX
XCHG BP,SP
JMP NEXT
;
DB 86H ; <EMIT>
DB '<EMIT'
DB '>'+80H
DW ADO-7
AEMIT DW DOCOL
DW EPRINT
DW ATT
DW ZBRAN
DW OFFSET AEMIT1-$
DW DUPP
; DW ZERO
; DW ZERO
; DW ZERO
; DW LIT
; DW 17H
DW LIT ; 1.0405.03
DW 0500H ; 1.0405.03
DW ZERO ; 1.0405.03
DW ROT ; 1.0405.03
DW ZERO ; 1.0405.03
DW SWAP ; 1.0405.03
DW LIT ; 1.0405.03
DW 21H ; 1.0405.03
DW INTCAL
DW DROP
AEMIT1 DW LIT
; DW 0E00H
; DW PLUS
; DW LIT
; DW 07H
; DW ZERO
; DW ZERO
; DW LIT
; DW 10H
DW 0200H ; 1.0405.03
DW ZERO ; 1.0405.03
DW ROT ; 1.0405.03
DW ZERO ; 1.0405.03
DW SWAP ; 1.0405.03
DW LIT ; 1.0405.03
DW 21H ; 1.0405.03
DW INTCAL
DW DROP
DW ONE
DW OUTT
DW PSTOR
DW EXIT
;
DB 88H ; <EXPECT>
DB '<EXPECT'
DB '>'+80H
DW AEMIT-9
AEXPECT DW DOCOL
DW OVER
DW PLUS
DW OVER
DW ADO
AEXPEC1 DW KEY
DW DUPP
DW LIT
DW 8
DW EQUAL
DW OVER
DW LIT
DW 7FH
DW EQUAL
DW ORR
DW ZBRAN
DW OFFSET AEXPEC4-$
DW DROP
DW DUPP
DW IDO
DW EQUAL
DW DUPP
DW FROMR
DW TWOM
DW PLUS
DW TOR
DW ZBRAN
DW OFFSET AEXPEC2-$
DW LIT
DW 7
DW BRAN
DW OFFSET AEXPEC3-$
AEXPEC2 DW LIT
DW 8
DW DUPP
DW EMIT
DW LIT
DW 20H
DW EMIT
DW LIT
DW 0FFFDH
DW OUTT
DW PSTOR
AEXPEC3 DW BRAN
DW OFFSET AEXPEC7-$
AEXPEC4 DW DUPP
DW LIT
DW 0DH
DW EQUAL
DW ZBRAN
DW OFFSET AEXPEC5-$
DW LEAVE
DW DROP
DW BLL
DW ZERO
DW BRAN
DW OFFSET AEXPEC6-$
AEXPEC5 DW DUPP
AEXPEC6 DW IDO
DW CSTOR
DW ZERO
DW IDO
DW ONEP
DW STORE
AEXPEC7 DW EMIT
DW ONE
DW AUPLOOP
DW OFFSET AEXPEC1-$
DW DROP
DW EXIT
;
DB 86H ; <FILL>
DB '<FILL'
DB '>'+80H
DW AEXPECT-0BH
AFILL DW $+2
POP AX
POP CX
POP DI
MOV BX,DS
MOV ES,BX
CLD
REP STOSB
JMP NEXT
;
DB 86H ; <FIND>
DB '<FIND'
DB '>'+80H
DW AFILL-9
AFIND DW $+2
MOV AX,DS
MOV ES,AX
POP BX
POP CX
AFIND1: MOV DI,CX
MOV AL,[BX]
MOV DL,AL
XOR AL,[DI]
AND AL,3FH
JNZ AFIND3
AFIND2: INC BX
INC DI
MOV AL,[BX]
XOR AL,[DI]
ADD AL,AL
JNZ AFIND3
JNB AFIND2
ADD BX,5
PUSH BX
MOV AX,1
SUB DH,DH
JMP DPUSH
AFIND3: INC BX
JB AFIND4
MOV AL,[BX]
ADD AL,AL
JMP AFIND3
AFIND4: MOV BX,[BX]
OR BX,BX
JNZ AFIND1
MOV AX,0
JMP APUSH
;
DB 8BH ; <INTERPRET>
DB '<INTERPRET'
DB '>'+80H
DW AFIND-9
AINTER DW DOCOL
AINTER1 DW DFIND
DW ZBRAN
DW OFFSET AINTER4-$
DW STATE
DW ATT
DW LESS
DW ZBRAN
DW OFFSET AINTER2-$
DW CFA
DW COMMA
DW BRAN
DW OFFSET AINTER3-$
AINTER2 DW CFA
DW EXEC
AINTER3 DW BRAN
DW OFFSET AINTER6-$
AINTER4 DW HERE
DW NUM
DW DPL
DW ATT
DW ONEP
DW ZBRAN
DW OFFSET AINTER5-$
DW DLITE
DW BRAN
DW OFFSET AINTER6-$
AINTER5 DW DROP
DW LITER
AINTER6 DW QSTAC
DW BRAN
DW OFFSET AINTER1-$
DW EXIT
;
DB 85H ; <KEY>
DB '<KEY'
DB '>'+80H
DW AINTER-0EH
AKEY DW DOCOL
;AKEY1 DW ZERO
AKEY1 DW LIT ; 1.0405.03
DW 0700H ; 1.0405.03
DW ZERO
DW ZERO
DW ZERO
DW LIT
; DW 16H
DW 21H ; 1.0405.03
DW INTCAL
DW LIT
DW 0FFH
DW ANDD
DW DUPP
DW LIT
DW 10H
DW SUBB
DW NOTT
DW ZBRAN
DW OFFSET AKEY2-$
DW DROP
DW ONE
DW EPRINT
DW ATT
DW XORR
DW EPRINT
DW STORE
DW BRAN
DW OFFSET AKEY1-$
AKEY2 DW EXIT
;
DB 86H ; <LINE>
DB '<LINE'
DB '>'+80H
DW AKEY-8
ALINE DW DOCOL
DW BLOCK
DW SWAP
DW CSLL
DW STAR
DW PLUS
DW CSLL
DW EXIT
;
DB 86H ; <LOAD>
DB '<LOAD'
DB '>'+80H
DW ALINE-9
ALOAD DW DOCOL
DW QDUP
DW NOTT
DW AABORTQ
DB 0AH
DB 'UNLOADABLE'
DW BLK
DW ATT
DW TOR
DW TOIN
DW ATT
DW TOR
DW ZERO
DW TOIN
DW STORE
DW BLK
DW STORE
DW INTER
DW FROMR
DW TOIN
DW STORE
DW FROMR
DW BLK
DW STORE
DW EXIT
;
DB 86H ; <LOOP>
DB '<LOOP'
DB '>'+80H
DW ALOAD-9
ALOOP DW $+2
MOV BX,1H
ALOOP1: MOV CX,[BP]
ADD [BP],BX
JS ALOOP2
MOV AX,CX
AND AX,BX
JNS ALOOP3
ALOOP2: MOV AX,CX
OR AX,BX
JNS ALOOP8
ALOOP3: MOV AX,[BP]
SUB AX,2[BP]
JS ALOOP7
MOV AX,[BP]
AND AX,AX
JS ALOOP5
ALOOP4: MOV AX,BX
AND AX,AX
JNS ALOOP8
JMP BRAN1
ALOOP5: MOV AX,2[BP]
AND AX,AX
JS ALOOP4
ALOOP6: MOV AX,BX
AND AX,AX
JS ALOOP8
JMP BRAN1
ALOOP7: MOV AX,[BP]
AND AX,AX
JS ALOOP6
JMP ALOOP5
ALOOP8: ADD BP,4H
INC SI
INC SI
JMP NEXT
;
DB 88H ; <NUMBER>
DB '<NUMBER'
DB '>'+80H
DW ALOOP-9
ANUM DW DOCOL
DW ZERO
DW ZERO
DW ROT
DW DUPP
DW ONEP
DW CAT
DW LIT
DW 2DH
DW EQUAL
DW DUPP
DW TOR
DW PLUS
DW LIT
DW 0FFFFH
DW DPL
DW STORE
DW CONV
DW DUPP
DW CAT
DW BLL
DW GREAT
DW ZBRAN
DW OFFSET ANUM1-$
DW DUPP
DW CAT
DW LIT
DW 2EH
DW EQUAL
DW NOTT
DW AABORTQ
DB 0EH
DB 'NOT RECOGNIZED'
DW ZERO
DW DPL
DW STORE
DW CONV
DW DUPP
DW CAT
DW BLL
DW GREAT
DW AABORTQ
DB 0EH
DB 'NOT RECOGNIZED'
ANUM1 DW DROP
DW FROMR
DW ZBRAN
DW OFFSET ANUM2-$
DW DNEG
ANUM2 DW EXIT
;
DB 86H ; <PAGE>
DB '<PAGE'
DB '>'+80H
DW ANUM-0BH
APAGE DW DOCOL
; DW ZERO
; DW ZERO
; DW ZERO
; DW ZERO
; DW LIT
; DW 10H
; DW INTCAL
; DW DROP
DW LIT ; 1.0405.03
DW 0DH ; 1.0405.03
DW EMIT ; 1.0405.03
DW LIT ; 1.0405.03
DW 0AH ; 1.0405.03
DW EMIT ; 1.0405.03
DW EXIT
;
DB 85H ; <R/W>
DB '<R/W'
DB '>'+80H
DW APAGE-9
ARSLW DW DOCOL
DW USEE
DW ATT
DW TOR
DW ROT
DW USEE
DW STORE
DW SWAP
DW MAXDRV
DW ZERO
DW ADO
ARSLW1 DW IDO
DW DRDEN
DW DENSTY
DW STORE
DW DUPP
DW BPDRV
DW SUBB
DW LIT
DW 0FFFFH
DW GREAT
DW ZBRAN
DW ARSLW3-$
DW BPDRV
DW SUBB
DW IDO
DW ONEP
DW MAXDRV
DW EQUAL
DW ZBRAN
DW ARSLW2-$
DW FROMR
DW FROMR
DW DDROP
DW FROMR
DW USEE
DW STORE
DW ONE
DW AABORTQ
DB 12H
DB 'BLOCK OUT OF RANGE'
ARSLW2 DW BRAN
DW ARSLW4-$
ARSLW3 DW IDO
DW DRIVE
DW STORE
DW LEAVE
ARSLW4 DW ALOOP
DW ARSLW1-$
DW SPBLK
DW STAR
DW SPBLK
DW ZERO
DW ADO
ARSLW5 DW DDUP
DW TSCALC
DW ZBRAN
DW ARSLW6-$
DW SECRD
DW BRAN
DW ARSLW7-$
ARSLW6 DW SECWT
ARSLW7 DW ONEP
DW LIT
DW 404H
DW LIT
DW 4
DW SUBB
DW SPBLK
DW SLASH
DW USEE
DW PSTOR
DW ALOOP
DW ARSLW5-$
DW DDROP
DW FROMR
DW USEE
DW STORE
DW EXIT
;
DB 89H ; <T&SCALC>
DB '<T&SCALC'
DB '>'+80H
DW ARSLW-8
ATSCALC DW DOCOL
; DW SPT
; DW SLMOD
; DW TRACK
; DW STORE
; DW DEN
; DW DRIVE
; DW ATT
; DW TWOST
; DW PLUS
; DW ATT
; DW ONE
; DW EQUAL
; DW ZBRAN
; DW ATSCAL2-$
; DW LIT
; DW 08H
; DW SLMOD
; DW DRIVE
; DW ATT
; DW LIT
; DW 0FH
; DW ANDD
; DW SWAP
; DW ZBRAN
; DW ATSCAL1-$
; DW LIT
; DW 100H
; DW PLUS
;ATSCAL1 DW DRIVE
; DW STORE
;ATSCAL2 DW ONEP
DW DENSTY ; 1.0405.03
DW ATT ; 1.0405.03
DW ONE ; 1.0405.03
DW EQUAL ; 1.0405.03
DW ZBRAN ; 1.0405.03
DW ATSCAL2-$ ; 1.0405.03
DW SPT ; 1.0405.03
DW TWOST ; 1.0405.03
DW SLMOD ; 1.0405.03
DW SWAP ; 1.0405.03
DW SPT ; 1.0405.03
DW SLMOD ; 1.0405.03
DW ZBRAN ; 1.0405.03
DW ATSCAL1-$ ; 1.0405.03
DW LIT ; 1.0405.03
DW 140H ; 320 1.0405.03
DW PLUS ; 1.0405.03
ATSCAL1 DW SWAP ; 1.0405.03
DW SPT ; 1.0405.03
DW STAR ; 1.0405.03
DW PLUS ; 1.0405.03
ATSCAL2 DW SEC
DW STORE
DW EXIT
;
DB 8EH ; <VOCABULARY79>
DB '<VOCABULARY79'
DB '>'+80H
DW ATSCALC-0CH
AV79 DW DOCOL
DW CREATE
DW LIT
DW 0A081H
DW COMMA
DW LIT
DW FORTH+2
DW COMMA
DW HERE
DW VOCL
DW ATT
DW COMMA
DW VOCL
DW STORE
DW ASCODE
DOVOC DB 0E8H
DW DODOES-$-2
DW TWOP
DW CONT
DW STORE
DW EXIT
;
DB 8FH ; <VOCABULARYFIG>
DB '<VOCABULARYFIG'
DB '>'+80H
DW AV79-11H
AVFIG DW DOCOL
DW CREATE
DW LIT
DW 0A081H
DW COMMA
DW CURR
DW ATT
DW CFA
DW COMMA
DW HERE
DW VOCL
DW ATT
DW COMMA
DW VOCL
DW STORE
DW ASCODE
DB 0E8H
DW DODOES-$-2
DW TWOP
DW CONT
DW STORE
DW EXIT
;
DB 86H ; <WORD>
DB '<WORD'
DB '>'+80H
DW AVFIG-12H
AWORD DW DOCOL
DW TSTREAM
DW SWAP
DW ENCL
DW DDUP
DW GREAT
DW ZBRAN
DW OFFSET AWORD1-$
DW DDROP
DW DDROP
DW ZERO
DW HERE
DW STORE
DW BRAN
DW OFFSET AWORD2-$
AWORD1 DW TOIN
DW PSTOR
DW OVER
DW SUBB
DW DUPP
DW TOR
DW HERE
DW CSTOR
DW PLUS
DW HERE
DW ONEP
DW FROMR
DW DUPP
DW LIT
DW 0FFH
DW GREAT
DW AABORTQ
DB 0BH
DB 'INPUT > 255'
DW ONEP
DW CMOVE
AWORD2 DW HERE
DW EXIT
;
DB 81H ; =
DB '='+80H
DW AWORD-9
EQUAL DW DOCOL
DW SUBB
DW NOTT
DW EXIT
;
DB 81H ; >
DB '>'+80H
DW EQUAL-4
GREAT DW DOCOL
DW SWAP
DW LESS
DW EXIT
;
DB 83H ; >IN
DB '>I'
DB 'N'+80H
DW GREAT-4
TOIN DW DOUSE
DW 36H
;
DB 82H ; >R
DB '>'
DB 'R'+80H
DW TOIN-6
TOR DW $+2
POP BX
DEC BP
DEC BP
MOV [BP],BX
JMP NEXT
;
DB 81H ; ?
DB '?'+80H
DW TOR-5
QUES DW DOCOL
DW ATT
DW DOT
DW EXIT
;
DB 85H ; ?COMP
DB '?COM'
DB 'P'+80H
DW QUES-4
QCOMP DW DOCOL
DW STATE
DW ATT
DW NOTT
DW AABORTQ
DB 0CH
DB 'COMPILE ONLY'
DW EXIT
;
DB 8AH ; ?CONFIGURE
DB '?CONFIGUR'
DB 'E'+80H
DW QCOMP-8
QCONF DW DOCOL
DW CR
DW CR
DW MAXDRV
DW DOT
DW ADOTQ
DB 16H
DB 'DRIVES WITH DENSITIES:'
DW MAXDRV
DW ZERO
DW ADO
QCONF1 DW IDO
DW DRDEN
DW TWO
DW SPACS
DW DOT
DW ALOOP
DW QCONF1-$
DW CR
DW CR
DW ADOTQ
DB 0CH
DB 'DENSITY CODE'
DW CR
DW ADOTQ
DB 0AH
DB '0 - 5-SSDD'
DW CR
DW ADOTQ
DB 0AH
DB '1 - 5-DSDD'
DW CR
DW ADOTQ
DB 0AH
DB '2 - 8-DSSD'
DW CR
DW ADOTQ
DB 0AH
DB '3 - 8-SSDD'
DW CR
DW ADOTQ
DB 0AH
DB '4 - 8-DSDD'
DW CR
DW ADOTQ
DB 0BH
DB '5 - 8-SSEXT'
DW CR
DW ADOTQ
DB 0BH
DB '6 - 8-DSEXT'
DW CR
DW EXIT
;
DB 84H ; ?CSP
DB '?CS'
DB 'P'+80H
DW QCONF-0DH
QCSP DW DOCOL
DW SPAT
DW CSP
DW ATT
DW SUBB
DW AABORTQ
DB 17H
DB 'DEFINITION NOT FINISHED'
DW EXIT
;
DB 84H ; ?DUP
DB '?DU'
DB 'P'+80H
DW QCSP-7
QDUP DW DOCOL
DW DUPP
DW ZBRAN
DW QDUP1-$
DW DUPP
QDUP1 DW EXIT
;
DB 88H ; ?LOADING
DB '?LOADIN'
DB 'G'+80H
DW QDUP-7
QLOAD DW DOCOL
DW BLK
DW ATT
DW NOTT
DW AABORTQ
DB 0CH
DB 'LOADING ONLY'
DW EXIT
;
DB 86H ; ?PAIRS
DB '?PAIR'
DB 'S'+80H
DW QLOAD-0BH
QPAIR DW DOCOL
DW SUBB
DW AABORTQ
DB 17H
DB 'CONDITIONALS NOT PAIRED'
DW EXIT
;
DB 86H ; ?STACK
DB '?STAC'
DB 'K'+80H
DW QPAIR-9
QSTAC DW DOCOL
DW SPAT
DW SZERO
DW SWAP
DW ULESS
DW AABORTQ
DB 13H
DB 'STACK OUT OF BOUNDS'
DW SPAT
DW HERE
DW LIT
DW 80H
DW PLUS
DW ULESS
DW AABORTQ
DB 0AH
DB 'FULL STACK'
DW EXIT
;
DB 87H ; ?STREAM
DB '?STREA'
DB 'M'+80H
DW QSTAC-9
QSTREAM DW DOCOL
DW AABORTQ
DB 16H
DB 'INPUT STREAM EXHAUSTED'
DW EXIT
;
DB 89H ; ?TERMINAL
DB '?TERMINA'
DB 'L'+80H
DW QSTREAM-0AH
QTERM DW DOCOL
DW TQTERM
DW ATT
DW EXEC
DW EXIT
;
DB 81H ; @
DB '@'+80H
DW QTERM-0CH
ATT DW $+2
POP BX
MOV AX,[BX]
JMP APUSH
;
DB 82H ; @L
DB '@'
DB 'L'+80H
DW ATT-4
ATL DW $+2
POP BX
POP DS
MOV AX,[BX]
MOV BX,CS
MOV DS,BX
JMP APUSH
;
DB 85H ; ABORT
DB 'ABOR'
DB 'T'+80H
DW ATL-5
ABORT DW DOCOL
DW TABORT
DW ATT
DW EXEC
DW EXIT
;
DB 0C6H ; ABORT"
DB 'ABORT'
DB '"'+80H
DW ABORT-8
ABORTQ DW DOCOL
DW QCOMP
DW COMP
DW AABORTQ
DW TSTREAM
DW CAT
DW LIT
DW 22H
DW EQUAL
DW ZBRAN
DW ABORTQ1-$
DW ONE
DW TOIN
DW PSTOR
DW ZERO
DW CCOMM
DW BRAN
DW ABORTQ2-$
ABORTQ1 DW LIT
DW 22H
DW WORDD
DW DUPP
DW CAT
DW ONEP
DW SWAP
DW OVER
DW PLUS
DW CAT
DW LIT
DW 22H
DW EQUAL
DW NOTT
DW QSTREAM
DW ALLOT
ABORTQ2 DW EXIT
;
DB 83H ; ABS
DB 'AB'
DB 'S'+80H
DW ABORTQ-9
ABSS DW DOCOL
DW DUPP
DW PM
DW EXIT
;
DB 0C5H ; AGAIN
DB 'AGAI'
DB 'N'+80H
DW ABSS-6
AGAIN DW DOCOL
DW ONE
DW QPAIR
DW COMP
DW BRAN
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 85H ; ALLOT
DB 'ALLO'
DB 'T'+80H
DW AGAIN-8
ALLOT DW DOCOL
DW DP
DW PSTOR
DW EXIT
;
DB 83H ; AND
DB 'AN'
DB 'D'+80H
DW ALLOT-8
ANDD DW $+2
POP BX
POP AX
AND AX,BX
JMP APUSH
;
DB 85H ; APUSH
DB 'APUS'
DB 'H'+80H
DW ANDD-6
APUSHH DW DOCON
DW APUSH
;
DB 84H ; BASE
DB 'BAS'
DB 'E'+80H
DW APUSHH-8
BASE DW DOUSE
DW 38H
;
DB 0C5H ; BEGIN
DB 'BEGI'
DB 'N'+80H
DW BASE-7
BEGIN DW DOCOL
DW QCOMP
DW HERE
DW ONE
DW EXIT
;
DB 82H ; BL
DB 'B'
DB 'L'+80H
DW BEGIN-8
BLL DW DOCON
DW 20H
;
DB 85H ; BLANK
DB 'BLAN'
DB 'K'+80H
DW BLL-5
BLANK DW DOCOL
DW BLL
DW FILL
DW EXIT
;
DB 83H ; BLK
DB 'BL'
DB 'K'+80H
DW BLANK-8
BLK DW DOUSE
DW 3AH
;
DB 87H ; BLK/DRV
DB 'BLK/DR'
DB 'V'+80H
DW BLK-6
BPDR DW DOVAR
DW 0A0H
DW 140H
DW 1F4H
DW 1F4H
DW 3E8H
DW 268H
DW 4D0H
;
DB 85H ; BLOCK
DB 'BLOC'
DB 'K'+80H
DW BPDR-0AH
BLOCK DW DOCOL
DW TBLOCK
DW ATT
DW EXEC
DW EXIT
;
DB 85H ; BPDRV
DB 'BPDR'
DB 'V'+80H
DW BLOCK-8
BPDRV DW DOCOL
DW DENSTY
DW ATT
DW LIT
DW 6H
DW MIN
DW TWOST
DW BPDR
DW PLUS
DW ATT
DW EXIT
;
DB 86H ; BRANCH
DB 'BRANC'
DB 'H'+80H
DW BPDRV-8
BRAN DW $+2
BRAN1: ADD SI,[SI]
JMP NEXT
;
DB 86H ; BUFFER
DB 'BUFFE'
DB 'R'+80H
DW BRAN-9
BUFFE DW DOCOL
DW USEE
DW ATT
DW PREV
DW ATT
DW EQUAL
DW ZBRAN
DW BUFF1-$
DW USEE
DW ATT
DW PBUF
DW DROP
DW USEE
DW STORE
BUFF1 DW USEE
DW ATT
DW DUPP
DW TOR
BUFF2 DW PBUF
DW ZBRAN
DW OFFSET BUFF2-$
DW USEE
DW STORE
DW RAT
DW ATT
DW ZLESS
DW ZBRAN
DW OFFSET BUFF3-$
DW RAT
DW TWOP
DW RAT
DW ATT
DW LIT
DW 7FFFH
DW ANDD
DW ZERO
DW RSLW
BUFF3 DW RAT
DW STORE
DW RAT
DW PREV
DW STORE
DW FROMR
DW TWOP
DW EXIT
;
DB 83H ; BYE
DB 'BY'
DB 'E'+80H
DW BUFFE-9
BYE DW DOCOL
DW FREEZE
DW ZERO
DW ZERO
DW SYSCALL
DW EXIT
;
DB 82H ; CSTORE
DB 'C'
DB '!'+80H
DW BYE-6
CSTOR DW $+2
POP BX
POP AX
MOV [BX],AL
JMP NEXT
;
DB 83H ; CSTOREL
DB 'C!'
DB 'L'+80H
DW CSTOR-5
CSTORL DW $+2
POP BX
POP DS
POP AX
MOV [BX],AL
MOV BX,CS
MOV DS,BX
JMP NEXT
;
DB 82H ; C,
DB 'C'
DB ','+80H
DW CSTORL-6
CCOMM DW DOCOL
DW HERE
DW CSTOR
DW ONE
DW ALLOT
DW EXIT
;
DB 83H ; C/L
DB 'C/'
DB 'L'+80H
DW CCOMM-5
CSLL DW DOCON
DW 40H
;
DB 82H ; C@
DB 'C'
DB '@'+80H
DW CSLL-6
CAT DW $+2
POP BX
MOV AL,[BX]
SUB AH,AH
JMP APUSH
;
DB 83H ; C@L
DB 'C@'
DB 'L'+80H
DW CAT-5
CATL DW $+2
POP BX
POP DS
MOV AL,[BX]
SUB AH,AH
MOV BX,CS
MOV DS,BX
JMP APUSH
;
DB 83H ; CFA
DB 'CF'
DB 'A'+80H
DW CATL-6
CFA DW DOCOL
DW TWOM
DW EXIT
;
DB 86H ; CHANGE
DB 'CHANG'
DB 'E'+80H
DW CFA-6
CHANGE DW DOCOL
DW FREEZE
DW LIMIT
DW LIT
DW 404H
DW NOBUF
DW STAR
DW SUBB
DW DUPP
DW LIT
DW FIRST+2
DW STORE
DW LIT
DW US
DW SUBB
DW DUPP
DW LIT
DW RTS
DW SUBB
DW DUPP
DW LIT
DW INITUSER
DW STORE
DW LIT
DW INITUSER+4
DW STORE
DW DUPP
DW LIT
DW INITUSER+2
DW STORE
DW LIT
DW UP
DW OVER
DW LIT
DW RPP
DW LIT
DW ORIG
DW HERE
DW STORE
DW HERE
DW ROT
DW ROT
DW STORE
DW ROT
DW ROT
DW STORE
DW EXEC
DW EXIT
;
DB 85H ; CLEAR
DB 'CLEA'
DB 'R'+80H
DW CHANGE-9
CLEAR DW DOCOL
DW OFSET
DW ATT
DW PLUS
DW BUFFE
DW LIT
DW 400H
DW BLL
DW FILL
DW UPDAT
DW EXIT
;
DB 85H ; CMOVE
DB 'CMOV'
DB 'E'+80H
DW CLEAR-8
CMOVE DW DOCOL
DW DUPP
DW ONE
DW LESS
DW ZBRAN
DW CMOVE1-$
DW DDROP
DW DROP
DW BRAN
DW CMOVE2-$
CMOVE1 DW ACMOVE
CMOVE2 DW EXIT
;
DB 84H ; COLD
DB 'COL'
DB 'D'+80H
DW CMOVE-8
COLD DW DOCOL
DW MTBUF
DW LIT
DW INITUSER
DW LIT
DW UP
DW ATT
DW LIT
DW 6
DW PLUS
DW LIT
DW 30H
DW CMOVE
DW PAGEE
DW ADOTQ
DB 1DH
DB 'MVP-FORTH VERSION 1.0405.03'
DW CR
DW ONE
DW DENSTY
DW STORE
DW FIRST
DW USEE
DW STORE
DW FIRST
DW PREV
DW STORE
DW DR0
DW ZERO
DW EPRINT
DW STORE
DW LIT
DW INITFORTH
DW ATT
DW LIT
DW FORTH+2
DW TWOP
DW STORE
DW DEC
; DW LIT
; DW 40H
; DW LIT
; DW 40H
; DW LIT
; DW 17H
; DW STOREL
DW ABORT
DW EXIT
;
DB 87H ; COMPILE
DB 'COMPIL'
DB 'E'+80H
DW COLD-7
COMP DW DOCOL
DW QCOMP
DW FROMR
DW DUPP
DW TWOP
DW TOR
DW ATT
DW COMMA
DW EXIT
;
DB 89H ; CONFIGURE
DB 'CONFIGUR'
DB 'E'+80H
DW COMP-0AH
CONF DW DOCOL
DW QCONF
DW CR
DW ADOTQ
DB 13H
DB 'NUMBER OF DRIVES ? '
DW KEY
DW LIT
DW 31H
DW SUBB
DW DUPP
DW LIT
DW 5
DW ULESS
DW NOTT
DW AABORTQ
DB 0FH
DB 'TOO MANY DRIVES'
DW DUPP
DW LIT
DW 31H
DW PLUS
DW EMIT
DW ONEP
DW LIT
DW MAXDRV+2
DW STORE
DW MAXDRV
DW ZERO
DW ADO
CONF1 DW CR
DW ADOTQ
DB 6
DB 'DRIVE '
DW IDO
DW DOT
DW ADOTQ
DB 2
DB '? '
DW KEY
DW LIT
DW 30H
DW SUBB
DW DUPP
DW LIT
DW 7
DW ULESS
DW NOTT
DW AABORTQ
DB 0CH
DB 'OUT OF RANGE'
DW DUPP
DW LIT
DW 30H
DW PLUS
DW EMIT
DW IDO
DW TWOST
DW DEN
DW PLUS
DW STORE
DW ALOOP
DW CONF1-$
DW DR0
DW CR
DW CR
DW ADOTQ
DB 0DH
DB 'DR0 SELECTED '
DW CR
DW EXIT
;
DB 88H ; CONSTANT
DB 'CONSTAN'
DB 'T'+80H
DW CONF-0CH
CON DW DOCOL
DW CREATE
DW COMMA
DW ASCODE
DOCON: INC DX
MOV BX,DX
MOV AX,[BX]
JMP APUSH
;
DB 87H ; CONTEXT
DB 'CONTEX'
DB 'T'+80H
DW CON-0BH
CONT DW DOUSE
DW 3CH
;
DB 87H ; CONVERT
DB 'CONVER'
DB 'T'+80H
DW CONT-0AH
CONV DW DOCOL
CONV1 DW ONEP
DW DUPP
DW TOR
DW CAT
DW BASE
DW ATT
DW DIGIT
DW ZBRAN
DW OFFSET CONV3-$
DW SWAP
DW BASE
DW ATT
DW USTAR
DW DROP
DW ROT
DW BASE
DW ATT
DW USTAR
DW DPLUS
DW DPL
DW ATT
DW ONEP
DW ZBRAN
DW OFFSET CONV2-$
DW ONE
DW DPL
DW PSTOR
CONV2 DW FROMR
DW BRAN
DW OFFSET CONV1-$
CONV3 DW FROMR
DW EXIT
;
DB 85H ; COUNT
DB 'COUN'
DB 'T'+80H
DW CONV-0AH
COUNT DW DOCOL
DW DUPP
DW ONEP
DW SWAP
DW CAT
DW EXIT
;
DB 82H ; CR
DB 'C'
DB 'R'+80H
DW COUNT-8
CR DW DOCOL
DW TCR
DW ATT
DW EXEC
DW EXIT
;
DB 86H ; CREATE
DB 'CREAT'
DB 'E'+80H
DW CR-5
CREATE DW DOCOL
DW BLL
DW WORDD
DW DUPP
DW DUPP
DW ONEP
DW CAT
DW ZERO
DW EQUAL
DW AABORTQ
DB 1AH
DB 'ATTEMPTED TO REDEFINE NULL'
DW DUPP
DW CONT
DW ATT
DW ATT
DW AFIND
DW ZBRAN
DW OFFSET CREA1-$
DW DDROP
DW WARN
DW ATT
DW ZBRAN
DW OFFSET CREA1-$
DW DUPP
DW COUNT
DW TYPEE
DW SPACE
DW ADOTQ
DB 0DH
DB 'ISN',27H,'T UNIQUE '
CREA1 DW CAT
DW WIDTHH
DW ATT
DW MIN
DW ONEP
DW ALLOT
DW DUPP
DW LIT
DW 80H
DW TOGGL
DW HERE
DW ONEM
DW LIT
DW 80H
DW TOGGL
DW LATES
DW COMMA
DW TWO
DW ALLOT
DW CURR
DW ATT
DW STORE
DW ASCODE
DOVAR: INC DX
PUSH DX
JMP NEXT
;
DB 83H ; CSP
DB 'CS'
DB 'P'+80H
DW CREATE-9
CSP DW DOUSE
DW 3EH
;
DB 87H ; CURRENT
DB 'CURREN'
DB 'T'+80H
DW CSP-6
CURR DW DOUSE
DW 40H
;
DB 82H ; DSTORE
DB 'D'
DB '!'+80H
DW CURR-0AH
DSTOR DW $+2
POP BX
POP AX
MOV [BX],AX
POP AX
MOV 2[BX],AX
JMP NEXT
;
DB 82H ; D+
DB 'D'
DB '+'+80H
DW DSTOR-5
DPLUS DW $+2
POP AX
POP DX
POP BX
POP CX
ADD DX,CX
ADC AX,BX
JMP DPUSH
;
DB 83H ; D+-
DB 'D+'
DB '-'+80H
DW DPLUS-5
DPM DW DOCOL
DW ZLESS
DW ZBRAN
DW OFFSET DPM1-$
DW DNEG
DPM1 DW EXIT
;
DB 82H ; D.
DB 'D'
DB '.'+80H
DW DPM-6
DDOT DW DOCOL
DW ZERO
DW DDOTR
DW SPACE
DW EXIT
;
DB 83H ; D.R
DB 'D.'
DB 'R'+80H
DW DDOT-5
DDOTR DW DOCOL
DW DEPTH
DW LIT
DW 3
DW LESS
DW AABORTQ
DB 0BH
DB 'EMPTY STACK'
DW TOR
DW SWAP
DW OVER
DW DUPP
DW DPM
DW BDIGS
DW DIGS
DW ROT
DW SIGN
DW EDIGS
DW FROMR
DW OVER
DW SUBB
DW SPACS
DW TYPEE
DW EXIT
;
DB 82H ; D<
DB 'D'
DB '<'+80H
DW DDOTR-6
DLESS DW DOCOL
DW ROT
DW DDUP
DW EQUAL
DW ZBRAN
DW DLESS1-$
DW ROT
DW ROT
DW DNEG
DW DPLUS
DW ZLESS
DW BRAN
DW DLESS2-$
DLESS1 DW SWAP
DW LESS
DW SWAP
DW DROP
DLESS2 DW SWAP
DW DROP
DW EXIT
;
DB 84H ; DABS
DB 'DAB'
DB 'S'+80H
DW DLESS-5
DABS DW DOCOL
DW DUPP
DW DPM
DW EXIT
;
DB 85H ; DDROP
DB 'DDRO'
DB 'P'+80H
DW DABS-7
DDROP DW $+2
POP BX
POP BX
JMP NEXT
;
DB 84H ; DDUP
DB 'DDU'
DB 'P'+80H
DW DDROP-8
DDUP DW $+2
POP AX
POP DX
PUSH DX
PUSH AX
JMP DPUSH
;
DB 87H ; DECIMAL
DB 'DECIMA'
DB 'L'+80H
DW DDUP-7
DEC DW DOCOL
DW LIT
DW 0AH
DW BASE
DW STORE
DW EXIT
;
DB 8BH ; DEFINITIONS
DB 'DEFINITION'
DB 'S'+80H
DW DEC-0AH
DEFIN DW DOCOL
DW CONT
DW ATT
DW CURR
DW STORE
DW EXIT
;
DB 83H ; DEN
DB 'DE'
DB 'N'+80H
DW DEFIN-0EH
DEN DW DOVAR
DW 0
DW 0
DW 1
DW 1
DW 1
;
DB 87H ; DENSITY
DB 'DENSIT'
DB 'Y'+80H
DW DEN-6
DENSTY DW DOVAR
DW 0
;
DB 85H ; DEPTH
DB 'DEPT'
DB 'H'+80H
DW DENSTY-0AH
DEPTH DW DOCOL
DW SPAT
DW SZERO
DW SWAP
DW SUBB
DW TWOSL
DW EXIT
;
DB 85H ; DIGIT
DB 'DIGI'
DB 'T'+80H
DW DEPTH-8
DIGIT DW $+2
POP DX
POP AX
SUB AL,'0'
JB DIGI2
CMP AL,9H
JBE DIGI1
SUB AL,7H
CMP AL,0AH
JB DIGI2
DIGI1: CMP AL,DL
JAE DIGI2
SUB DX,DX
MOV DL,AL
MOV AL,01H
JMP DPUSH
DIGI2: SUB AX,AX
JMP APUSH
;
DB 8AH ; DISK-ERROR
DB 'DISK-ERRO'
DB 'R'+80H
DW DIGIT-8
DSKERR DW DOVAR
DW 0
;
DB 0C8H ; DLITERAL
DB 'DLITERA'
DB 'L'+80H
DW DSKERR-0DH
DLITE DW DOCOL
DW STATE
DW ATT
DW ZBRAN
DW OFFSET DLITE1-$
DW SWAP
DW LITER
DW LITER
DLITE1 DW EXIT
;
DB 87H ; DNEGATE
DB 'DNEGAT'
DB 'E'+80H
DW DLITE-0BH
DNEG DW $+2
POP BX
POP CX
SUB AX,AX
MOV DX,AX
SUB DX,CX
SBB AX,BX
JMP DPUSH
;
DB 0C2H ; DO
DB 'D'
DB 'O'+80H
DW DNEG-0AH
DO DW DOCOL
DW COMP
DW ADO
DW HERE
DW LIT
DW 3
DW EXIT
;
DB 0C5H ; DOES>
DB 'DOES'
DB '>'+80H
DW DO-5
DOES DW DOCOL
DW QCSP
DW COMP
DW ASCODE
DW LIT
DW 0E8H
DW CCOMM
DW LIT
DW DODOES
DW HERE
DW TWOP
DW SUBB
DW COMMA
DW EXIT
;
DODOES: INC DX
DEC BP
DEC BP
MOV [BP],SI
POP SI
PUSH DX
JMP NEXT
;
DB 82H ; DP
DB 'D'
DB 'P'+80H
DW DOES-8
DP DW DOUSE
DW 12H
;
DB 83H ; DPL
DB 'DP'
DB 'L'+80H
DW DP-5
DPL DW DOUSE
DW 42H
;
DB 85H ; DPUSH
DB 'DPUS'
DB 'H'+80H
DW DPL-6
DPUS DW DOCON
DW DPUSH
;
DB 86H ; DR-DEN
DB 'DR-DE'
DB 'N'+80H
DW DPUS-8
DRDEN DW DOCOL
DW TWOST
DW DEN
DW PLUS
DW ATT
DW EXIT
;
DB 83H ; DR0
DB 'DR'
DB '0'+80H
DW DRDEN-9
DR0 DW DOCOL
DW ZERO
DW OFSET
DW STORE
DW EXIT
;
DB 83H ; DR1
DB 'DR'
DB '1'+80H
DW DR0-6
DR1 DW DOCOL
DW DR0
DW ZERO
DW SETDRX
DW EXIT
;
DB 83H ; DR2
DB 'DR'
DB '2'+80H
DW DR1-6
DR2 DW DOCOL
DW DR1
DW ONE
DW SETDRX
DW EXIT
;
DB 83H ; DR3
DB 'DR'
DB '3'+80H
DW DR2-6
DR3 DW DOCOL
DW DR2
DW TWO
DW SETDRX
DW EXIT
;
DB 83H ; DR4
DB 'DR'
DB '4'+80H
DW DR3-6
DR4 DW DOCOL
DW DR3
DW LIT
DW 3
DW SETDRX
DW EXIT
;
DB 85H ; DRIVE
DB 'DRIV'
DB 'E'+80H
DW DR4-6
DRIVE DW DOVAR
DW 00
;
DB 84H ; DROP
DB 'DRO'
DB 'P'+80H
DW DRIVE-8
DROP DW $+2
POP AX
JMP NEXT
;
DB 83H ; DUP
DB 'DU'
DB 'P'+80H
DW DROP-7
DUPP DW $+2
POP AX
PUSH AX
JMP APUSH
;
DB 0C4H ; ELSE
DB 'ELS'
DB 'E'+80H
DW DUPP-6
ELSEE DW DOCOL
DW TWO
DW QPAIR
DW COMP
DW BRAN
DW HERE
DW ZERO
DW COMMA
DW SWAP
DW TWO
DW THENN
DW TWO
DW EXIT
;
DB 84H ; EMIT
DB 'EMI'
DB 'T'+80H
DW ELSEE-7
EMIT DW DOCOL
DW TEMIT
DW ATT
DW EXEC
DW EXIT
;
DB 8DH ; EMPTY-BUFFERS
DB 'EMPTY-BUFFER'
DB 'S'+80H
DW EMIT-7
MTBUF DW DOCOL
DW FIRST
DW LIMIT
DW OVER
DW SUBB
DW ZERO
DW AFILL
DW NOBUF
DW ZERO
DW ADO
MTBUF1 DW LIT
DW 7FFFH
DW LIT
DW 404H
DW IDO
DW STAR
DW FIRST
DW PLUS
DW STORE
DW ALOOP
DW OFFSET MTBUF1-$
DW EXIT
;
DB 87H ; ENCLOSE
DB 'ENCLOS'
DB 'E'+80H
DW MTBUF-10H
ENCL DW $+2
POP AX
POP BX
PUSH BX
MOV DX,0FFFFH
DEC BX
ENCL1: INC BX
INC DX
CMP AL,[BX]
JZ ENCL1
PUSH DX
INC BYTE PTR [BX]
DEC BYTE PTR [BX]
JNZ ENCL2
INC DX
PUSH DX
DEC DX
PUSH DX
JMP NEXT
ENCL2: INC BX
INC DX
CMP AL,[BX]
JZ ENCL3
INC BYTE PTR [BX]
DEC BYTE PTR [BX]
JNZ ENCL2
PUSH DX
PUSH DX
JMP NEXT
ENCL3: PUSH DX
INC DX
PUSH DX
JMP NEXT
;
DB 86H ; EPRINT
DB 'EPRIN'
DB 'T'+80H
DW ENCL-0AH
EPRINT DW DOVAR
DW 0
;
DB 87H ; EXECUTE
DB 'EXECUT'
DB 'E'+80H
DW EPRINT-9
EXEC DW $+2
POP BX
JMP NEXT1
;
DB 84H ; EXIT
DB 'EXI'
DB 'T'+80H
DW EXEC-0AH
EXIT DW $+2
MOV SI,[BP]
INC BP
INC BP
JMP NEXT
;
DB 86H ; EXPECT
DB 'EXPEC'
DB 'T'+80H
DW EXIT-7
EXPEC DW DOCOL
DW TEXPECT
DW ATT
DW EXEC
DW EXIT
;
DB 85H ; FENCE
DB 'FENC'
DB 'E'+80H
DW EXPEC-9
FENCE DW DOUSE
DW 10H
;
DB 84H ; FILL
DB 'FIL'
DB 'L'+80H
DW FENCE-8
FILL DW DOCOL
DW OVER
DW ZGREAT
DW ZBRAN
DW FILL1-$
DW AFILL
DW BRAN
DW FILL2-$
FILL1 DW DDROP
DW DROP
FILL2 DW EXIT
;
DB 84H ; FIND
DB 'FIN'
DB 'D'+80H
DW FILL-7
FIND DW DOCOL
DW DFIND
DW ZBRAN
DW FIND1-$
DW DROP
DW CFA
DW BRAN
DW FIND2-$
FIND1 DW ZERO
FIND2 DW EXIT
;
DB 85H ; FIRST
DB 'FIRS'
DB 'T'+80H
DW FIND-7
FIRST DW DOCON
DW BUF1
;
DB 83H ; FLD
DB 'FL'
DB 'D'+80H
DW FIRST-8
FLD DW DOUSE
DW 44H
;
DB 86H ; FORGET
DB 'FORGE'
DB 'T'+80H
DW FLD-6
FORG DW DOCOL
DW BLL
DW WORDD
DW CURR
DW ATT
DW ATT
DW AFIND
DW ZEQU
DW AABORTQ
DB 19H
DB 'NOT IN CURRENT VOCABULARY'
DW DROP
DW NFA
DW DUPP
DW FENCE
DW ATT
DW ULESS
DW AABORTQ
DB 17H
DB 'IN PROTECTED DICTIONARY'
DW TOR
DW RAT
DW CONT
DW ATT
DW ULESS
DW ZBRAN
DW FORG1-$
DW FORTH
FORG1 DW RAT
DW CURR
DW ATT
DW ULESS
DW ZBRAN
DW FORG2-$
DW FORTH
DW DEFIN
FORG2 DW VOCL
DW ATT
FORG3 DW RAT
DW OVER
DW ULESS
DW ZBRAN
DW FORG4-$
DW ATT
DW BRAN
DW FORG3-$
FORG4 DW DUPP
DW VOCL
DW STORE
FORG5 DW DUPP
DW LIT
DW 4
DW SUBB
FORG6 DW PFA
DW LFA
DW ATT
DW DUPP
DW RAT
DW ULESS
DW ZBRAN
DW FORG6-$
DW OVER
DW TWOM
DW STORE
DW ATT
DW QDUP
DW ZEQU
DW ZBRAN
DW FORG5-$
DW FROMR
DW DP
DW STORE
DW EXIT
;
DB 0C5H ; FORTH
DB 'FORT'
DB 'H'+80H
DW FORG-9
FORTH DW DOVOC
DW 0A081H
DW RBRAC-4
DW 00
;
DB 86H ; FREEZE
DB 'FREEZ'
DB 'E'+80H
DW FORTH-8
FREEZE DW DOCOL
DW LIT
DW UP
DW ATT
DW LIT
DW 6
DW PLUS
DW LIT
DW INITUSER
DW LIT
DW 30H
DW CMOVE
DW LIT
DW FORTH+2
DW TWOP
DW ATT
DW LIT
DW INITFORTH
DW STORE
DW EXIT
;
DB 84H ; HERE
DB 'HER'
DB 'E'+80H
DW FREEZE-9
HERE DW DOCOL
DW DP
DW ATT
DW EXIT
;
DB 83H ; HEX
DB 'HE'
DB 'X'+80H
DW HERE-7
HEX DW DOCOL
DW LIT
DW 10H
DW BASE
DW STORE
DW EXIT
;
DB 83H ; HLD
DB 'HL'
DB 'D'+80H
DW HEX-6
HLD DW DOUSE
DW 46H
;
DB 84H ; HOLD
DB 'HOL'
DB 'D'+80H
DW HLD-6
HOLD DW DOCOL
DW LIT
DW 0FFFFH
DW HLD
DW PSTOR
DW HLD
DW ATT
DW CSTOR
DW EXIT
;
DB 81H ; I
DB 'I'+80H
DW HOLD-7
IDO DW $+2
MOV AX,[BP]
JMP APUSH
;
DB 82H ; I'
DB 'I'
DB 0A7H
DW IDO-4
IPDO DW $+2
MOV AX,[BP+2]
JMP APUSH
;
DB 0C2H ; IF
DB 'I'
DB 'F'+80H
DW IPDO-5
IFF DW DOCOL
DW COMP
DW ZBRAN
DW HERE
DW ZERO
DW COMMA
DW TWO
DW EXIT
;
DB 89H ; IMMEDIATE
DB 'IMMEDIAT'
DB 'E'+80H
DW IFF-5
IMMED DW DOCOL
DW LATES
DW LIT
DW 40H
DW TOGGL
DW EXIT
;
DB 8AH ; INIT-FORTH
DB 'INIT-FORT'
DB 'H'+80H
DW IMMED-0CH
IFORTH DW DOCON
DW INITFORTH
;
DB 89H ; INIT-USER
DB 'INIT-USE'
DB 'R'+80H
DW IFORTH-0DH
IUSER DW DOCON
DW INITUSER
;
DB 87H ; INTCALL
DB 'INTCAL'
DB 'L'+80H
DW IUSER-0CH
INTCAL DW DOCOL
DW LIT
DW INTCA2+1
DW CSTOR
DW LIT
DW INTCA1
DW EXEC
DW EXIT
;
INTCA1 DW $+2
POP DX
POP CX
POP BX
POP AX
PUSH SI
PUSH BP
INTCA2: INT 0
POP BP
POP SI
JMP APUSH
;
DB 89H ; INTERPRET
DB 'INTERPRE'
DB 'T'+80H
DW INTCAL-0AH
INTER DW DOCOL
DW TINTER
DW ATT
DW EXEC
DW EXIT
;
;
DB 81H ; J
DB 'J'+80H
DW INTER-0CH
JDO DW $+2
MOV AX,[BP+4]
JMP APUSH
;
DB 83H ; KEY
DB 'KE'
DB 'Y'+80H
DW JDO-4
KEY DW DOCOL
DW TKEY
DW ATT
DW EXEC
DW EXIT
;
DB 86H ; LATEST
DB 'LATES'
DB 'T'+80H
DW KEY-6
LATES DW DOCOL
DW CURR
DW ATT
DW ATT
DW EXIT
;
DB 85H ; LEAVE
DB 'LEAV'
DB 'E'+80H
DW LATES-9
LEAVE DW $+2
MOV AX,[BP]
MOV 2[BP],AX
JMP NEXT
;
DB 83H ; LFA
DB 'LF'
DB 'A'+80H
DW LEAVE-8
LFA DW DOCOL
DW LIT
DW 4
DW SUBB
DW EXIT
;
DB 85H ; LIMIT
DB 'LIMI'
DB 'T'+80H
DW LFA-6
LIMIT DW DOCON
DW EM
;
DB 84H ; LIST
DB 'LIS'
DB 'T'+80H
DW LIMIT-8
LIST DW DOCOL
DW CR
DW DUPP
DW SCR
DW STORE
DW ADOTQ
DB 5
DB 'SCR #'
DW UDOT
DW LIT
DW 10H
DW ZERO
DW ADO
LIST1 DW CR
DW RAT
DW LIT
DW 3
DW DOTR
DW SPACE
DW RAT
DW SCR
DW ATT
DW DLINE
DW QTERM
DW ZBRAN
DW OFFSET LIST2-$
DW LEAVE
LIST2 DW ALOOP
DW OFFSET LIST1-$
DW CR
DW EXIT
;
DB 83H ; LIT
DB 'LI'
DB 'T'+80H
DW LIST-7
LIT DW $+2
MOV AX,[SI]
INC SI
INC SI
JMP APUSH
;
DB 0C7H ; LITERAL
DB 'LITERA'
DB 'L'+80H
DW LIT-6
LITER DW DOCOL
DW STATE
DW ATT
DW ZBRAN
DW OFFSET LITER1-$
DW COMP
DW LIT
DW COMMA
LITER1 DW EXIT
;
DB 84H ; LOAD
DB 'LOA'
DB 'D'+80H
DW LITER-0AH
LOAD DW DOCOL
DW TLOAD
DW ATT
DW EXEC
DW EXIT
;
DB 0C4H ; LOOP
DB 'LOO'
DB 'P'+80H
DW LOAD-7
LOOP DW DOCOL
DW LIT
DW 3
DW QPAIR
DW COMP
DW ALOOP
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 82H ; M*
DB 'M'
DB '*'+80H
DW LOOP-7
MSTAR DW DOCOL
DW DDUP
DW XORR
DW TOR
DW ABSS
DW SWAP
DW ABSS
DW USTAR
DW FROMR
DW DPM
DW EXIT
;
DB 83H ; M*/
DB 'M*'
DB '/'+80H
DW MSTAR-5
MSTARSL DW DOCOL
DW DDUP
DW XORR
DW SWAP
DW ABSS
DW TOR
DW SWAP
DW ABSS
DW TOR
DW OVER
DW XORR
DW ROT
DW ROT
DW DABS
DW SWAP
DW RAT
DW USTAR
DW ROT
DW FROMR
DW USTAR
DW ROT
DW ZERO
DW DPLUS
DW RAT
DW USLM
DW ROT
DW ROT
DW FROMR
DW USLM
DW SWAP
DW DROP
DW SWAP
DW ROT
DW DPM
DW EXIT
;
DB 82H ; M+
DB 'M'
DB '+'+80H
DW MSTARSL-6
MPLUS DW DOCOL
DW STOD
DW DPLUS
DW EXIT
;
DB 82H ; M/
DB 'M'
DB '/'+80H
DW MPLUS-5
MSLAS DW DOCOL
DW OVER
DW TOR
DW TOR
DW DUPP
DW DPM
DW RAT
DW ABSS
DW USLM
DW FROMR
DW RAT
DW XORR
DW PM
DW SWAP
DW FROMR
DW PM
DW SWAP
DW EXIT
;
DB 85H ; M/MOD
DB 'M/MO'
DB 'D'+80H
DW MSLAS-5
MSMOD DW DOCOL
DW TOR
DW ZERO
DW RAT
DW USLM
DW FROMR
DW SWAP
DW TOR
DW USLM
DW FROMR
DW EXIT
;
DB 83H ; MAX
DB 'MA'
DB 'X'+80H
DW MSMOD-8
MAX DW DOCOL
DW DDUP
DW LESS
DW ZBRAN
DW OFFSET MAX1-$
DW SWAP
MAX1 DW DROP
DW EXIT
;
DB 87H ; MAX-DRV
DB 'MAX-DR'
DB 'V'+80H
DW MAX-6
MAXDRV DW DOCON
DW 2
;
DB 83H ; MIN
DB 'MI'
DB 'N'+80H
DW MAXDRV-0AH
MIN DW DOCOL
DW DDUP
DW GREAT
DW ZBRAN
DW OFFSET MIN1-$
DW SWAP
MIN1 DW DROP
DW EXIT
;
DB 83H ; MOD
DB 'MO'
DB 'D'+80H
DW MIN-6
MODD DW DOCOL
DW SLMOD
DW DROP
DW EXIT
;
DB 84H ; MOVE
DB 'MOV'
DB 'E'+80H
DW MODD-6
MOVE DW DOCOL
DW ZERO
DW MAX
DW TWOST
DW ACMOVE
DW EXIT
;
DB 86H ; NEGATE
DB 'NEGAT'
DB 'E'+80H
DW MOVE-7
NEG DW $+2
POP AX
NEG AX
JMP APUSH
;
DB 84H ; NEXT
DB 'NEX'
DB 'T'+80H
DW NEG-9
CNEXT DW DOCON
DW NEXT
;
DB 85H ; NEXT1
DB 'NEXT'
DB '1'+80H
DW CNEXT-7
CNEXT1 DW DOCON
DW NEXT1
;
DB 83H ; NFA
DB 'NF'
DB 'A'+80H
DW CNEXT1-8
NFA DW DOCOL
DW LIT
DW 5
DW SUBB
DW LIT
DW 0FFFFH
DW TRAV
DW EXIT
;
DB 83H ; NOT
DB 'NO'
DB 'T'+80H
DW NFA-6
NOTT DW $+2
POP AX
OR AX,AX
MOV AX,1H
JZ NOT1
DEC AX
NOT1: JMP APUSH
;
DB 86H ; NUMBER
DB 'NUMBE'
DB 'R'+80H
DW NOTT-6
NUM DW DOCOL
DW TNUM
DW ATT
DW EXEC
DW EXIT
;
DB 86H ; OFFSET
DB 'OFFSE'
DB 'T'+80H
DW NUM-9
OFSET DW DOUSE
DW 48H
;
DB 82H ; OR
DB 'O'
DB 'R'+80H
DW OFSET-9
ORR DW $+2
POP AX
POP BX
OR AX,BX
JMP APUSH
;
DB 83H ; OUT
DB 'OU'
DB 'T'+80H
DW ORR-5
OUTT DW DOUSE
DW 4AH
;
DB 84H ; OVER
DB 'OVE'
DB 'R'+80H
DW OUTT-6
OVER DW $+2
POP DX
POP AX
PUSH AX
JMP DPUSH
;
DB 82H ; PSTORE
DB 'P'
DB '!'+80H
DW OVER-7
PTSTOR DW $+2
POP DX
POP AX
OUT DX,AL
JMP NEXT
;
DB 82H ; P@
DB 'P'
DB '@'+80H
DW PTSTOR-5
PTAT DW $+2
POP DX
IN AL,DX
SUB AH,AH
JMP APUSH
;
DB 83H ; PAD
DB 'PA'
DB 'D'+80H
DW PTAT-5
PAD DW DOCOL
DW HERE
DW LIT
DW 44H
DW PLUS
DW EXIT
;
DB 84H ; PAGE
DB 'PAG'
DB 'E'+80H
DW PAD-6
PAGEE DW DOCOL
DW TPAGE
DW ATT
DW EXEC
DW EXIT
;
DB 83H ; PFA
DB 'PF'
DB 'A'+80H
DW PAGEE-7
PFA DW DOCOL
DW ONE
DW TRAV
DW LIT
DW 5
DW PLUS
DW EXIT
;
DB 84H ; PICK
DB 'PIC'
DB 'K'+80H
DW PFA-6
PICK DW DOCOL
DW DUPP
DW ONE
DW LESS
DW AABORTQ
DB 11H
DB 'PICK ARGUMENT < 1'
DW TWOST
DW SPAT
DW PLUS
DW ATT
DW EXIT
;
DB 82H ; PP
DB 'P'
DB 'P'+80H
DW PICK-7
PP DW DOCOL
DW DUPP
DW LIT
DW 0FFF0H
DW ANDD
DW AABORTQ
DB 0AH
DB 'OFF SCREEN'
DW ONE
DW TEXT
DW PAD
DW ONEP
DW SWAP
DW SCR
DW ATT
DW ALINE
DW CMOVE
DW UPDAT
DW EXIT
;
DB 84H ; PREV
DB 'PRE'
DB 'V'+80H
DW PP-5
PREV DW DOVAR
DW BUF1
;
DB 83H ; PWSTORE
DB 'PW'
DB '!'+80H
DW PREV-7
PWSTOR DW $+2
POP DX
POP AX
OUT DX,AX
JMP NEXT
;
DB 83H ; PW@
DB 'PW'
DB '@'+80H
DW PWSTOR-6
PWAT DW $+2
POP DX
IN AX,DX
JMP APUSH
;
DB 85H ; QUERY
DB 'QUER'
DB 'Y'+80H
DW PWAT-6
QUERY DW DOCOL
DW TIB
DW ATT
DW LIT
DW 50H
DW EXPEC
DW ZERO
DW TOIN
DW STORE
DW EXIT
;
DB 84H ; QUIT
DB 'QUI'
DB 'T'+80H
DW QUERY-8
QUIT DW DOCOL
DW ZERO
DW BLK
DW STORE
DW LBRAC
QUIT1 DW CR
DW RPSTO
DW QUERY
DW INTER
DW STATE
DW ATT
DW NOTT
DW ZBRAN
DW OFFSET QUIT2-$
DW ADOTQ
DB 2
DB 'OK'
QUIT2 DW BRAN
DW QUIT1-$
DW EXIT
;
DB 82H ; R#
DB 'R'
DB '#'+80H
DW QUIT-7
RSHARP DW DOUSE
DW 4CH
;
DB 83H ; R/W
DB 'R/'
DB 'W'+80H
DW RSHARP-5
RSLW DW DOCOL
DW TRSLW
DW ATT
DW EXEC
DW EXIT
;
DB 82H ; R0
DB 'R'
DB '0'+80H
DW RSLW-6
RZERO DW DOUSE
DW 08
;
DB 82H ; R>
DB 'R'
DB '>'+80H
DW RZERO-5
FROMR DW $+2
MOV AX,[BP]
INC BP
INC BP
JMP APUSH
;
DB 82H ; R@
DB 'R'
DB '@'+80H
DW FROMR-5
RAT DW $+2
MOV AX,[BP]
JMP APUSH
;
DB 0C6H ; REPEAT
DB 'REPEA'
DB 'T'+80H
DW RAT-5
REPEA DW DOCOL
DW TOR
DW TOR
DW AGAIN
DW FROMR
DW FROMR
DW TWOM
DW THENN
DW EXIT
;
DB 84H ; ROLL
DB 'ROL'
DB 'L'+80H
DW REPEA-9
ROLL DW DOCOL
DW DUPP
DW ONE
DW LESS
DW AABORTQ
DB 11H
DB 'ROLL ARGUMENT < 1'
DW ONEP
DW DUPP
DW PICK
DW SWAP
DW TWOST
DW SPAT
DW PLUS
ROLL1 DW DUPP
DW TWOM
DW ATT
DW OVER
DW STORE
DW TWOM
DW SPAT
DW OVER
DW ULESS
DW NOTT
DW ZBRAN
DW ROLL1-$
DW DDROP
DW EXIT
;
DB 83H ; ROT
DB 'RO'
DB 'T'+80H
DW ROLL-7
ROT DW $+2
POP DX
POP BX
POP AX
PUSH BX
JMP DPUSH
;
DB 83H ; RPSTORE
DB 'RP'
DB '!'+80H
DW ROT-6
RPSTO DW $+2
MOV BX,UP
MOV BP,8[BX]
JMP NEXT
;
DB 83H ; RP@
DB 'RP'
DB '@'+80H
DW RPSTO-6
RPAT DW $+2
MOV AX,BP
JMP APUSH
;
DB 83H ; RPP
DB 'RP'
DB 'P'+80H
DW RPAT-6
RPPP DW DOCON
DW RPP
;
DB 84H ; S->D
DB 'S->'
DB 'D'+80H
DW RPPP-6
STOD DW $+2
POP DX
SUB AX,AX
OR DX,DX
JNS STOD1
DEC AX
STOD1: JMP DPUSH
;
DB 82H ; S0
DB 'S'
DB '0'+80H
DW STOD-7
SZERO DW DOCOL
DW SPZERO
DW ATT
DW EXIT
;
DB 8CH ; SAVE-BUFFERS
DB 'SAVE-BUFFER'
DB 'S'+80H
DW SZERO-5
SAVBUF DW DOCOL
DW NOBUF
DW ONEP
DW ZERO
DW ADO
SAVBUF1 DW LIT
DW 7FFFH
DW BUFFE
DW DROP
DW ALOOP
DW OFFSET SAVBUF1-$
DW EXIT
;
DB 83H ; SCR
DB 'SC'
DB 'R'+80H
DW SAVBUF-0FH
SCR DW DOUSE
DW 4EH
;
DB 83H ; SEC
DB 'SE'
DB 'C'+80H
DW SCR-6
SEC DW DOVAR
DW 0
;
DB 88H ; SEC-READ
DB 'SEC-REA'
DB 'D'+80H
DW SEC-6
;SECRD DW DOCOL
; DW LIT
; DW 201H
; DW LIT
; DW SECRW
; DW EXEC
; DW EXIT
;
;SECRW DW DOCOL
; DW LIT
; DW 3
; DW ZERO
; DW ADO
;SECRW1 DW DUPP
; DW USEE
; DW ATT
; DW TRACK
; DW ATT
; DW LIT
; DW 100H
; DW STAR
; DW SEC
; DW ATT
; DW PLUS
; DW DRIVE
; DW ATT
; DW LIT
; DW 13H
; DW INTCAL
; DW DUPP
; DW DSKERR
; DW STORE
; DW ZEQU
; DW ZBRAN
; DW OFFSET SECRW2-$
; DW LEAVE
; DW BRAN
; DW OFFSET SECRW3-$
;SECRW2 DW ZERO
; DW ZERO
; DW ZERO
; DW ZERO
; DW LIT
; DW 13H
; DW INTCAL
; DW DROP
;SECRW3 DW ALOOP
; DW OFFSET SECRW1-$
; DW DROP
; DW EXIT
SECRD DW $+2 ; 1.0405.03
MOV AX,DRIVE+2 ; 1.0405.03
MOV BX,USEE+2 ; 1.0405.03
MOV CX,01H ; 1.0405.03
MOV DX,SEC+2 ; 1.0405.03
PUSH SI ; 1.0405.03
PUSH BP ; 1.0405.03
INT 25H ; 1.0405.03
POPF ; 1.0405.03
POP BP ; 1.0405.03
POP SI ; 1.0405.03
MOV AH,0 ; 1.0405.03
MOV DSKERR+2,AX ; 1.0405.03
JMP NEXT
;
DB 89H ; SEC-WRITE
DB 'SEC-WRIT'
DB 'E'+80H
DW SECRD-0BH
;SECWT DW DOCOL
; DW LIT
; DW 301H
; DW LIT
; DW SECRW
; DW EXEC
; DW EXIT
SECWT DW $+2 ; 1.0405.03
MOV AX,DRIVE+2 ; 1.0405.03
MOV BX,USEE+2 ; 1.0405.03
MOV CX,01H ; 1.0405.03
MOV DX,SEC+2 ; 1.0405.03
PUSH SI ; 1.0405.03
PUSH BP ; 1.0405.03
INT 26H ; 1.0405.03
POPF ; 1.0404.03
POP BP ; 1.0405.03
POP SI ; 1.0405.03
MOV AH,0 ; 1.0405.03
MOV DSKERR+2,AX ; 1.0405.03
JMP NEXT ; 1.0405.03
;
DB 87H ; SEC/BLK
DB 'SEC/BL'
DB 'K'+80H
DW SECWT-0CH
SPBL DW DOVAR
DW 2
DW 2
DW 8
DW 8
DW 8
DW 8
DW 8
;
DB 86H ; SEC/TR
DB 'SEC/T'
DB 'R'+80H
DW SPBL-0AH
SPTR DW DOVAR
DW 8H
DW 8H
DW 1AH
DW 34H
DW 34H
DW 40H
DW 40H
;
DB 87H ; SET-DRX
DB 'SET-DR'
DB 'X'+80H
DW SPTR-9H
SETDRX DW DOCOL
DW DRDEN
DW DENSTY
DW STORE
DW BPDRV
DW OFSET
DW PSTOR
DW EXIT
;
DB 84H ; SIGN
DB 'SIG'
DB 'N'+80H
DW SETDRX-0AH
SIGN DW DOCOL
DW ZLESS
DW ZBRAN
DW OFFSET SIGN1-$
DW LIT
DW 2DH
DW HOLD
SIGN1 DW EXIT
;
DB 86H ; SMUDGE
DB 'SMUDG'
DB 'E'+80H
DW SIGN-7
SMUDG DW DOCOL
DW LATES
DW LIT
DW 20H
DW TOGGL
DW EXIT
;
DB 83H ; SPSTORE
DB 'SP'
DB '!'+80H
DW SMUDG-9
SPSTO DW $+2
MOV BX,UP
MOV SP,6[BX]
JMP NEXT
;
DB 83H ; SP0
DB 'SP'
DB '0'+80H
DW SPSTO-6
SPZERO DW DOUSE
DW 06
;
DB 83H ; SP@
DB 'SP'
DB '@'+80H
DW SPZERO-6
SPAT DW $+2
MOV AX,SP
JMP APUSH
;
DB 85H ; SPACE
DB 'SPAC'
DB 'E'+80H
DW SPAT-6
SPACE DW DOCOL
DW BLL
DW EMIT
DW EXIT
;
DB 86H ; SPACES
DB 'SPACE'
DB 'S'+80H
DW SPACE-8
SPACS DW DOCOL
DW ZERO
DW MAX
DW QDUP
DW ZBRAN
DW OFFSET SPACS2-$
DW ZERO
DW ADO
SPACS1 DW SPACE
DW ALOOP
DW OFFSET SPACS1-$
SPACS2 DW EXIT
;
DB 85H ; SPBLK
DB 'SPBL'
DB 'K'+80H
DW SPACS-9
SPBLK DW DOCOL
DW DENSTY
DW ATT
DW LIT
DW 6
DW MIN
DW TWOST
DW SPBL
DW PLUS
DW ATT
DW EXIT
;
DB 85H ; SPDRV
DB 'SPDR'
DB 'V'+80H
DW SPBLK-8
SPDRV DW DOCOL
DW BPDRV
DW SPBLK
DW STAR
DW EXIT
;
DB 83H ; SPT
DB 'SP'
DB 'T'+80H
DW SPDRV-8
SPT DW DOCOL
DW DENSTY
DW ATT
DW LIT
DW 6
DW MIN
DW TWOST
DW SPTR
DW PLUS
DW ATT
DW EXIT
;
DB 85H ; STATE
DB 'STAT'
DB 'E'+80H
DW SPT-6
STATE DW DOUSE
DW 50H
;
DB 84H ; SWAP
DB 'SWA'
DB 'P'+80H
DW STATE-8
SWAP DW $+2
POP DX
POP AX
JMP DPUSH
;
DB 87H ; SYSCALL
DB 'SYSCAL'
DB 'L'+80H
DW SWAP-7
SYSCALL DW DOCOL
DW SWAP
DW LIT
DW 100H
DW STAR
DW SWAP
DW ZERO
DW ZERO
DW ROT
DW LIT
DW 21H
DW INTCAL
DW EXIT
;
DB 87H ; T&SCALC
DB 'T&SCAL'
DB 'C'+80H
DW SYSCALL-0AH
TSCALC DW DOCOL
DW TTSCALC
DW ATT
DW EXEC
DW EXIT
;
DB 84H ; TEXT
DB 'TEX'
DB 'T'+80H
DW TSCALC-0AH
TEXT DW DOCOL
DW HERE
DW CSLL
DW ONEP
DW BLANK
DW WORDD
DW BLL
DW OVER
DW DUPP
DW CAT
DW PLUS
DW ONEP
DW CSTOR
DW PAD
DW CSLL
DW ONEP
DW CMOVE
DW EXIT
;
DB 0C4H ; THEN
DB 'THE'
DB 'N'+80H
DW TEXT-7
THENN DW DOCOL
DW QCOMP
DW TWO
DW QPAIR
DW HERE
DW OVER
DW SUBB
DW SWAP
DW STORE
DW EXIT
;
DB 83H ; TIB
DB 'TI'
DB 'B'+80H
DW THENN-7
TIB DW DOUSE
DW 0AH
;
DB 86H ; TOGGLE
DB 'TOGGL'
DB 'E'+80H
DW TIB-6
TOGGL DW $+2
POP AX
POP BX
XOR [BX],AL
JMP NEXT
;
DB 85H ; TRACK
DB 'TRAC'
DB 'K'+80H
DW TOGGL-9
TRACK DW DOVAR
DW 0
;
DB 88H ; TRAVERSE
DB 'TRAVERS'
DB 'E'+80H
DW TRACK-8
TRAV DW DOCOL
DW SWAP
TRAV1 DW OVER
DW PLUS
DW LIT
DW 07FH
DW OVER
DW CAT
DW LESS
DW ZBRAN
DW OFFSET TRAV1-$
DW SWAP
DW DROP
DW EXIT
;
DB 84H ; TYPE
DB 'TYP'
DB 'E'+80H
DW TRAV-0BH
TYPEE DW DOCOL
DW DUPP
DW ZGREAT
DW ZBRAN
DW OFFSET TYPE2-$
DW OVER
DW PLUS
DW SWAP
DW ADO
TYPE1 DW IDO
DW CAT
DW EMIT
DW ONE
DW AUPLOOP
DW OFFSET TYPE1-$
DW BRAN
DW OFFSET TYPE3-$
TYPE2 DW DDROP
TYPE3 DW EXIT
;
DB 82H ; U*
DB 'U'
DB '*'+80H
DW TYPEE-7
USTAR DW $+2
POP AX
POP BX
MUL BX
XCHG AX,DX
JMP DPUSH
;
DB 82H ; U.
DB 'U'
DB '.'+80H
DW USTAR-5
UDOT DW DOCOL
DW ZERO
DW DDOT
DW EXIT
;
DB 85H ; U/MOD
DB 'U/MO'
DB 'D'+80H
DW UDOT-5
USLM DW $+2
POP BX
POP DX
POP AX
DIV BX
JMP DPUSH
;
DB 82H ; U<
DB 'U'
DB '<'+80H
DW USLM-8
ULESS DW DOCOL
DW ZERO
DW SWAP
DW ZERO
DW DLESS
DW EXIT
;
DB 0C5H ; UNTIL
DB 'UNTI'
DB 'L'+80H
DW ULESS-5
UNTIL DW DOCOL
DW ONE
DW QPAIR
DW COMP
DW ZBRAN
DW HERE
DW SUBB
DW COMMA
DW EXIT
;
DB 82H ; UP
DB 'U'
DB 'P'+80H
DW UNTIL-8
UPP DW DOCON
DW UP
;
DB 86H ; UPDATE
DB 'UPDAT'
DB 'E'+80H
DW UPP-5
UPDAT DW DOCOL
DW PREV
DW ATT
DW ATT
DW LIT
DW 8000H
DW ORR
DW PREV
DW ATT
DW STORE
DW EXIT
;
DB 83H ; USE
DB 'US'
DB 'E'+80H
DW UPDAT-9
USEE DW DOVAR
DW BUF1
;
DB 84H ; USER
DB 'USE'
DB 'R'+80H
DW USEE-6
USER DW DOCOL
DW CON
DW ASCODE
DOUSE: INC DX
MOV BX,DX
MOV BL,[BX]
SUB BH,BH
MOV DI,UP
LEA AX,[BX+DI]
JMP APUSH
;
DB 88H ; VARIABLE
DB 'VARIABL'
DB 'E'+80H
DW USER-7
VAR DW DOCOL
DW CREATE
DW TWO
DW ALLOT
DW EXIT
;
DB 88H ; VOC-LINK
DB 'VOC-LIN'
DB 'K'+80H
DW VAR-0BH
VOCL DW DOUSE
DW 14H
;
DB 8AH ; VOCABULARY
DB 'VOCABULAR'
DB 'Y'+80H
DW VOCL-0BH
VOC DW DOCOL
DW TVOCAB
DW ATT
DW EXEC
DW EXIT
;
DB 87H ; WARNING
DB 'WARNIN'
DB 'G'+80H
DW VOC-0DH
WARN DW DOUSE
DW 0EH
;
DB 85H ; WHERE
DB 'WHER'
DB 'E'+80H
DW WARN-0AH
WHERE DW DOCOL
DW BLK
DW ATT
DW ZBRAN
DW WHERE1-$
DW BLK
DW ATT
DW DUPP
DW SCR
DW STORE
DW CR
DW CR
DW ADOTQ
DB 5
DB 'SCR# '
DW DUPP
DW DOT
DW TOIN
DW ATT
DW LIT
DW 3FFH
DW MIN
DW CSLL
DW SLMOD
DW DUPP
DW ADOTQ
DB 6
DB 'LINE# '
DW DOT
DW CSLL
DW STAR
DW ROT
DW BLOCK
DW PLUS
DW CR
DW CR
DW CSLL
DW DTRAI
DW TYPEE
DW TOIN
DW ATT
DW LIT
DW 3FFH
DW GREAT
DW PLUS
DW BRAN
DW WHERE2-$
WHERE1 DW TOIN
DW ATT
WHERE2 DW CR
DW HERE
DW CAT
DW DUPP
DW TOR
DW SUBB
DW HERE
DW RAT
DW PLUS
DW ONEP
DW CAT
DW LIT
DW 20H
DW EQUAL
DW ZBRAN
DW WHERE3-$
DW ONEM
WHERE3 DW SPACS
DW FROMR
DW ZERO
DW ADO
WHERE4 DW LIT
DW 5EH
DW EMIT
DW ALOOP
DW WHERE4-$
DW EXIT
;
DB 0C5H ; WHILE
DB 'WHIL'
DB 'E'+80H
DW WHERE-8
WHILE DW DOCOL
DW IFF
DW TWOP
DW EXIT
;
DB 85H ; WIDTH
DB 'WIDT'
DB 'H'+80H
DW WHILE-8
WIDTHH DW DOUSE
DW 0CH
;
DB 84H ; WORD
DB 'WOR'
DB 'D'+80H
DW WIDTHH-8
WORDD DW DOCOL
DW TWORD
DW ATT
DW EXEC
DW EXIT
;
DB 0C0H ; X (NULL)
DB 80H
DW WORDD-7
NULL DW DOCOL
DW BLK
DW ATT
DW ZBRAN
DW OFFSET NULL1-$
DW STATE
DW ATT
DW QSTREAM
NULL1 DW FROMR
DW DROP
DW EXIT
;
DB 83H ; XOR
DB 'XO'
DB 'R'+80H
DW NULL-4
XORR DW $+2
POP AX
POP BX
XOR AX,BX
JMP APUSH
;
DB 0C1H ; [
DB '['+80H
DW XORR-6
LBRAC DW DOCOL
DW ZERO
DW STATE
DW STORE
DW EXIT
;
DB 0C9H ; [COMPILE]
DB '[COMPILE'
DB ']'+80H
DW LBRAC-4
BCOMP DW DOCOL
DW QCOMP
DW DFIND
DW NOTT
DW AABORTQ
DB 9
DB 'NOT FOUND'
DW DROP
DW CFA
DW COMMA
DW EXIT
;
DB 81H ; ]
DB ']'+80H
DW BCOMP-0CH
RBRAC DW DOCOL
DW LIT
DW 0C0H
DW STATE
DW STORE
DW EXIT
;
FSEG ENDS
;
END ORIG
;
MVP-FORTH
by
Glen B. Haydon
Box 429 Star Route 2
La Honda, CA 94020
distributed by
MOUNTAIN VIEW PRESS, INC
P.O. Box 4656
Mountain View, CA 94040
(415) 961-4103
MVP-FORTH is a well documented public domain implementation of FORTH
which has remained stable since early 1982. The run time file, FORTH.COM, all
of the standard 8088/8086 assembler source code for the kernel, and the FORTH
source screens which have been compiled on top of the MVP-FORTH kernel are
included in the ARCed file MVPFORTH.ARC.
These files are what Mountain View Press includes in the disks with
the MVP-FORTH Programmer's Kit. I will provide support for those who buy
the disks from them or make a contribution to me which will register you as a
ShareWare user. Otherwise you are on your own. All of the source is
included but you have to know how to use it.
It is recommended that you get the following documentation:
All About FORTH, 2nd Edition, by Glen B. Haydon -- A glossary of all
FORTH function including other dialects which were in common usage when the
book was published.
MVP-FORTH Assembly Source Code, by Glen B. Haydon and Robert Kuntz --
The assembley source listing for the MVP-FORTH kernel in 8080, 8088/86 and
6502 language assemblers.
FORTH GUIDE, by Glen B. Haydon -- A guide for novice beginners and
intermediate users based on two years of teaching a weekly seminair. The
experts may even pick up a few pearls.
Starting FORTH, by Leo Brodie -- The first and one of the classic
tutorials for FORTH. MVP-FORTH has added supplemental functions to cover
those used in this book. There are only a couple of slight differences which
could not be implemented - see All About FORTH
The Complete FORTH, by Allan Winfield -- A second complete tutorial
for FORTH. It too goes well with MVP-FORTH.
In addition to these books, a series of nine Volumes include a public
domain quad precision and floating point implementation, an expert system, an
elaborate file management system, a full word processor, and the Professional
Applications Development System known as PADS. These and many other
publications on FORTH are available from THE FORTH SOURCE, Mountain View
Press. Contact them for more materials.
As with all versions of MVP-FORTH on BBS systems, this implementation
has defined two words FILE>SCREENS and SCREENS>FILE, along with the necessary
primitives. These make it possible to ARC the source screens, for
distribution and to reconstitute a FORTH SCREENS disk as distributed by
Mountain View Press.
The file, SCREENS.MVP, when deARCed, yields a file of 140 compressed
FORTH SCREENS. They can be decompressed and loaded onto a freshly formatted
floppy disk. You are prompted for the necessary information as required.
Because of the power of FORTH, you can easily crash you system. Do
not diapair. At first, use a single floppy drive to get familiar with what
you are doing.
You will not need the FORTH SCREENS containing the source code. It
has all been compiled in to FORTH.COM. I suggest that you start with a
scratch FORTH SCREENS disk in Drive A, known to FORTH as DR0. Keep a separate
FORTH SCREENS disk and FORTH FILES disk. When you use SAVE-FORTH, put the
FORTH FILES disk in Drive A. Otherwise, keep the FORTH SCREENS disk in Drive
A.
At the very beginning deARC MVP-FORTH to a floppy disk on drive A.
Load the program FORTH.COM. (You can return to the system with BYE - upper
case.) Enter the function FILE>SCREENS. The file you want at the prompt is: A:SCREENS.MVP. Then before entering the beginning screen number, remove the
DOS disk from Drive A, and insert a freshly formatted and labeled FORTH
SCREENS disk. Now enter the beginning screen number as 10. The screens will
be written to the FORTH SCREENS disk. The new code with which this is done is
now on Screens 130 through 138. After you learn some FORTH you might be
interested in seeing how this is done.
After you are familiar with what you are doing, you can move the file
FORTH.COM to any location you wish. I would still keep my FORTH Screens on a
floppy disk in Drive A, until you are further along. Then a number of other
ways of using the system will become obvious.
There are many ways you can use FORTH and other programs on the same
computer without getting into trouble. I partition the top 2 megabytes of a
10 meg hard disk for FORTH SCREENS. My only concern is that I do not let the
other program files get larger that 8 megs of space. In another system I have
a separate partition of a hard disk exclusively for FORTH SCREENS. In still
other systems, I can access FORTH SCREENS as random records in DOS files. But
these techniques are more advanced. I will try to clean up the various
techniques I use and put them on BBSs as time allows.
FORTH is the most powerful programming language I know.
The user is responsible for the use of all of that power.
FORTH originated as a simplified operating system.
FORTH grew to emulate a simple necessary and sufficient processor.
To use FORTH, master the few kernel functions.
KEEP IT SIMPLE.
Volume in drive A has no label
Directory of A:\
FILES31 TXT 1030 8-20-87 10:45a
FORTH COM 20224 2-04-87 12:21p
GO BAT 38 8-20-87 11:00a
GO TXT 771 8-20-87 11:02a
MVPFORTH ARC 57992 7-22-87 2:42p
MVPFORTH ASM 59761 1-01-80 12:14a
MVPFORTH DOC 5522 2-09-87 4:09p
SCREENS MVP 30336 2-03-87 9:21p
8 file(s) 175674 bytes
142336 bytes free