IMD 1.16: 1/06/2007 10:02:38 FOGCPM.170 --FOGCPM170MVPFORTHDOC; MVPFORTHASM MVPFORTHASM !"#$%&'()*MVPFORTHASM+,-./0123456789:MVPFORTHASM?;<=>?@AB-04-00 87 -CPM170 DOCMVPFORTHDES CDDDFORTH DOCEFGDDFORTH SCRHIJKLMNOPQRSTUVWDDFORTH SCRXYZ[\]^_`abcdefgDDFORTH SCRhijklmnopqrstuvwDDFORTH SCR`xyz{|}~SDFORTH DOCSDFORTH SQRgASMFZ80 DOCAUTOST COMdThis is the disk name.  DOCUMENT FILE FOR THE MVP-FORTH PACKAGE Thi packag contain th followin majo file o thre single-density disks: MVPFORTH.ASM Th sourc fil fo th public-domai FORTH- 7 versio o栠 th堠 FORTȠ language implemented b Dr. Gle B HaydonThi fil will assemble with ASM.COM. AUTOST.CO Th assemble versio o MVP-FORTHwit th utilit an edito screen loade (se below). ASMFZ80.DOà Th documentatio fil fo th assembler. hav deletede fe line o th origina .DO fil originall writte b Michae M Rubenstein a wa th assembler fo us in this package. SDFORTH.SCR Contains the utility, editor, and assembler (ASMFZ80 screen fo us i th single-  densit format Follo th instruction i SDFORTH.DOC. SDFORTH.DOà Contain instruction o ho t implemen MVP-FORTH on single-density disks. DDFORTH.SCҠ Contain th sam FORTȠ screen tha SDFORTH.SCҠ does Althoug thi fil i locate o single-densit disk ɠ hav arrange th screen s tha the wil b usabl i th double-densit format Follo the instruction i DDFORTH.DOC. DDFORTH.DOà Contain instruction o ho t implemen MVP-FORTH on double-density disks. SOME NOTES CONCERNING FORTH: (1) ɠ hav pu togethe packag tha bot single- an double-densit Osborn user ca use her ar fe suggestion t hel th use ge th maximu benefi fro it:  (A Documentatio concernin usag o th "words containe i th sourc fil (MVPFORTH.ASM i availabl i th book "All About FORTH", by Glen B. Haydon. This book currently (6/83 cost $20 an i availabl fro Mountai Vie Pres ۠ (415 961-410 ] Thi i worthwhil purchase for those who want to use MVP-FORTH. (B) An excellent way to learn how to use FORTH would be to buy th book "Startin FORTH" b Le Brodie This boo cost $1 (sof cover an i availabl a man boo stores a wel a throug Mountai Vie Press Chapte three [ titled, "THE EDITOR (AND STAFF)"] explains how to use the editor provided in this package. (CFo anyon intereste i learnin FORTH Th FORT INTERES GROU (FIG ha a excellen publication "FORT DIMENSIONS", and all back issues are available in reprint. Membershi i FI includin issue o "FORTȠ DIMEN- SIONS" i $1 annuall P.O Bo 110 Sa Carlos C 9407 (415 962-8653]. (DTher i FORTȠ compute bulleti boar ( tree- structured "Communitree" bulletin board), (415) 538-3580. (2) Notes on the utility screens (SD:135-144,DD:247-256) (A Th "CAS STATEMENT (SD:136,DD:248 i b Dr Charle E Eake (fro FORT DIMENSION II/3 p37) I an CAS statemen (borrowe fro Pascal ɠ believe ha bee accepted as "standard", this one has. (BTh CHECKSU scree (SD:140,DD:252 i b Klaxo Surali an Le Brodi (fro FORT DIMENSION IV/3 p15) hav use thi utilit t verif th accurac o al o th screen containe i thi packag [no yo kno wha th notation "CR VE xxxxx (locate o eac screen) i use for] T verif th accurac o th you screens firs lis th scree (e.g. 14 LIS to use. (D Th firs scree (SD:135,DD:247 i loa screen use t loa al o th utilities Not tha th wor "THRU" use o al o th loa screens i define o thi screen T loa (compile an screen typ th numbe o th screen( whic put i o th FORTȠ computatio stack) then type LOAD . (3) A Note on the Editor: (SD:145-163,DD:257-275) I FORTH "word" ca eithe b execute directl fro th keyboard o store o dis t b execute later A edito i use t writ t disk Thi edito wa writte b S.H Danie (fro FORT DIMENSION III/3 p80) an i functionall identica t th polyFORT (FORTH,Inc edi- tor A note earlier instruction fo it us ar containe i chapte o "Starting FORTH". (4) A note on ASMFZ80, the assembler: (SD:165-194,DD:277-306) I FORTH a assemble i use t defin "words i th machin languag o th CPU Thi give th FORT programme th abilit t writ program tha execut faste tha thos writte entirel i high-leve code possibl disadvantag o definin word i low-leve cod is that machine code is not transportable between CPU's. Hig蠠 leve젠 FORTȠ generall execute faste tha interprete BASIC an slowe tha assembl language ASMFZ8 (fro th RCP network wa writte b Michae M Rubenstein Thi assemble wa writte i fig-FORT word use b th earlie versio o SOFTWAR WORK FORTȠ (th FORT distribute b Osborne) modifie i t wor wit MVP-FORTH an i seem t wor lik th original Se ASMFZ80.DOà fo usag instructions lef ou th las scree o th origina assemble (called PURG ASSEMBLER becaus couldn' ge i t work Incidentally wit MVP-FORTȠi i possibl t writ "words int th sourc cod wit Wordsta -- the assembl it. (5) A few notes on MVP-FORTH: (A) The CP/M printer toggle (^P) works from within FORTH. (B) All of the special function keys (SFK) are operational. (CWhenever possible, leav FORTH b typin "BYE -- otherwise change mad t th las on o tw screen might not get written to disk. J.E. Crowell San Jose, CA e) modifie i t wor wit MVP-FORTH an i seem t wor lik th original Se ASMFZ80.DOà fo usag instructions lef ou th las scree o th origina assemble (called PURG ASSEMBLER becaus couldn' ge i t work Incidentally wit MVP-FORTȠi i possibl t writ "words int th sourc cod wit Wordsta -- the assembl it. (5) A few notes on MVP-FORTH: (A) The CP/M printer toggle (^P) works from within FORTH. (B) All of the special function keys (SFK) are operational. (CWhenever possible, leav FORTH b typin;TITLE 'MVPFORTH VERSION 1.01.02 - 19 JUNE 1982' ;PAGE 56 ; ; ; MVPFORTH KERNEL VERSION 1.01.02 ; ; 8080 ASSEMBLY CODE FOR OPERATION UNDER CP/M ; ; MODIFIED FOR THE OSBORNE AS ; ; MVPFORTH KERNEL VERSION 1.11.02 ; ; THIS PUBLICATION IS PLACED IN THE PUBLIC DOMAIN. ; ; PERMISSION TO DISTRIBUTE IS GRANTED BY THE INCLUSION ; OF THE FOLLOWING CREDIT: ; ; ; IMPLEMENTATION BY: ; HAYDON ENTERPRISES ; BOX 429 ROUTE 2 ; LA HONDA, CA 94020 ; ; DISTRIBUTED BY: ; MOUNTAIN VIEW PRESS, INC. ; BOX 4656 ; MOUNTAIN VIEW, CA 94040 ; ; ; SPECIAL THANKS TO THE FORTH INTEREST GROUP, PO BOX 1105 ; SAN CARLOS. CA 94070. THIS GROUP IS WELL WORTH JOINING ; AND IS AN EXCELLENT SOURCE OF FORTH INFORMATION. ; ; ; ; THIS IMPLEMENTATION HAS BEEN TRANSCRIBED FROM THE ; ORIGINAL MVPFORTH VERSION 1.00.02 WHICH IS IN FORTH ; FOR CROSS COMPILING. THIS 8080 SOURCE CODE WILL ; ASSEMBLE WITH THE MAC ASSEMBLER OR THE ASSEMBLER ; INCLUDED WITH CP/M. ; ; BLK/DRV HAS BEEN MOVED TO THE CORRECT ASCII ORDER. ; OTHERWISE IT PRODUCES AN OBJECT CODE IMAGE WHICH IS ; IDENTICAL WITH MVPFORTH VERSION 1.00.02. ; ; THE LISTING IS UNDOCUMENTED, HOWEVER IT IS FULLY ; DOCUMENTED IN THE BOOK - ALL ABOUT FORTH - AVAILABLE ; FROM MOUNTAIN VIEW PRESS, INC. ; ; DATE: 19 JUNE 1982 ; ; ; OSBORNE MODIFICATIONS: ; ; 1. THE OSBORNE BEGINS SECTORS WITH 0 THEREFORE THE ; ONEP IN IS CHANGED TO AN ADDED WORD NOOP. ; ; 2. THE OSBORNE USES 5 INCH DRIVES SO THE INITIAL DEN ; ARRAY IS CHANGED TO 0 0 . ; ; 3. THE OSBORNE EMITS A CHARACTER UNDERLINED IF THE ; EIGHTH BIT IS SET. THEREFORE EMIT HAS BEEN MODIFIED ; TO FILTER OUT THE EIGHTH BIT. ; ; 4. THE MESSAGE IN COLD HAS BEEN MODIFIED TO SHOW THE ; OSBOURNE VERSION NUMBER 1.11.02 ; ; 5. THE WORD NOOP HAS BEEN ADDED. ; ;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 ; ; ; KCSTAT EQU 03H BDOS EQU 05H KCIN EQU 06H KCOUT EQU 09H KPOUT EQU 0CH SETDSK EQU 18H SETTRK EQU 1BH SETSEC EQU 1EH SETDMA EQU 21H RDSEC EQU 24H RITSEC EQU 27H ; ; ; 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 ; ; ; ;PAGE ; ; ; ORG 100H ORIG LXI B,TCOLD LHLD INITUSER SPHL JMP NEXT TCOLD 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 D HPUSH PUSH H NEXT LDAX B INX B MOV L,A LDAX B INX B MOV H,A NEXT1 MOV E,M INX H MOV D,M XCHG PCHL ; ; ; DP0 DB 81H ; STORE DB '!'+80H DW 0 STORE DW $+2  POP H POP D MOV M,E INX H MOV M,D JMP NEXT ; DB 81H ; # DB '#'+80H DW STORE-4 DIG DW DOCOL DW BASE DW AT DW MSMOD DW ROT DW LIT DW 9 DW OVER DW LESS DW ZBRAN DW 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 AT 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 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 AT DW QDUP DW ZBRAN DW TSTRM1-$ DW BLOCK DW BRAN DW TSTRM2-$ TSTRM1 DW TIB DW AT TSTRM2 DW TOIN DW AT 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 WORD 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 D POP H DAD D JMP HPUSH ; DB 82H ; +STORE DB '+' DB '!'+80H DW PLUS-4 PSTOR DW $+2 POP H POP D MOV A,M ADD E MOV M,A INX H MOV A,M ADC D MOV M,A JMP NEXT ; DB 82H ; +- DB '+' DB '-'+80H DW PSTOR-5 PM DW DOCOL DW ZLESS DW ZBRAN DW 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 DUP DW LIMIT DW EQUAL DW ZBRAN DW PBUF1-$ DW DROP DW FIRST PBUF1 DW DUP DW PREV DW AT 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 D POP H CALL SSUB JMP HPUSH ; DB 85H ; -FIND DB '-FIN' DB 'D'+80H DW SUBB-4 DFIND DW DOCOL DW TDFIND DW AT DW EXEC DW EXIT ; DB 89H ; -TRAILING DB '-TRAILIN' DB 'G'+80H DW DFIND-8 DTRAI DW DOCOL DW DUP DW ZERO DW ADO DTRAI1 DW DDUP DW PLUS DW ONEM DW CAT DW BL DW SUBB DW ZBRAN DW DTRAI2-$ DW LEAVE DW BRAN DW DTRAI3-$ DTRAI2 DW ONEM DTRAI3 DW ALOOP DW 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 DOTQ1-$ DW ONE DW TOIN DW PSTOR DW BRAN DW DOTQ2-$ DOTQ1 DW LIT DW 22H DW STATE DW AT DW ZBRAN DW DOTQ3-$ DW COMP DW ADOTQ DOTQ3 DW WORD DW DUP DW CAT DW ONEP DW OVER DW PLUS DW CAT DW LIT DW 22H DW EQUAL DW NOTT DW QSTREAM DW STATE DW AT DW ZBRAN DW DOTQ4-$ DW CAT DW ONEP DW ALLOT DW BRAN DW DOTQ2-$ DOTQ4 DW COUNT DW TYPE DOTQ2 DW EXIT ; DB 85H ; .LINE DB '.LIN' DB 'E'+80H DW DOTQ-5 DLINE DW DOCOL DW ALINE DW DTRAI DW TYPE 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 H DAD H LXI H,0 JNC ZLES1 INX H ZLES1 JMP HPUSH ; 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 H MOV A,L ORA H JZ BRAN1 INX B INX B JMP NEXT ; 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 H INX H JMP HPUSH ; DB 82H ; 1- DB '1' DB '-'+80H DW ONEP-5 ONEM DW $+2 POP H DCX H JMP HPUSH ; 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 H DAD H JMP HPUSH ; DB 82H ; 2+ DB '2' DB '+'+80H DW TWOST-5 TWOP DW $+2 POP H INX H INX H JMP HPUSH ; DB 82H ; 2- DB '2' DB '-'+80H DW TWOP-5 TWOM DW $+2 POP H DCX H DCX H JMP HPUSH ; 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 AT DW CONT DW STORE DW CREATE DW SMUDG DW RBRAC DW ASCODE DOCOL LHLD RPP DCX H MOV M,B DCX H MOV M,C SHLD RPP INX D MOV C,E MOV B,D 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 D POP H MOV A,D XRA H JM LES1 CALL SSUB LES1 INR H DCR H JM LES2 LXI H,0 JMP HPUSH LES2 LXI H,1 JMP HPUSH ; 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 D JMP ALOOP1 ; DB 87H ; <-FIND> DB '<-FIND' DB '>'+80H DW APLOOP-0AH ADFIND DW DOCOL DW BL DW WORD DW CONT DW AT DW AT DW AFIND DW EXIT ; DB 84H ; <."> DB '<."' DB '>'+80H DW ADFIND-0AH ADOTQ DW DOCOL DW RAT DW COUNT DW DUP DW ONEP DW FROMR DW PLUS DW TOR DW TYPE DW EXIT ; DB 87H ; DB ''+80H DW ADOTQ-7 AUPLOOP DW $+2 POP D LHLD RPP MOV A,M ADD E MOV M,A MOV E,A INX H MOV A,M ADC D MOV M,A INX H INR D DCR D MOV D,A JC AUPLOO1 MOV A,E SUB M MOV A,D INX H SBB M JC BRAN1 JMP AUPLOO2 AUPLOO1 INX H AUPLOO2 INX H SHLD RPP INX B INX B 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 ; < DB '<'+80H DW ASCODE-0AH ADCMOVE DW $+2 MOV L,C MOV H,B POP B POP D XTHL DAD B DCX H XCHG DAD B DCX H XCHG ADCMOV1 MOV A,B ORA C JZ ADCMOV2 MOV A,M DCX H STAX D DCX D DCX B JNZ ADCMOV1 ADCMOV2 POP B JMP NEXT ; DB 8BH ; DB ''+80H DW ADCMOVE-0BH AQTERM DW $+2 LXI H,0 JMP PQTER ; DB 88H ; DB ''+80H DW AQTERM-0EH AABORTQ DW DOCOL DW ZBRAN DW AABTQ1-$ DW WHERE DW CR DW RAT DW COUNT DW TYPE DW SPSTO DW QUIT DW BRAN DW AABTQ2-$ AABTQ1 DW FROMR DW DUP DW CAT DW PLUS DW ONEP DW TOR AABTQ2 DW EXIT ; DB 87H ; DB ''+80H DW AABORTQ-0BH AABORT DW DOCOL DW SPSTO DW QSTAC DW FORTH DW DEFIN DW QUIT DW EXIT ; DB 87H ; DB ''+80H DW AABORT-0AH ABLOCK DW DOCOL DW OFSET DW AT DW PLUS DW TOR DW PREV DW AT DW DUP DW AT DW RAT DW SUBB DW TWOST DW ZBRAN DW ABLOCK3-$ ABLOCK1 DW PBUF DW NOTT DW ZBRAN DW ABLOCK2-$ DW DROP DW RAT DW BUFFE DW DUP DW RAT DW ONE DW RSLW DW TWOM ABLOCK2 DW DUP DW AT DW RAT DW SUBB DW TWOST DW NOTT DW ZBRAN DW ABLOCK1-$ DW DUP DW PREV DW STORE ABLOCK3 DW FROMR DW DROP DW TWOP DW EXIT ; DB 86H ; DB ''+80H DW DCMOVE-09 ACMOVE DW $+2 MOV L,C MOV H,B POP B POP D XTHL JMP ACMOVE2 ACMOVE1 MOV A,M INX H STAX D INX D DCX B ACMOVE2 MOV A,B ORA C JNZ ACMOVE1 POP B JMP NEXT ; DB 84H ; DB ''+80H DW ACMOVE-0AH ACRA DW $+2 LXI D,4AH LHLD UP DAD D MVI M,0 INX H MVI M,0 JMP PCR ; DB 84H ; DB ''+80H DW ACRA-7 ADO DW $+2 LHLD RPP DCX H DCX H DCX H DCX H SHLD RPP POP D MOV M,E INX H MOV M,D POP D INX H MOV M,E INX H MOV M,D JMP NEXT ; DB 86H ; DB ''+80H DW ADO-7 AEMIT DW $+2 POP H PUSH B MOV C,L CALL CPOUT POP B LXI D,4AH LHLD UP DAD D MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E JMP NEXT ; DB 88H ; DB ''+80H DW AEMIT-9 AEXPECT DW DOCOL DW OVER DW PLUS DW OVER DW ADO AEXPEC1 DW KEY DW DUP DW LIT DW 8 DW EQUAL DW OVER DW LIT DW 7FH DW EQUAL DW ORR DW ZBRAN DW AEXPEC4-$ DW DROP DW DUP DW IDO DW EQUAL DW DUP DW FROMR DW TWOM DW PLUS DW TOR DW ZBRAN DW AEXPEC2-$ DW LIT DW 7 DW BRAN DW AEXPEC3-$ AEXPEC2 DW LIT DW 8 DW DUP DW EMIT DW LIT DW 20H DW EMIT AEXPEC3 DW BRAN DW AEXPEC7-$ AEXPEC4 DW DUP DW LIT DW 0DH DW EQUAL DW ZBRAN DW AEXPEC5-$ DW LEAVE DW DROP DW BL DW ZERO DW BRAN DW AEXPEC6-$ AEXPEC5 DW DUP AEXPEC6 DW IDO DW CSTOR DW ZERO DW IDO DW ONEP DW STORE AEXPEC7 DW EMIT DW ONE DW AUPLOOP DW AEXPEC1-$ DW DROP DW EXIT ; DB 86H ; DB ''+80H DW AEXPECT-0BH AFILL DW $+2 MOV L,C MOV H,B POP D POP B XTHL XCHG AFILL1 MOV A,B ORA C JZ AFILL2 MOV A,L STAX D INX D DCX B JMP AFILL1 AFILL2 POP B JMP NEXT ; DB 86H ; DB ''+80H DW AFILL-9 AFIND DW $+2 POP D AFIND1 POP H PUSH H LDAX D XRA M ANI 03FH JNZ AFIND5 AFIND2 INX H INX D LDAX D XRA M ADD A JNZ AFIND4 JNC AFIND2 LXI H,5 DAD D XTHL AFIND3 DCX D LDAX D ORA A JP AFIND3 MOV E,A MVI D,0 LXI H,1 JMP DPUSH AFIND4 JC AFIND6 AFIND5 INX D LDAX D ORA A JP AFIND5 AFIND6 INX D XCHG MOV E,M INX H MOV D,M MOV A,D ORA E JNZ AFIND1 POP H LXI H,0 JMP HPUSH ; DB 8BH ; DB ''+80H DW AFIND-9 AINTER DW DOCOL AINTER1 DW DFIND DW ZBRAN DW AINTER4-$ DW STATE DW AT DW LESS DW ZBRAN DW AINTER2-$ DW CFA DW COMMA DW BRAN DW AINTER3-$ AINTER2 DW CFA DW EXEC AINTER3 DW BRAN DW AINTER6-$ AINTER4 DW HERE DW NUM DW DPL DW AT DW ONEP DW ZBRAN DW AINTER5-$ DW DLITE DW BRAN DW AINTER6-$ AINTER5 DW DROP DW LITER AINTER6 DW QSTAC DW BRAN DW AINTER1-$ DW EXIT ; DB 85H ; DB ''+80H DW AINTER-0EH AKEY DW $+2 JMP PKEY ; DB 86H ; DB ''+80H DW AKEY-8 ALINE DW DOCOL DW BLOCK DW SWAP DW CSLL DW STAR DW PLUS DW CSLL DW EXIT ; DB 86H ; DB ''+80H DW ALINE-9 ALOAD DW DOCOL DW QDUP DW NOTT DW AABORTQ DB 0AH DB 'UNLOADABLE' DW BLK DW AT DW TOR DW TOIN DW AT 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 ; DB ''+80H DW ALOAD-9 ALOOP DW $+2 LXI D,1 ALOOP1 LHLD RPP PUSH B MOV A,M ADD E MOV M,A MOV C,A INX H MOV A,M ADC D MOV B,A MOV A,M JM ALOOP4 ANA D JP ALOOP5 ALOOP2 INX H INX H ALOOP3 INX H SHLD RPP POP B INX B INX B JMP NEXT ALOOP4 ORA D JP ALOOP2 ALOOP5 MOV M,B MOV A,C INX H SUB M INX H MOV A,B SBB M MOV A,B JM ALOOP9 ANA A JM ALOOP7 ALOOP6 MOV A,D ANA A JP ALOOP3 POP B JMP BRAN1 ALOOP7 MOV A,M ANA A JM ALOOP6 ALOOP8 MOV A,D ANA A JM ALOOP3 POP B JMP BRAN1 ALOOP9 MOV A,B ANA A JM ALOOP8 JMP ALOOP7 ; DB 88H ; DB ''+80H DW ALOOP-9 ANUM DW DOCOL DW ZERO DW ZERO DW ROT DW DUP DW ONEP DW CAT DW LIT DW 2DH DW EQUAL DW DUP DW TOR DW PLUS DW LIT DW 0FFFFH DW DPL DW STORE DW CONV DW DUP DW CAT DW BL DW GREAT DW ZBRAN DW ANUM1-$ DW DUP 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 DUP DW CAT DW BL DW GREAT DW AABORTQ DB 0EH DB 'NOT RECOGNIZED' ANUM1 DW DROP DW FROMR DW ZBRAN DW ANUM2-$ DW DNEG ANUM2 DW EXIT ; DB 86H ; DB ''+80H DW ANUM-0BH APAGE DW DOCOL DW CR DW EXIT ; DB 85H ; DB ''+80H DW APAGE-9 ARSLW DW DOCOL DW USEE DW AT 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 DUP DW BPDRV DW SLMOD DW ZBRAN DW ARSLW3-$ DW DROP 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 SETDRV DW LEAVE ARSLW4 DW ALOOP DW ARSLW1-$ DW DROP DW SPBLK DW STAR DW SPBLK DW ZERO DW ADO ARSLW5 DW DDUP DW TSCALC DW SETIO 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 ; DB ''+80H DW ARSLW-8 ATSCALC DW DOCOL DW SPT DW SLMOD DW TRACK DW STORE DW NOOPP DW SEC DW STORE DW EXIT ; DB 8EH ; 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 AT DW COMMA DW VOCL DW STORE DW ASCODE DOVOC DB 0CDH DW DODOES DW TWOP DW C ONT DW STORE DW EXIT ; DB 8FH ; DB ''+80H DW AV79-11H AVFIG DW DOCOL DW CREATE DW LIT DW 0A081H DW COMMA DW CURR DW AT DW CFA DW COMMA DW HERE DW VOCL DW AT DW COMMA DW VOCL DW STORE DW ASCODE DB 0CDH DW DODOES DW TWOP DW CONT DW STORE DW EXIT ; DB 86H ; DB ''+80H DW AVFIG-12H AWORD DW DOCOL DW TSTREAM DW SWAP DW ENCL DW DDUP DW GREAT DW ZBRAN DW AWORD1-$ DW DDROP DW DDROP DW ZERO DW HERE DW STORE DW BRAN DW AWORD2-$ AWORD1 DW TOIN DW PSTOR DW OVER DW SUBB DW DUP DW TOR DW HERE DW CSTOR DW PLUS DW HERE DW ONEP DW FROMR DW DUP 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 D LHLD RPP DCX H DCX H SHLD RPP MOV M,E INX H MOV M,D JMP NEXT ; DB 81H ; ? DB '?'+80H DW TOR-5 QUES DW DOCOL DW AT DW DOT DW EXIT ; DB 85H ; ?COMP DB '?COM' DB 'P'+80H DW QUES-4 QCOMP DW DOCOL DW STATE DW AT 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-SSSD' DW CR DW ADOTQ DB 0AH DB '1 - 8-SSSD' 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 AT 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 DUP DW ZBRAN DW QDUP1-$ DW DUP QDUP1 DW EXIT ; DB 88H ; ?LOADING DB '?LOADIN' DB 'G'+80H DW QDUP-7 QLOAD DW DOCOL DW BLK DW AT 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 0BH DB 'EMPTY STACK' 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 AT DW EXEC DW EXIT ; DB 81H ; @ DB '@'+80H DW QTERM-0CH AT DW $+2 POP H MOV E,M INX H MOV D,M PUSH D JMP NEXT ; DB 85H ; ABORT DB 'ABOR' DB 'T'+80H DW AT-4 ABORT DW DOCOL DW TABORT DW AT 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 WORD DW DUP 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 ABS DW DOCOL DW DUP DW PM DW EXIT ; DB 0C5H ; AGAIN DB 'AGAI' DB 'N'+80H DW ABS-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 D POP H MOV A,E ANA L MOV L,A MOV A,D ANA H MOV H,A JMP HPUSH ; DB 84H ; BASE DB 'BAS' DB 'E'+80H DW ANDD-6 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 BL DW DOCON DW 20H ; DB 85H ; BLANK DB 'BLAN' DB 'K'+80H DW BL-5 BLANK DW DOCOL DW BL 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 64H DW 0FAH 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 AT DW EXEC DW EXIT ; DB 86H ; BRANCH DB 'BRANC' DB 'H'+80H DW BLOCK-8 BRAN DW $+2 BRAN1 MOV H,B MOV L,C MOV E,M INX H MOV D,M DCX H DAD D MOV C,L MOV B,H JMP NEXT ; DB 86H ; BUFFER DB 'BUFFE' DB 'R'+80H DW BRAN-9 BUFFE DW DOCOL DW USEE DW AT DW DUP DW TOR BUFF1 DW PBUF DW ZBRAN DW BUFF1-$ DW USEE DW STORE DW RAT DW AT DW ZLESS DW ZBRAN DW BUFF2-$ DW RAT DW TWOP DW RAT DW AT DW LIT DW 7FFFH DW ANDD DW ZERO DW RSLW BUFF2 DW RAT DW STORE DW RAT DW PREV DW STORE DW FROMR DW TWOP DW EXIT ; DB 85H ; BPDRV DB 'BPDR' DB 'V'+80H DW BUFFE-9 BPDRV DW DOCOL DW DENSTY DW AT DW LIT DW 6H DW MIN DW TWOST DW BPDR DW PLUS DW AT DW EXIT ; DB 83H ; BYE DB 'BY' DB 'E'+80H DW BPDRV-8 BYE DW DOCOL DW FREEZE DW HERE DW ZERO DW LIT DW 100H DW USMOD DW SWAP DW DROP DW ONEP DW TWOSL DW TWOST DW DEC DW CR DW DOT DW ADOTQ DB 5 DB 'PAGES' DW CR DW ZERO DW GO DW EXIT ; DB 82H ; CSTORE DB 'C' DB '!'+80H DW BYE-6 CSTOR DW $+2 POP H POP D MOV M,E JMP NEXT ; DB 82H ; C, DB 'C' DB ','+80H DW CSTOR-5 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 H MOV L,M MVI H,0 JMP HPUSH ; DB 83H ; CFA DB 'CF' DB 'A'+80H DW CAT-5 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 DUP DW LIT DW FIRST+2 DW STORE DW LIT DW US DW SUBB DW DUP DW LIT DW RTS DW SUBB DW DUP DW LIT DW INITUSER DW STORE DW LIT DW INITUSER+4 DW STORE DW DUP 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 ; CIN PUSH B LXI D,KCIN CALL IOS POP B RET ; DB 85H ; CLEAR DB 'CLEA' DB 'R'+80H DW CHANGE-9 CLEAR DW DOCOL DW OFSET DW AT DW PLUS DW BUFFE DW LIT DW 400H DW BL DW FILL DW UPDAT DW EXIT ; DB 85H ; CMOVE DB 'CMOV' DB 'E'+80H DW CLEAR-8 CMOVE DW DOCOL DW DUP 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 AT DW LIT DW 6 DW PLUS DW LIT DW 30H DW CMOVE DW PAGEE DW ADOTQ DB 1BH DB 'MVP-FORTH VERSION 1.11.02' 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 AT DW LIT DW FORTH+2 DW TWOP DW STORE DW DEC DW ABORT DW EXIT ; DB 87H ; COMPILE DB 'COMPIL' DB 'E'+80H DW COLD-7 COMP DW DOCOL DW QCOMP DW FROMR DW DUP DW TWOP DW TOR DW AT 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 DUP DW LIT DW 5 DW ULESS DW NOTT DW AABORTQ DB 0FH DB 'TOO MANY DRIVES' DW DUP 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 DUP DW LIT DW 7 DW ULESS DW NOTT DW AABORTQ DB 0CH DB 'OUT OF RANGE' DW DUP 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 INX D XCHG MOV E,M INX H MOV D,M PUSH D JMP NEXT ; 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 DUP DW TOR DW CAT DW BASE DW AT DW DIGIT DW ZBRAN DW CONV3-$ DW SWAP DW BASE DW AT DW USTAR DW DROP DW ROT DW BASE DW AT DW USTAR DW DPLUS DW DPL DW AT DW ONEP DW ZBRAN DW CONV2-$ DW ONE DW DPL DW PSTOR CONV2 DW FROMR DW BRAN DW CONV1-$ CONV3 DW FROMR DW EXIT ; DB 85H ; COUNT DB 'COUN' DB 'T'+80H DW CONV-0AH COUNT DW DOCOL DW DUP DW ONEP DW SWAP DW CAT DW EXIT ; COUT PUSH H LXI D,KCOUT CALL IOS POP H RET ; CPOUT CALL COUT XCHG LXI H,EPRINT+2 MOV A,M ORA A JZ CPOUT1 MOV C,E CALL POUT CPOUT1 RET ; DB 82H ; CR DB 'C' DB 'R'+80H D W COUNT-8 CR DW DOCOL DW TCR DW AT DW EXEC DW EXIT ; DB 86H ; CREATE DB 'CREAT' DB 'E'+80H DW CR-5 CREATE DW DOCOL DW BL DW WORD DW DUP DW DUP DW ONEP DW CAT DW ZERO DW EQUAL DW AABORTQ DB 1AH DB 'ATTEMPTED TO REDEFINE NULL' DW DUP DW CONT DW AT DW AT DW AFIND DW ZBRAN DW CREA1-$ DW DDROP DW WARN DW AT DW ZBRAN DW CREA1-$ DW DUP DW COUNT DW TYPE DW SPACE DW ADOTQ DB 0DH DB 'ISN',27H,'T UNIQUE ' CREA1 DW CAT DW WIDTH DW AT DW MIN DW ONEP DW ALLOT DW DUP 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 AT DW STORE DW ASCODE DOVAR INX D PUSH D JMP NEXT ; CSTAT PUSH B LXI D,KCSTAT CALL IOS POP B RET ; 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 H POP D MOV M,E INX H MOV M,D INX H POP D MOV M,E INX H MOV M,D JMP NEXT ; DB 82H ; D+ DB 'D' DB '+'+80H DW DSTOR-5 DPLUS DW $+2 LXI H,6 DAD SP MOV E,M MOV M,C INX H MOV D,M MOV M,B POP B POP H DAD D XCHG POP H MOV A,L ADC C MOV L,A MOV A,H ADC B MOV H,A POP B JMP DPUSH ; DB 83H ; D+- DB 'D+' DB '-'+80H DW DPLUS-5 DPM DW DOCOL DW ZLESS DW ZBRAN DW 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 DUP DW DPM DW BDIGS DW DIGS DW ROT DW SIGN DW EDIGS DW FROMR DW OVER DW SUBB DW SPACS DW TYPE 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 DUP DW DPM DW EXIT ; DB 85H ; DDROP DB 'DDRO' DB 'P'+80H DW DABS-7 DDROP DW $+2 POP H POP H JMP NEXT ; DB 84H ; DDUP DB 'DDU' DB 'P'+80H DW DDROP-8 DDUP DW $+2 POP H POP D PUSH D PUSH H 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 AT 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 1 ; 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 H POP D MOV A,E SUI 30H JM DIGI2 CPI 0AH JM DIGI1 SUI 7 CPI 0AH JM DIGI2 DIGI1 CMP L JP DIGI2 MOV E,A LXI H,1 JMP DPUSH DIGI2 MOV L,H JMP HPUSH ; 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 AT DW ZBRAN DW 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 H POP D SUB A SUB E MOV E,A MVI A,0 SBB D MOV D,A MVI A,0 SBB L MOV L,A MVI A,0 SBB H MOV H,A 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 0CDH DW CCOMM DW COMP DW DODOES DW EXIT ; DODOES INX D LHLD RPP DCX H MOV M,B DCX H MOV M,C SHLD RPP POP B PUSH D 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 AT 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 H JMP NEXT ; DB 83H ; DUP DB 'DU' DB 'P'+80H DW DROP-7 DUP DW $+2 POP H PUSH H JMP HPUSH ; DB 0C4H ; ELSE DB 'ELS' DB 'E'+80H DW DUP-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 LIT DW 7FH DW ANDD DW TEMIT DW AT 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 MTBUF1-$ DW EXIT ; DB 87H ; ENCLOSE DB 'ENCLOS' DB 'E'+80H DW MTBUF-10H ENCL DW $+2 POP D POP H PUSH H MOV A,E LXI D,0FFFFH DCX H ENCL1 INX H INX D CMP M JZ ENCL1 PUSH D INR M DCR M JNZ ENCL2 INX D PUSH D DCX D PUSH D JMP NEXT ENCL2 INX H INX D CMP M JZ ENCL3 INR M DCR M JNZ ENCL2 PUSH D PUSH D JMP NEXT ENCL3 PUSH D INX D PUSH D 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 H JMP NEXT1 ; DB 84H ; EXIT DB 'EXI' DB 'T'+80H DW EXEC-0AH EXIT DW $+2 LHLD RPP MOV C,M INX H MOV B,M INX H SHLD RPP JMP NEXT ; DB 86H ; EXPECT DB 'EXPEC' DB 'T'+80H DW EXIT-7 EXPEC DW DOCOL DW TEXPECT DW AT 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 BL DW WORD DW CURR DW AT DW AT DW AFIND DW ZEQU DW AABORTQ DB 19H DB 'NOT IN CURRENT VOCABULARY' DW DROP DW NFA DW DUP DW FENCE DW AT DW ULESS DW AABORTQ DB 17H DB 'IN PROTECTED DICTIONARY' DW TOR DW RAT DW CONT DW AT DW ULESS DW ZBRAN DW FORG1-$ DW FORTH FORG1 DW RAT DW CURR DW AT DW ULESS DW ZBRAN DW FORG2-$ DW FORTH DW DEFIN FORG2 DW VOCL DW AT FORG3 DW RAT DW OVER DW ULESS DW ZBRAN DW FORG4-$ DW AT DW BRAN DW FORG3-$ FORG4 DW DUP DW VOCL DW STORE FORG5 DW DUP DW LIT DW 4 DW SUBB FORG6 DW PFA DW LFA DW AT DW DUP DW RAT DW ULESS DW ZBRAN DW FORG6-$ DW OVER DW TWOM DW STORE DW AT 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 AT DW LIT DW 6 DW PLUS DW LIT DW INITUSER DW LIT DW 30H DW CMOVE DW LIT DW FORTH+2 DW TWOP DW AT DW LIT DW INITFORTH DW STORE DW EXIT ; DB 82H ; GO DB 'G' DB 'O'+80H DW FREEZE-9 GO DW $+2 POP H PCHL ; DB 84H ; HERE DB 'HER' DB 'E'+80H DW GO-5 HERE DW DOCOL DW DP DW AT 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 AT DW CSTOR DW EXIT ; DB 85H ; HPUSH DB 'HPUS' DB 'H'+80H DW HOLD-7 HPUS DW DOCON DW HPUSH ; DB 81H ; I DB 'I'+80H DW HPUS-8 IDO DW $+2 LHLD RPP MOV E,M INX H MOV D,M PUSH D JMP NEXT ; DB 82H ; I' DB 'I' DB 0A7H DW IDO-4 IPDO DW $+2 LHLD RPP LXI D,2 DAD D MOV E,M INX H MOV D,M PUSH D JMP NEXT ; 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 ; IOS LHLD 1 DAD D PCHL ; DB 89H ; INTERPRET DB 'INTERPRE' DB 'T'+80H DW IU SER-0CH INTER DW DOCOL DW TINTER DW AT DW EXEC DW EXIT ; ; DB 81H ; J DB 'J'+80H DW INTER-0CH JDO DW $+2 LHLD RPP LXI D,4 DAD D MOV E,M INX H MOV D,M PUSH D JMP NEXT ; DB 83H ; KEY DB 'KE' DB 'Y'+80H DW JDO-4 KEY DW DOCOL DW TKEY DW AT DW EXEC DW EXIT ; DB 86H ; LATEST DB 'LATES' DB 'T'+80H DW KEY-6 LATES DW DOCOL DW CURR DW AT DW AT DW EXIT ; DB 85H ; LEAVE DB 'LEAV' DB 'E'+80H DW LATES-9 LEAVE DW $+2 LHLD RPP MOV E,M INX H MOV D,M INX H MOV M,E INX H MOV M,D 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 DUP DW SCR DW STORE DW ADOTQ DB 5 DB 'SCR #' DW DOT 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 AT DW DLINE DW QTERM DW ZBRAN DW LIST2-$ DW LEAVE LIST2 DW ALOOP DW LIST1-$ DW CR DW EXIT ; DB 83H ; LIT DB 'LI' DB 'T'+80H DW LIST-7 LIT DW $+2 LDAX B INX B MOV L,A LDAX B INX B MOV H,A JMP HPUSH ; DB 0C7H ; LITERAL DB 'LITERA' DB 'L'+80H DW LIT-6 LITER DW DOCOL DW STATE DW AT DW ZBRAN DW 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 AT 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 ABS DW SWAP DW ABS 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 ABS DW TOR DW SWAP DW ABS 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 USMOD DW ROT DW ROT DW FROMR DW USMOD 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 DUP DW DPM DW RAT DW ABS DW USMOD 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 USMOD DW FROMR DW SWAP DW TOR DW USMOD 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 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 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 ; MPYX LXI H,0 MVI C,8 MPYX1 DAD H RAL JNC MPYX2 DAD D ACI 0 MPYX2 DCR C JNZ MPYX1 RET ; DB 86H ; NEGATE DB 'NEGAT' DB 'E'+80H DW MOVE-7 NEG DW $+2 POP H MOV A,L CMA MOV L,A MOV A,H CMA MOV H,A INX H JMP HPUSH ; 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 84H ; NOOP DB 'NOO' DB 'P'+80H DW NFA-6 NOOPP DW DOCOL DW EXIT ; DB 83H ; NOT DB 'NO'  DB 'T'+80H DW NOOPP-7 NOTT DW $+2 POP H MOV A,L ORA H LXI H,0 JNZ NOT1 INX H NOT1 JMP HPUSH ; DB 86H ; NUMBER DB 'NUMBE' DB 'R'+80H DW NOTT-6 NUM DW DOCOL DW TNUM DW AT 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 D POP H MOV A,E ORA L MOV L,A MOV A,D ORA H MOV H,A JMP HPUSH ; 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 D POP H PUSH H JMP DPUSH ; DB 82H ; PSTORE DB 'P' DB '!'+80H DW OVER-7 PTSTOR DW $+2 POP D LXI H,PTST1+1 MOV M,E POP H MOV A,L PTST1 OUT 0 JMP NEXT ; DB 82H ; P@ DB 'P' DB '@'+80H DW PTSTOR-5 PTAT DW $+2 POP D LXI H,PTAT1+1 MOV M,E PTAT1 IN 0 MOV L,A MVI H,0 JMP HPUSH ; 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 AT DW EXEC DW EXIT ; PCR PUSH B MVI C,ACR MOV L,C CALL CPOUT MVI C,ALF MOV L,C CALL CPOUT POP B JMP NEXT ; 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 DUP DW ONE DW LESS DW AABORTQ DB 11H DB 'PICK ARGUMENT < 1' DW TWOST DW SPAT DW PLUS DW AT DW EXIT ; PKEY CALL CIN CPI ADLE MOV E,A JNZ PKEY1 LXI H,EPRINT+2 MVI E,ABL MOV A,M XRI 1 MOV M,A PKEY1 MOV L,E MVI H,0 JMP HPUSH ; POUT LXI D,KPOUT CALL IOS RET ; DB 82H ; PP DB 'P' DB 'P'+80H DW PICK-7 PP DW DOCOL DW DUP 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 AT DW ALINE DW CMOVE DW UPDAT DW EXIT ; PQTER CALL CSTAT  LXI H,0 ORA A JZ PQTER1 INR L PQTER1 JMP HPUSH ; DB 84H ; PREV DB 'PRE' DB 'V'+80H DW PP-5 PREV DW DOVAR DW BUF1 ; DB 85H ; QUERY DB 'QUER' DB 'Y'+80H DW PREV-7 QUERY DW DOCOL DW TIB DW AT 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 AT DW NOTT DW ZBRAN DW 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 AT 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 LHLD RPP MOV E,M INX H MOV D,M INX H SHLD RPP PUSH D JMP NEXT ; DB 82H ; R@ DB 'R' DB '@'+80H DW FROMR-5 RAT DW $+2 LHLD RPP MOV E,M INX H MOV D,M PUSH D JMP NEXT ; 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 DUP DW ONE DW LESS DW AABORTQ DB 11H DB 'ROLL ARGUMENT < 1' DW ONEP DW DUP DW PICK DW SWAP DW TWOST DW SPAT DW PLUS ROLL1 DW DUP DW TWOM DW AT 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 D POP H XTHL JMP DPUSH ; DB 83H ; RPSTORE DB 'RP' DB '!'+80H DW ROT-6 RPSTO DW $+2 LHLD UP LXI D,8 DAD D MOV E,M INX H MOV D,M XCHG SHLD RPP JMP NEXT ; DB 83H ; RP@ DB 'RP' DB '@'+80H DW RPSTO-6 RPAT DW $+2 LHLD RPP JMP HPUSH ; 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 D LXI H,0 MOV A,D ANI 80H JZ STOD1 DCX H STOD1 JMP DPUSH ; DB 82H ; S0 DB 'S' DB '0'+80H DW STOD-7 SZERO DW DOCOL DW SPZERO DW AT 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 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 $+2 PUSH B LXI D,RDSEC CALL IOS STA DSKERR+2 POP B JMP NEXT ; DB 89H ; SEC-WRITE DB 'SEC-WRIT' DB 'E'+80H DW SECRD-0BH SECWT DW $+2 PUSH B LXI D,RITSEC CALL IOS STA DSKERR+2 POP B JMP NEXT ; DB 87H ; SEC/BLK DB 'SEC/BL' DB 'K'+80H DW SECWT-0CH SPBL DW DOVAR DW 8 DW 8 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 14H DW 1AH DW 1AH DW 34H DW 34H DW 40H DW 40H ; DB 89H ; SET-DRIVE DB 'SET-DRIV' DB 'E'+80H DW SPTR-9 SETDRV DW $+2 PUSH B LDA DRIVE+2 MOV C,A LXI D,SETDSK CALL IOS POP B JMP NEXT ; DB 87H ; SET-DRX DB 'SET-DR' DB 'X'+80H DW SETDRV-0CH SETDRX DW DOCOL DW DRDEN DW DENSTY DW STORE DW BPDRV DW OFSET DW PSTOR DW EXIT ; DB 86H ; SET-IO DB 'SET-I' DB 'O'+80H DW SETDRX-0AH SETIO DW $+2 PUSH B LHLD USEE+2 MOV B,H MOV C,L LXI D,SETDMA CALL IOS LHLD SEC+2 MOV C,L LXI D,SETSEC CALL IOS LHLD TRACK+2 MOV B,H MOV C,L LXI D,SETTRK CALL IOS POP B JMP NEXT ; DB 84H ; SIGN DB 'SIG' DB 'N'+80H DW SETIO-9 SIGN DW DOCOL DW ZLESS DW ZBRAN DW 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 LHLD UP LXI D,6 DAD D MOV E,M INX H MOV D,M XCHG SPHL 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 LXI H,0 DAD SP JMP HPUSH ; DB 85H ; SPACE DB 'SPAC' DB 'E'+80H DW SPAT-6 SPACE DW DOCOL DW BL 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 SPACS2-$ DW ZERO DW ADO SPACS1 DW SPACE DW ALOOP DW SPACS1-$ SPACS2 DW EXIT ; DB 85H ; SPBLK DB 'SPBL' DB 'K'+80H DW SPACS-9 SPBLK DW DOCOL DW DENSTY DW AT DW LIT DW 6 DW MIN DW TWOST DW SPBL DW PLUS DW AT 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 AT DW LIT DW 6 DW MIN DW TWOST DW SPTR DW PLUS DW AT DW EXIT ; DB 85H ; STATE DB 'STAT' DB 'E'+80H DW SPT-6 STATE DW DOUSE DW 50H ; SSUB MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A RET ; DB 84H ; SWAP DB 'SWA' DB 'P'+80H DW STATE-8 SWAP DW $+2 POP H XTHL JMP HPUSH ; DB 87H ; SYSCALL DB 'SYSCAL' DB 'L'+80H DW SWAP-7 SYSCALL DW $+2 POP D POP H PUSH B MOV C,L CALL BDOS POP B MVI H,0 MOV L,A JMP HPUSH ; DB 87H ; T&SCALC DB 'T&SCAL' DB 'C'+80H DW SYSCALL-0AH TSCALC DW DOCOL DW TTSCALC DW AT 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 WORD DW BL DW OVER DW DUP 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 D POP H MOV A,M XRA E MOV M,A 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 TRAV1-$ DW SWAP DW DROP DW EXIT ; DB 84H ; TYPE DB 'TYP' DB 'E'+80H DW TRAV-0BH TYPE DW DOCOL DW DUP DW ZGREAT DW ZBRAN DW TYPE2-$ DW OVER DW PLUS DW SWAP DW ADO TYPE1 DW IDO DW CAT DW EMIT DW ONE DW AUPLOOP DW TYPE1-$ DW BRAN DW TYPE3-$ TYPE2 DW DDROP TYPE3 DW EXIT ; DB 82H ; U* DB 'U' DB '*'+80H DW TYPE-7 USTAR DW $+2 POP D POP H PUSH B MOV B,H MOV A,L CALL MPYX PUSH H MOV H,A MOV A,B MOV B,H CALL MPYX POP D MOV C,D DAD B ACI 0 MOV D,L MOV L,H MOV H,A POP B PUSH D JMP HPUSH ; 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 USMOD DW $+2 LXI H,4 DAD SP MOV E,M MOV M,C INX H MOV D,M MOV M,B POP B POP H MOV A,L SUB C MOV A,H SBB B JC USLM1 LXI H,0FFFFH LXI D,0FFFFH JMP USLM7 USLM1 MVI A,10H USLM2 DAD H RAL XCHG DAD H JNC USLM3 INX D ANA A USLM3 XCHG RAR PUSH PSW JNC USLM4 MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A JMP USLM5 USLM4 MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A JNC USLM5 DAD B DCX D USLM5 INX D USLM6 POP PSW DCR A JNZ USLM2 USLM7 POP B PUSH H PUSH D JMP NEXT ; DB 82H ; U< DB 'U' DB '<'+80H DW USMOD-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 AT DW AT DW LIT DW 8000H DW ORR DW PREV DW AT 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 INX D XCHG MOV E,M MVI D,0 LHLD UP DAD D JMP HPUSH ; 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 AT 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 AT DW ZBRAN DW WHERE1-$ DW BLK DW AT DW DUP DW SCR DW STORE DW CR DW CR DW ADOTQ DB 5 DB 'SCR# ' DW DUP DW DOT DW TOIN DW AT DW LIT DW 3FFH DW MIN DW CSLL DW SLMOD DW DUP 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 TYPE DW TOIN DW AT DW LIT DW 3FFH DW GREAT DW PLUS DW BRAN DW WHERE2-$ WHERE1 DW TOIN DW AT WHERE2 DW CR DW HERE DW CAT DW DUP 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 WIDTH DW DOUSE DW 0CH ; DB 84H ; WORD DB 'WOR' DB 'D'+80H DW WIDTH-8 WORD DW DOCOL DW TWORD DW AT DW EXEC DW EXIT ; DB 0C0H ; X (NULL) DB 80H DW WORD-7 NULL DW DOCOL DW BLK DW AT DW ZBRAN DW NULL1-$ DW STATE DW AT DW QSTREAM NULL1 DW FROMR DW DROP DW EXIT ; DB 83H ; XOR DB 'XO' DB 'R'+80H DW NULL-4 XORR DW $+2 POP D POP H MOV A,E XRA L MOV L,A MOV A,D XRA H MOV H,A JMP HPUSH ; 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 ; 5H ; WIDTH DB 'WIDT' DB 'H'+80H DW WHILE-8 WIDTH DW DOUSE DW 0CH ; DB 84H ; WORD DB 'WOR' DB 'D'+80H DW WIFOG/LNG.011 thru 013 contain the MVP-FORTH system submitted by Jim Crowell. MVPFORTH.DOC on this disk describes the system. MVPFORTH.AQM is a squeezed version of the 8080 assembly language source file for the public domain FORTH-79 version of FORTH implemented by Dr. Glen B. Haydon. AUTOST.COM is an assembled version of MVP-FORTH with the utility and editor "screens" loaded. ASMFZ80.DOC describes the Z80 assembler for FORTH written in FORTH. FOG/LNG.012 contains SDFORTH.SCR, which is set up for use with MVP-FORTH on a single-density Osborne 1. See SDFORTH.DOC for further information. FOG/LNG.013 contains DDFORTH.SCR, which is set up for use with MVP-FORTH on a double-density Osborne 1. See DDFORTH.DOC for further information. To maintain integrity of these SCR files, one should COPY the entire library disk to a blank disk using COPY.COM. If PIP or SWEEP was used instead, follow the procedure described in the appropriate xDFORTH.DOC to re-establish the SCR file. To use MVP-FORTH, place AUTOST.COM from FOG/LNG.011 on a bootable disk (containing system tracks) in drive A. Place the appropriate xDFORTH.SCR in drive B. Press RESET and RETURN to perform a cold start. See DDFORTH.DOC for further information concerning double-density configuration of the system. Thanks to Jim Crowell for setting up this system on the Osborne 1 computer. is set up for use with MVP-FORTH on a single-density Osborne 1. See SDFORTH.DOC for further information. FOG/LNG.013 contains DDFORTH.SCR, which is set up for use with MVP-FORTH on a double-density Osborne 1. See DDFORTH.DOC for further information. To maintain integrity of these SCR files, one should COPY the entire library disk to a blank disk using COPY.COM. If PIP or SWEEP was used instead, follow the procedure described in the appropriate xDFORTH.DOC to re-establish the SCR fil HOW TO USE DDFORTH.SCR: Overview Thi dis i se u fo us of MVP-FORT o Osborn double-density machines. The double-density format wil allo 20 1 screen pe drive providin tha th堠 CP/͠ track an䠠 Director track ar overwritten T preserv th Director track (fo labellingfo instance) screen 17-19 (driv A: and screens 217-299 (drive B:) are usable. Instructions: 1: To get DDFORTH.SCR onto a double-density disk: (A Pu newl formatte double-densit dis int driv B:. (B Pu bootabl dis containin PI an DDԠ int driv A:. (C Boo u o driv A: Ente th command indicate b an arrow [ --> ] : --> A>DDT DDT VERS 2.2 --> -F0100,7900,20 --> -^C  --> A>SAVE 120 B:BLANK.SCR --> A>PIР *B:=A:DDFORTH.SCR[V] 2 Pu bootabl dis containin AUTOST.CO͠(th FORT object file) into drive A:. 3: Boot up on drive A:, and load AUTOST.COM. 4 Typ 20 BLK/DR 4 SEC/T Whe prompte fo fil name typ AUTOST.CO͠ AUTOST.CO i no se u fo readin an writin double-densit disks[ T ge bac t single-density typ 10 BLK/DR 2 SEC/T Th utility load screen should be displayed on the screen. 7 Typ 20 21 WIP Th utility load screen should be displayed on the screen. 7 Typ 20 21 WIP R >IN @ >R BLK ! 0 >IN ! 0 BEGIN MORE WHILE BL OVER COUNT + C! COUNT DISPOSE REPEAT DROP R> >IN ! R> BLK ! ; : VER SCR @ VERIFY U. ; ( LIST NLIST LISTP NLISTP O-PAGE CRC VER = 65379)0 WARNING ! : LIST PAGE CR DUP SCR ! ." SCR #" U. 16 0 DO CR I 3 .R SPACE I SCR @ .LINE ?TERMINAL IF LEAVE THEN LOOP CR ; : NLIST ( FROM TO --- LISTS SCREENS WITHOUT PAUSING) BEGIN DUP ROT DUP LIST DUP ROT < WHILE 1+ SWAP REPEAT DDROP ; : LISTP ( PUTS A PAUSE INTO LIST, FOR NLISTP -- BELOW) PAGE CR DUP SCR ! ." SCR #" U. 16 0 DO CR I 3 .R SPACE I SCR @ .LINE ?TERMINAL IF LEAVE THEN LOOP CR KEY DROP ; : NLISTP ( FROM TO --- LISTS SCREENS, PAUSES UNTIL KEY IS HIT) BEGIN DUP ROT DUP LISTP DUP ROT < WHILE 1+ SWAP REPEAT DDROP ; 1 WARNING ! : O-PAGE 26 EMIT ; ' O-PAGE CFA 'PAGE ! ( N B L GOTO-XY CRC VER = 13142) : N 1 SCR +! ; : B -1 SCR +! ; : L PAGE SCR @ LIST ; : GOTO-XY 27 EMIT 61 EMIT 32 + EMIT 32 + EMIT ; : ASCII ( ASCII VALUE OF THE NEXT KEY HIT IS PUT ON THE STACK) BL WORD 1+ C@ [COMPILE] LITERAL ; IMMEDIATE ( SCR#X-->Y COPYF CRC VER = 54584): SCR#X-->Y CR 2 PICK SCR ! ." SCR#" SWAP 3 .R 1 0 ." -->" DO 3 .R SPACE I SCR @ .LINE LOOP ; : COPYF ( COPIES SCR# N1 THRU N2 TO N3 THRU ? OR SCR# N1 TO N2 .... BOTH WITH FLUSH CLEAR STACK BEFORE COPYING...HIT ANY KEY TO ABORT) DEPTH 3 < IF DDUP ROT DROP THEN ROT ROT SWAP DDUP = IF ROT ROT 2 PICK PAGE 0 6 GOTO-XY SCR#X-->Y SWAP DUP 1+ SCR ! SWAP COPY FLUSH ELSE PAGE 0 6 GOTO-XY BEGIN SWAP 2 PICK 4 PICK DDUP SCR#X-->Y COPY FLUSH ROT 1+ SWAP ROT 1+ DUP SCR ! DDUP < ?TERMINAL IF CR ." Aborted" ABORT THEN UNTIL DROP DROP DROP THEN CR ." Done" QUIT ; ( WIPE CRC VER = 12104): WIPE ( N1 N2 -- CLEAR SCREENS N1 THROUGH N2 OR N1 -- CLEAR SCREEN N1 CLEAR STACK BEFORE WIPING ... HIT ANY KEY TO ABORT) DEPTH 2 < IF DUP THEN SWAP PAGE 0 5 GOTO-XY BEGIN DUP SCR ! SCR @ DUP CR ." CLEARING SCR#-->" 3 .R CLEAR FLUSH 1+ DDUP < ?TERMINAL IF CR ." Aborted" ABORT THEN UNTIL SCR ! DROP CR ." Done" QUIT ; ( LOAD SCREEN FOR FORTH LINE EDITOR CRC VER = 7952) 258 275 THRU EXIT ( CRC VER = 25092) WARNING @ 0 WARNING ! : ( ADDR-3, ADDR-2, COUNT-1 ---- FLAG) ?DUP IF OVER + SWAP DO DUP C@ I C@ - IF 0= LEAVE ELSE 1+ THEN LOOP ELSE DROP 0= THEN ; ( MATCH CRC VER = 27930) : MATCH ( CURSOR ADDR-4, BYTES LEFT-3, STRING ADDR-2) ( STRING COUNT-1, ---- FLAG-2, CURSOR OFFSET-1) >R >R DDUP R> R> DSWAP OVER + SWAP ( CADDR-6, BLEFT-5, $ADDR-4, $LEN-3, CADDR+BLEFT-2, CADDR-1) DO DDUP I SWAP IF >R DDROP R> - I SWAP - 0 SWAP 0 0 LEAVE ( CADR, BLEFT, $ADDR, $LEN OR 0, OFFSET, 0, 0) THEN LOOP DDROP ( CADDR-2, BLEFT-1 OR 0-2, OFFSET-1) SWAP 0= SWAP ; ( LINE CRC VER = 36396) BASE @ HEX : LINE ( RELATIVE TO SCR, LEAVE ADDRESS OF LINE) DUP FFF0 AND ABORT" NOT ON CURRENT EDITING SCREEN" SCR @ DROP ; BASE ! ( #LOCATE CRC VER = 4570) VOCABULARY EDITOR IMMEDIATE BASE @ HEX EDITOR DEFINITIONS : #LOCATE ( ---- CURSOR OFFSET-2, LINE-1) R# @ C/L /MOD ; BASE ! ( #LEAD #LAG -MOVE BUF-MOVE CRC VER = 27808) : #LEAD ( ---- CURSOR ADDR-2, OFFSET TO CURSOR-1) #LOCATE LINE SWAP ; : #LAG ( ---- CURSOR ADDR-2, COUNT AFTER CURSOR-1) #LEAD DUP >R + C/L R> - ; : -MOVE ( MOVE FROM ADDR-2 TO LINE-1 ----) LINE C/L CMOVE UPDATE ; : BUF-MOVE ( MOVE TEXT, IF ANY, TO BUFFER-1 ----) HERE C@ IF PAD SWAP C/L 1+ CMOVE ELSE DROP THEN ; ( >LINE# FIND-BUF INSERT-BUF CRC VER = 59275) BASE @ HEX : >LINE# ( CONVERT CURRENT CURSOR POSITION TO LINE#) #LOCATE SWAP DROP ; : FIND-BUF ( BUFFER USED FOR ALL SEARCHES) PAD 50 + ; : INSERT-BUF ( BUFFER USED FOR ALL INSERTIONS) FIND-BUF 50 + ; BASE ! ( HOLD- X CRC VER = 41917)BASE @ HEX : ( MOVE LINE-1 FROM BLOCK TO INSERT BUFFER) LINE INSERT-BUF 1+ C/L DUP INSERT-BUF C! CMOVE ; : ( ERASE LINE-1 WITH BLANKS) LINE C/L BLANK UPDATE ; : ( SPREAD, MAKING LINE# BLANK) >LINE# DUP 0E DO I LINE I 1+ -MOVE -1 +LOOP ; : X ( DELETE LINE# FROM BLOCK, PUT IN INSERT BUFFER) >LINE# DUP 0F DUP ROT DO I 1+ LINE I -MOVE LOOP ; BASE ! ( DISPLAY-CURSOR T L CRC VER = 14701) BASE @ HEX : DISPLAY-CURSOR ( ----) CR SPACE #LEAD TYPE 5E EMIT #LAG TYPE #LOCATE 2 .R SPACE DROP ; : T ( TYPE LINE#-1) C/L * R# ! DISPLAY-CURSOR ; : L ( LIST CURRENT SCREEN) PAGE SCR @ LIST DISPLAY-CURSOR ; BASE ! ( N B SEEK-ERROR CRC VER = 39959) : N ( SELECT NEXT SEQUENTIAL SCREEN) 1 SCR +! ; : B ( SELECT PREVIOUS SEQUENTIAL SCREEN) -1 SCR +! ; : ( RESET CURSOR TO TOP OF BLOCK) 0 R# ! ; : SEEK-ERROR ( OUTPUT ERROR MSG IF NO MATCH) FIND-BUF HERE C/L 1+ CMOVE HERE COUNT TYPE ." NONE" QUIT ; ( P CRC VER = 19509) BASE @ HEX : ( REPLACE CURRENT LINE WITH INSERT BUFFER) >LINE# INSERT-BUF 1+ SWAP -MOVE ; : P ( FOLLOWING TEXT IN INSERT BUFFER AND LINE) 5E TEXT INSERT-BUF BUF-MOVE ; BASE ! ( 1LINE CRC VER = 17269) : 1LINE ( SCAN CURRENT LINE FOR MATCH WITH FIND BUFFER) ( UPDATE CURSOR, RETURN BOOLEAN ) #LAG FIND-BUF COUNT MATCH R# +! ; ( CRC VER = 24004)BASE @ HEX : ( FIND BUFFER MATCH OVER FULL SCREEN, ELSE ERROR) BEGIN 3FF R# @ < IF SEEK-ERROR THEN 1LINE UNTIL ; : ( BACKWARDS AT CURSOR BY COUNT-1) >R #LAG + R@ - ( SAVE BLANK FILL LOCATION) #LAG R@ NEGATE R# +! ( BACK AT CURSOR) #LEAD + SWAP CMOVE R> BLANK UPDATE ; ( FILL FROM END OF TEXT) BASE ! ( F E CRC VER = 1004) BASE @ HEX : ( FIND OCCURANCE OF FOLLOWING TEXT) 5E TEXT FIND-BUF BUF-MOVE ; : F ( FIND AND DISPLAY FOLLOWING TEXT) DISPLAY-CURSOR ; : ( ERASE BACKWARDS FROM CURSOR) FIND-BUF C@ ; : E ( ERASE AND DISPLAY LINE) DISPLAY-CURSOR ; BASE ! ( D TILL CRC VER = 32395) BASE @ HEX : D ( FIND, DELETE, AND DISPLAY FOLLOWING TEXT) E ; : TILL ( DELETE FROM CURSOR TO TEXT END) #LEAD + 5E TEXT FIND-BUF BUF-MOVE 1LINE 0= IF SEEK-ERROR THEN #LEAD + SWAP - DISPLAY-CURSOR ; BASE ! ( COUNTER BUMP CRC VER = 39717) BASE @ HEX VARIABLE COUNTER 0 COUNTER ! : BUMP ( THE LINE NUMBER AND HANDLE PAGING) 1 COUNTER +! COUNTER @ 38 > IF 0 COUNTER ! CR CR 0C EMIT THEN ; BASE ! ( S CRC VER = 31910) BASE @ HEX : S ( FROM CURRENT TO SCREEN-1 FOR STRING) 0C EMIT 5E TEXT 0 COUNTER ! FIND-BUF BUF-MOVE SCR @ DUP >R DO I SCR ! BEGIN 1LINE IF DISPLAY-CURSOR SCR ? BUMP THEN 3FE R# @ < ?TERMINAL IF 1 ELSE 0 THEN OR UNTIL PAUSE ?TERMINAL IF KEY DROP LEAVE THEN LOOP R> SCR ! ; BASE ! ( I U CRC VER = 20178)BASE @ HEX : I ( INSERT TEXT WITHIN LINE) 5E TEXT ( LOAD INSERT BUFFER WITH TEXT) INSERT-BUF BUF-MOVE ( IF ANY) INSERT-BUF COUNT #LAG ROT OVER MIN >R R@ R# +! ( BUMP CURSOR) R@ - >R ( CHARACTERS TO SAVE) DUP HERE R@ CMOVE ( FROM OLD CURSOR TO HERE) HERE #LEAD + R> CMOVE ( HERE TO CURSOR LOCATION) R> CMOVE UPDATE ( PAD TO OLD CURSOR) DISPLAY-CURSOR ; ( LOOK AT NEW LINE) : U ( INSERT FOLLOWING TEXT UNDER CURRENT LINE) C/L R# +! P ; BASE ! ( R M CRC VER = 35806) : R ( REPLACE FOUND TEXT WITH INSERT BUFFER) I ; : M ( MOVE FROM CURRENT LINE ON CURRENT SCREEN) SCR @ >R ( TO SCREEN-2, UNDER LINE-1) R# @ >R ( SAVE ORIGINAL SCREEN AND CURSOR LOCATION) >LINE# ( MOVE CURRENT LINE TO INSERT BUFFER) SWAP SCR ! ( SET NEW SCREEN #) 1+ C/L * R# ! ( TEXT IS STORED UNDER REQUESTED LINE) ( STORE INSERT BUFFER IN NEW SCREEN) R> C/L + R# ! ( SET ORIGINAL CURSOR TO NEXT LINE) R> SCR ! ; ( RESTORE ORIGINAL SCREEN) FORTH DEFINITIONS ( VALUE ON STACK) WARNING !  ( LOAD SCREEN FOR Z80 ASSEMBLER CRC VER = 44093) 278 306 THRU EXIT ( CODE & NEXT CRC VER = 35989)( COPYRIGHT 1982 MICHAEL M RUBENSTEIN ) ( VERSION 1.0, MODIFIED FOR MVP FORTH) FORTH DEFINITIONS HEX VOCABULARY ASSEMBLER ASSEMBLER DEFINITIONS HERE SP@ 1400 - DP ! : <> = 0= ; : IN >IN ; : ERROR NOOP ; : CREATE1 BL WORD DUP DUP 1+ C@ 0 = ABORT" ATTEMPTED TO REDEFINE NULL" DUP CONTEXT @ @ IF DDROP WARNING @ IF DUP COUNT TYPE SPACE ." ISN'T UNIQUE" THEN THEN HERE DUP C@ WIDTH @ MIN 1+ ALLOT DUP A0 TOGGLE HERE 1 - 80 TOGGLE LATEST , CURRENT @ ! HERE 2+ , DDROP ; : @ (.REGDEF) ; 0 WARNING ! ( TO HALT ERROR MESSAGES WHEN LOADING) 10 .REGDEF B 11 .REGDEF C 12 .REGDEF D 13 .REGDEF E 14 .REGDEF H 15 .REGDEF L 16 .REGDEF (HL) 17 .REGDEF A : .IX DD .PFX ! ; : .IY FD .PFX ! ; : (IX) (HL) .IX ; : (IY) (HL) .IY ; 1 WARNING ! DECIMAL ( ASSEMBLER -- DBL & SPEC. REG DEFINITIONS CRC VER = 12864)HEX 20 .REGDEF BC 21 .REGDEF DE 22 .REGDEF HL 23 .REGDEF SP 23 .REGDEF AF : IX HL .IX ; : IY HL .IY ; 30 .REGDEF (BC) 31 .REGDEF (DE) 40 .REGDEF II 48 .REGDEF R 50 .REGDEF (SP) 60 .REGDEF () 70 .REGDEF AF' 71 .REGDEF (C) 80 .REGDEF NZ 84 .REGDEF PO 81 .REGDEF Z 85 .REGDEF PE 82 .REGDEF NC 86 .REGDEF P 87 .REGDEF M : (ENDOP) 0 .REG1 ! 0 .REG2 ! 0 .PFX ! ; DECIMAL ( ASSEMBLER -- HELPER FUNCTIONS CRC VER = 21834)HEX : AERROR? SWAP F0 AND <> IF 31 ERROR THEN ; : (IPFX) .PFX @ ?DUP IF C, THEN ; : (IOFFSET) .PFX @ IF DUP -128 < OVER 127 > OR IF 32 ERROR THEN C, THEN ; : (ZPFX) ED C, ; : (LSHIFT) SWAP ?DUP IF 0 DO DUP + LOOP THEN ; : (REG1) .REG1 @ 0F AND (LSHIFT) ; : (REG2) .REG2 @ 0F AND (LSHIFT) ; : RREG? 10 AERROR? ; : ZREG? 40 AERROR? ; : RPREG? 20 AERROR? ; : (SP)? 50 AERROR? ; : (RPREG)? 30 AERROR? ; : (NN)? 60 AERROR? ; DECIMAL ( ASSEMBLER -- LD CRC VER = 58163)HEX : (LDS,S) .REG1 @ 16 = .REG2 @ 16 = AND IF 31 ERROR THEN .REG1 @ RREG? (IPFX) 40 3 (REG2) OR 0 (REG1) OR C, (IOFFSET) ; : (LDA,?) .REG1 @ F0 AND CASE 10 OF (LDS,S) ENDOF 30 OF 0A 4 (REG1) OR C, ENDOF 40 OF (ZPFX) 57 0 (REG1) OR C, ENDOF 60 OF 3A C, , ENDOF 31 ERROR ENDCASE ; DECIMAL ( ASSEMBLER -- LD CONTINUED CRC VER = 17327)HEX : (LDRP,?) .REG2 @ CASE 22 OF .REG1 @ 60 = IF (IPFX) 2A C, , ELSE 31 ERROR THEN ENDOF 23 OF .REG1 @ CASE 22 OF (IPFX) F9 C, ENDOF 60 OF (ZPFX) 7B C, , ENDOF 31 ERROR ENDCASE ENDOF .REG1 @ (NN)? (ZPFX) 4B 4 (REG2) OR C, SWAP , ENDCASE ; : (LDZ,?) .REG1 @ 17 = IF (ZPFX) 47 0 (REG2) OR C, ELSE 31 ERROR THEN ; DECIMAL ( ASSEMBLER -- LD CONTINUED CRC VER = 13416)HEX : (LD(NN),?) .REG1 @ CASE 17 OF 32 C, , ENDOF 22 OF (IPFX) 22 C, , ENDOF .REG1 @ RPREG? (ZPFX) 43 4 (REG1) OR C, SWAP , ENDCASE ; : (LD?,N) .REG1 @ F0 AND CASE 10 OF (IPFX) 06 3 (REG1) OR C, .PFX @ IF SWAP C, THEN C, ENDOF 20 OF (IPFX) 01 4 (REG1) OR C, , ENDOF 31 ERROR ENDCASE ; DECIMAL ( ASSEMBLER -- LD CONTINUED CRC VER = 44666)HEX : (LD(RP),?) .REG1 @ 17 = IF 02 4 (REG2) OR C, ELSE 31 ERROR THEN ; DECIMAL EXIT ( ASSEMBLER -- LD CONTINUED CRC VER = 64437)HEX : LD, .REG2 @ F0 AND CASE 0 OF (LD?,N) ENDOF 10 OF .REG2 @ 17 = IF (LDA,?) ELSE (LDS,S) THEN ENDOF 20 OF (LDRP,?) ENDOF 30 OF (LD(RP),?) ENDOF 40 OF (LDZ,?) ENDOF 60 OF (LD(NN),?) ENDOF 31 ERROR ENDCASE (ENDOP) ; DECIMAL ( ASSEMBLER -- POP & PUSH CRC VER = 13075)HEX : (POPPUSH) .REG1 @ RPREG? (IPFX) 4 (REG1) OR C, (ENDOP) ; : POP, C1 (POPPUSH) ; : PUSH, C5 (POPPUSH) ; DECIMAL EXIT ( ASSEMBLER -- ADC & SBC CRC VER = 59517)HEX : (ADCSBC) .REG2 @ FF AND CASE 0 OF .REG1 @ 17 = IF DROP 46 OR C, C, ELSE 31 ERROR THEN ENDOF 17 OF .REG1 @ RREG? DROP (IPFX) 0 (REG1) OR C, (IOFFSET) ENDOF 22 OF .REG1 @ RPREG? .PFX @ IF 31 ERROR THEN SWAP DROP (ZPFX) 4 (REG1) OR C, ENDOF 31 ERROR ENDCASE (ENDOP) ; DECIMAL ( ASSEMBLER -- ADC & SBC CONTINUED, ADD CRC VER = 38654)HEX : ADC, 88 4A (ADCSBC) ; : SBC, 98 42 (ADCSBC) ; : ADD, .REG2 @ 22 = IF .REG1 @ RPREG? (IPFX) 09 4 (REG1) OR C, (ENDOP) ELSE 80 0 (ADCSBC) THEN ; DECIMAL EXIT ( ASSEMBLER -- A OPERATIONS CRC VER = 24956)HEX : (AOP) .REG2 @ IF 31 ERROR THEN .REG1 @ ?DUP IF RREG? (IPFX) 0 (REG1) OR C, (IOFFSET) ELSE 46 OR C, C, THEN (ENDOP) ; : AND, A0 (AOP) ; : CP, B8 (AOP) ; : OR, B0 (AOP) ; : SUB, 90 (AOP) ; : XOR, A8 (AOP) ; DECIMAL ( ASSEMBLER -- BIT OPERATIONS CRC VER = 56578)HEX : (BITOP) .REG2 @ IF 31 ERROR THEN .PFX @ IF ROT ELSE SWAP THEN DUP -1 > OVER 9 < AND IF (IPFX) CB C, .PFX @ IF ROT C, THEN 3 SWAP (LSHIFT) OR 0 (REG1) OR C, ELSE 32 ERROR THEN (ENDOP) ; : BIT, 40 (BITOP) ; : RES, 80 (BITOP) ; : SET, C0 (BITOP) ; DECIMAL ( ASSEMBLER -- OPS WITH NO OPERANDS CRC VER = 17104)HEX : DEFOP @ C, (ENDOP) ; : DEFZOP (ZPFX) @ C, (ENDOP) ; 3F DEFOP CCF, BA DEFZOP INDR, A9 DEFZOP CPD, A2 DEFZOP INI, B9 DEFZOP CPDR, B2 DEFZOP INIR, A1 DEFZOP CPI, A8 DEFZOP LDD, B1 DEFZOP CPIR, B8 DEFZOP LDDR, 2F DEFOP CPL, A0 DEFZOP LDI, 27 DEFOP DAA, B0 DEFZOP LDIR, F3 DEFOP DI, 44 DEFZOP NEG, FB DEFOP EI, 0 DEFOP NOP, D9 DEFOP EXX, AB DEFZOP OUTD, 76 DEFOP HALT, BB DEFZOP OTDR, AA DEFZOP IND, A3 DEFZOP OUTI, DECIMAL ( ASSEMBLER -- OPS WITH NO OPERAND CONTINUED CRC VER = 65355)HEX B3 DEFZOP OTIR, 4D DEFZOP RETI, 45 DEFZOP RETN, 17 DEFOP RLA, 07 DEFOP RLCA, 6F DEFZOP RLD, 1F DEFOP RRA, 0F DEFOP RRCA, 67 DEFZOP RRD, 37 DEFOP SCF, DECIMAL ( ASSEMBLER -- INC & DEC CRC VER = 29940)HEX : (INCDEC) .REG2 @ IF 31 ERROR THEN .REG1 @ F0 AND CASE 10 OF DROP (IPFX) 3 (REG1) OR C, (IOFFSET) ENDOF 20 OF SWAP DROP (IPFX) 4 (REG1) OR C, ENDOF 31 ERROR ENDCASE (ENDOP) ; : DEC, 05 0B (INCDEC) ; : INC, 04 03 (INCDEC) ; DECIMAL ( ASSEMBLER -- EX CRC VER = 18693)HEX : EX, .REG2 @ CASE 23 OF .REG1 @ 70 = IF 08 C, ELSE 31 ERROR THEN ENDOF 21 OF .REG1 @ 22 = IF EB C, ELSE 31 ERROR THEN ENDOF 50 OF .REG1 @ 22 = IF (IPFX) E3 C, ELSE ERROR THEN ENDOF 31 ERROR ENDCASE (ENDOP) ; DECIMAL ( ASSEMBLER -- IM CRC VER = 16065)HEX : IM, CASE 0 OF 46 ENDOF 1 OF 56 ENDOF 2 OF 5E ENDOF 32 ERROR ENDCASE (ZPFX) C, (ENDOP) ; DECIMAL EXIT ( ASSEMBLER -- IN CRC VER = 3473 )HEX : IN, .REG1 @ CASE 60 OF .REG2 @ 17 = IF DB C, C, ELSE 31 ERROR THEN ENDOF 71 OF .REG2 @ RREG? (ZPFX) 40 3 (REG2) OR C, ENDOF ENDCASE (ENDOP) ; DECIMAL EXIT ( ASSEMBLER -- OUT CRC VER = 50691)HEX : OUT, .REG2 @ CASE 60 OF .REG1 @ 17 = IF D3 C, C, ELSE 31 ERROR THEN ENDOF 71 OF .REG1 @ RREG? (ZPFX) 41 3 (REG1) OR C, ENDOF ENDCASE (ENDOP) ; DECIMAL EXIT ( ASSEMBLER -- SHIFTS AND ROTATES CRC VER = 59387)HEX : (SHIFT) .REG2 @ IF 31 ERROR THEN .REG1 @ RREG? (IPFX) CB C, .PFX @ IF SWAP C, THEN 0 (REG1) OR C, (ENDOP) ; : RL, 10 (SHIFT) ; : RLC, 0 (SHIFT) ; : RR, 18 (SHIFT) ; : RRC, 08 (SHIFT) ; : SLA, 20 (SHIFT) ; : SRA, 28 (SHIFT) ; : SRL, 38 (SHIFT) ; DECIMAL ( ASSEMBLER -- RST CRC VER = 3386 )HEX : RST, .REG1 @ .REG2 @ OR IF 31 ERROR THEN DUP DUP 38 AND = IF C7 OR C, ELSE 32 ERROR THEN (ENDOP) ; DECIMAL EXIT ( ASSEMBLER -- CALL & JP CRC VER = 35700)HEX : (CALLJP) .REG2 @ IF 33 ERROR THEN .REG1 @ IF SWAP DROP .REG1 @ 11 = IF 83 .REG1 ! THEN 3 (REG1) OR C, ELSE DROP C, THEN , (ENDOP) ; : CALL, CD C4 (CALLJP) ; : JP, .REG1 @ 16 = IF .REG2 @ IF 33 ERROR THEN (IPFX) E9 C, (ENDOP) ELSE C3 C2 (CALLJP) THEN ; DECIMAL ( ASSEMBLER -- JR CRC VER = 20296)HEX : (JR) HERE - 1- DUP -128 < OVER 127 > OR IF 32 ERROR THEN C, (ENDOP) ; : JR, .REG2 @ IF 33 ERROR THEN .REG1 @ CASE 0 OF 18 ENDOF 80 OF 20 ENDOF 81 OF 28 ENDOF 82 OF 30 ENDOF 11 OF 38 ENDOF 33 ERROR ENDCASE C, (JR) ; DECIMAL ( ASSEMBLER -- DJNZ & RET CRC VER = 48671)HEX : DJNZ, .REG1 @ .REG2 @ OR IF 33 ERROR THEN 10 C, (JR) ; : RET, .REG2 @ IF 33 ERROR THEN .REG1 @ 11 = IF 83 .REG1 ! THEN .REG1 @ IF C0 3 (REG1) OR ELSE C9 THEN C, (ENDOP) ; DECIMAL EXIT ( ASSEMBLER -- CONTROL FUNCTIONS CRC VER = 13676)HEX VARIABLE (ASTACK) 20 ALLOT VARIABLE (AINDEX) : (APUSH) (AINDEX) @ DUP 20 > IF 34 ERROR THEN (ASTACK) + ! 2 (AINDEX) +! ; : (APOP) (AINDEX) @ DUP IF 2- DUP (AINDEX) ! (ASTACK) + @ ELSE 35 ERROR THEN ; : IF, 0 JP, HERE 2- (APUSH) ; : THEN, HERE (APOP) ! ; : ELSE, 0 JP, THEN, (APOP) ! HERE 2- (APUSH) ; DECIMAL ( ASSEMBLER -- CONTROL FUNCTIONS CONTINUED CRC VER = 39399)HEX : DO, HERE (APUSH) ; : LOOP, (APOP) DJNZ, ; : BEGIN, HERE (APUSH) ; : UNTIL, (APOP) JP, ; : WHILE, 0 .REG1 @ 11 IF 83 .REG1 ! THEN .REG1 @ 1 XOR .REG1 ! 0 JP, HERE 2- (APUSH) ; : REPEAT, (APOP) (APOP) SWAP JP, HERE SWAP ! ; DECIMAL EXIT ( ASSEMBLER -- FORTH VOCABULARY INTERFACE CRC VER = 46556)HEX : NEXT, (APOP) CONTEXT ! C3 C, 144 , SMUDGE ; 0 CONSTANT ASMTOP HERE ' ASMTOP ! DP ! ( RESET DICT POINTER TO VALUE BEFORE ASM ) FORTH DEFINITIONS : CODE [ ASSEMBLER ] CONTEXT @ ASSEMBLER (ENDOP) 0 (AINDEX) ! (APUSH) CREATE1 ; FORTH DEFINITIONS DECIMAL  HOW TO USE SDFORTH.SCR: Overview Thi dis i se u fo use of MVP-FORT o Osborn single-density machines. The single-density format wil allo 10 1 screen pe drive providin tha th堠 CP/͠ track an䠠 Director track ar overwritten T preserv th Director track (fo labelling fo instance) screen 10-9 (driv A: and screens 110-199 (drive B:) are usable. Instructions: 1 I th Librar dis ha bee kep intac (cop th entir disk don' PIP SWEEP Et th individua files) pu a copy of the disk containing SDFORTH.SCR into drive B:. 2 Pu bootabl dis containin AUTOST.CO͠ (th FORT object file) into drive A:. 3: Boot up on drive A:, and load AUTOST.COM. 4 T se i everythin i ok typ 13 LISԠ Th entir utilitie loa scree shoul b liste o th screen I scree 13 list correctly typ 11 13 WIPE ; if there is a problem , do this: (A Pu newl formatte single-densit dis int driv B:. (B Pu bootabl dis containin PI an DD int driv A:. (C Boo u o driv A: Ente th command indicate by an arrow [ --> ] : --> A>DDT DDT VERS 2.2 --> -F0100,6100,20 --> -^C --> A>SAVE 96 B:BLANK.SCR --> A>PIР *B:=A:SDFORTH.SCR[V] (D G bac t numbe (above) I i no necessar t use the WIPE command called for in number 4. 5 Typ 10 10 WIP PIР *B:=A:SDFORTH.SCR[V] (D G bac t numbe (above) I i no necessar t use the WIPE command called for in number 4. 5 Typ 10 10 WIP ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzE{|}~Bxwle[TROKF><:94 1c>|9=ͦw*2b1?t급r磗0`Gʬ,iGcN ChnB%Ӭ0?'X0%/% N7Q|a#WGN|Dr㚢z؄ffQa *&e'~/!"i-] ?J ;n-i(w^HM>.S#v|"o j+veK4k+YEtsjߙrO-Amn,J% e 9揎>vv_qr'~/!"ώg56Dqv_c8 ۍf̷gQa g56!qS̯\O|\STV6_8_9s̖;slpv_cߤ̒Q W̯=rK淎8[bK+ClupXxd!Nog,D='L$T j[Yv cGʁ 'wZܗ ;q6Μ1u̸/v*Y7Qܙ#xCp;)ḑ=>d鬖sN7Q.߿tZfT3ֻAm-w5ڊS.6!1˲|VM˅-]l+ƑMK~~}-*w5ڊYFj ޥj+0b 5[Rkzv1s+;+;E(w^?z0#\ȴcdKD._OESZ '?6/A|ɕx|IB,B.MP,;o8}IIW\y|7-v zvXf_iҕ0Ubkr K`5 LM!UkƃՀS.\LM?ۛ`~2]j@MֻAmYTrxC/9|+x$ W̧==Ų, -i1 [ީHg60UTJ*j o0?xcWTQ !0?sdoGN<[$ 6q=;Gvb{bgÂ4/zoRfɘș-aǁZxլH d_[|I/0.dr|>Ӟ*sa\D%NNE|ߩ&ʝx Gs~jc[pIY<8ug_Uޱ%XTپ!v/w/\+WWҼ+,fmN%sThVͤT?`~tdoUYRPMj Lẉ2\xCʁl '㑛hBwe6}™g9f<+ lyGE_-BTrTRZ0qG-Isk1 5/N8%XS|MN rfb/iїJO'Q䅘E_VtV-RY6ÀNMk)ax< S>|ԈMM(d|"o j+0?ݓa ֶ(wt0#FS^=r}^ǩ6ɟ$,dypnM2`~D Swi*+ܙMN{eN󻱣^r9?XBP[yyj+GҼ0DyH`3ɹi?T-Yު0&l&S.= !j`~ZJ*yDٴOx#7QN9s['LO+}̩;Pf4k+N9a~|$ ==Ų, -NE!N&z|c# SEm!L}!L7؄!UTBj+'-RSXeE_<ީH+jx\byḴ :fTQ[SE_*a-|aM_REJ*r95>b^},oaւߪi-.^!Xxc#ɻI-Ie\ [X:l̂/}2`>4W3&IE45N^BLE0~.[o;7:nyp;p]8@S}w Cpal1?ey`S|MNxٵK -dC0U>v--}BMka k[r}w,o1? GC8[ҵϘ慚–ֶ`r급rg<ۧC=y$X\x"ٓGʬvZXZY\x"k_tVXc^c!|"o)ZO\tm3+B*o0>.S#v8eB%c1)_S,0cgێgkw3e!M~5I/}F:mn7BoDR,ic O2s #V덬c?ʁ'*&+C_q)]^VlteyR<&yp)}iҕ¥ţb!L"!UxOϘWÜBP[AYTYRe˖&&otŦIWV\ AW\ Vٮ]祬خoY2}OY0_9uDsy0xpf+wʙ7-fy&0I^xuχf]*SM;O?t.m-bJ%TM™YI^xMbބb>q)]+6M`rXaKY*lR/GZTM(tEtR*c;Z2`~=Lےr\jl 6&U ļ;_`>DB,V Kcȇf]*g1&V],-fY3Ɨ{8a>l{>4I>eoo[&8uDs݀9$Y̧IURVخR(7?4Rh1 !UN,{{ۛЩݓB@eY̧G-f}p{{RN:eooM(r-+bGoWf:ed1yn1ò:beLN7Q~9or.lz6S׉2y tVI%x'y3yIl7N7Q<ǏM™Y#of3Mh12ҩݳi}BE DﶘhY6S+ܗ0UbeL7Y̧IURV8;B(nRou~ha<+p_6fQ1cGM* 7ҼVGe sY>@&Zp䂛[ZKbi1ˇu!U E˲:z6S׉2y tVI-f?`z+N_$/S1SM;I^83G*t5"BE DI9bBkًe3ueooYgN=cY0SM;GsyE>yM&E1t급r> 3\1}ble7Q5SBD}ڒܤ*bbً6S׉o?-f_ReۛpM#o-f|]ʸIUr,tV٧fbbl0jHEpz+TʤMRހ-bf)GN1u\7C",j,-fr描 Ҥ3гI nRo[rYg-yYǧi)B[YJy|CKkLu*~#=>!ܤqϛ7`>8uD3nO3\1/Gt@Os:7iNm>ļȵ \ }m&V9a7 = >yH<=nRouTsX6S;&H"Ϝ0}O0SM;s$/MR"ׂò:Lݲ7;'Z2K܇&) * o4)>4IWTq{{Nٴ?a!=]lNQZ$/y揎tO{)Bt5"2`䅔![Z2`x#τkKo7 &ys<0t1AYr D_[zKg[1)r-t'̿>RbkI:{ܤ*RZτkKo7 ˛G/8;" i_1N7Q\4~4`Λ3\1|y3cS..S#v|"o j+MM(d};fI^xļًe3ufꖽ =#gceLN5j &>fkzF?L[03 ϊI+b&0UfQAϸ tjpz,*gQCx>&3 &Vi֥m0ϸ S {=5Ŷ[0?ז.nRoӞf'BZ2`~ԣ1:nܹ~}0#GN9PZxe&f/ZL]':`~<9a=of3={{ܤ*b%f/ZL]':`~?w#/,x"+ܗC/Vha3u(1T$1c ً:ۚ}yMkaA7J.e|}z䍯*) i/Vqsjx"y31s¼_Z0UҖb&̢»-ŮMh/p#pxŊV8a:f3<8Tf >5#NeةGT٩G9a~Nef-xV w* !iy#=2VU,fSy=`~wܲSY`7TA:{そ:HG|gSY'v* 3{kv*  :HG?Əةt$̇#x%v ]|K#'Oz4Qi|_PY9h|ߩ&ʝi効TA:6adNecno.TA:||zSYH拗-;u~\>ڲSYHݷFv* 0TA:gO=SYŻ:Hg{Ne 拞7MeaVEJcqa|wyfbGZ*ݖoQJ%sHkwʙTnE%s|HYp+N푾9ve?aĎ-+2KΑ^e=T#g)ؕGza`>pfۑro~]8a~pׁ~nxGv.ّ95A\ܧ#+'̧G[.eo:HGde#ӧwTA::HGةtd ;uyz;u=Ñ^ru`Ne=Ȗ#[v .Sü?Gu^vWΘc0U7؛(#c倨Z̒1[̒9a{DU3nIjcNO|-IT~ #ZUsؒDǜ#ǼޒDǜ08kUYsْDǜ8<|˖$V?Fa$ei, -`qwe効[+?SY_SY83p';.#j2K|-o`;rb;'z8`BrVҫ0?v\n vI~DYZ\b$`~q0s?ҷuNe}9۱SYyrǼb;jwh[BrfuUH.yAr;ș>cjw0 O*ÀU *+$ei, -l.1O0?t급rgli[l`;v-9$aQW-lGUU܊0\FD*f\ s >5LˈZ̒9aO r9؎#ѷVi^[+?PfH|8l} ZWH|K0 .S7Mew1?r급rgl?z=r܏:y`9Ue1]UU O r'y/MeYH]a~qǏY>7n`>pH9`^؎zw̓[Gu^ʀ`;L8`;v*3ZUc]9;.#j2K !UJYO*q*nNO^&ʲ\b$H!`֩&ʝ˻O,WH nŻw<%߸f87nw<Sp~N׽` G+H_mNWG5}N~8a>cGP[yz*n[ai^U,v/Ə;UY>:WYV1`;2"V1L%[NOO ÑŠÁ;)vT#g?X=O*q*nE/9:`~Jmҧ Y2' A\ܧƂ7Me!ah*fSM;_Y>:SY8;.#j2K;șT1#ؼO0#VWlցf{Oց#W+;d eO^&ʲ[ES6{/:uDGY~;32"V)dLݕ3CmACY2fҫfQJ%cv` IJiKցsKPvׁ-z[Gu^ʀ4/<`­(d̫^ruHaE'[N_>5SeyDyRWX V]j nE%c^]7?Ǯ X|_nKցf9⥬p[M,020{4Q[=d)i(wƏ0s?7)q+l8a~H3[yb "X:pƭ%[NooFtيQWO7}f+-]a~pيm~VZ+7 ͖ gB݅ Al%zfO^&ʲ`!lU4倳"Hg+u+̥'y/MeY]8̏:n9fbG]7SY8;.#j2K;șnKKGVVoAl%+{tيa^:Vb+77 }f+]a>}f+1G]a~Ftيq^zG3[i!06lE [tm]a ي\+ӆ gbV|BV ͆ gbK)Vb+҅ gbW@a gR 3mil?"Hg+\Za/AlE[Xa*0%/[lGP[cz8`|뼔vW-?JP[cO*q*nyl9]FD*f\I` Hb>f 0CO^&ʲ W7:n߽ \1#r]SY8c>r c9і;Ir-c9s8p<Ŏ>:  i^UY2QrfՓ,=N7Q/ۗ,WHܯp [l 0v>0 X0r$fbB N}j;p+y2"V)d/Iü>؎z;d[! QJ%c~2"V1^ruqq&vwj\yV[K0c7Me!f7:nܹ<}ta効yNe=r|^؎#'v̛^ruqq}O^&ʲ`SM;/a+~NeNe}yq /[lNe=rf;Irf+9l8aA\ܧyߓ,9vœr@mIE<:nya+~sNe}L츌U,T#gTe1] B.#j2K|!9۱SY8*1]\Uև\c.n4/\FD*eBrG#c9*1]F.*q*ny+X0 nyʙRŭ(dW[z8`zցf9mŸs ;ͭ9veQ]1s ;Vl9veYz4Q(w.w/ \1#ˊzNe}U.v\FD*eO r'={o(˂K];uDsyv;r܏.uة j2K;̒YK0tĥV{w ةGΌ/1Ov*gb储Z̒1?uķⰥs V9veYxm+.2p,A\ܧ9)mVq+E.D*e'7Cz8r|;]ةG)dBVEڊ[aX뀼ǭ%[̷y]pzZ̒9aO 'y/MeYZ1t급r=fbGu`ƅ0Uex2>%/vl9b;[$aFl0wle`;Г,g|SM;O^>YulNe=rf>p*rATRfɘ:p\b-z8`H{y_fɘ7nE/9:p,={o(˂mtSv%1qxye効ߒƴiB|IÖԚ-ޒƴiBbr0/r@TRfɘ[K0ˑuNe}L\UY2ߩGΘ7Cr储Z,K^0'ZN}j~Dة j2K;șqNxway̒1;s>5/5̟S<Ч\΄rLx#sGNSuO1 SbTSAɗ>xSҼpyZ\,f<[+fQЧ:yp̒W̢B0CO^&ʲl.jݔ]6{%IN7Q\_޿fbG]1 }NՑfm]ѧj@:ℹlEB#*URYѧj@!U+fQ?#'qq}O^&ʲY-37fjIs̯8uD0od:l.r-|9s1c>[lGkwؾpWYVq+Lݕ3ex2>%/vl9b;[$aFl0wle`;Г,g|SM;O^>YulNe=rf>p*rATRfɘASMFZ80 -- FORTH Z80 Assembler page 1 Copyright 1982 Michael M Rubenstein Description. ASMFZ80 is a Z80 assembler for use with Osborne or Software Works FORTH. Since ASMFZ80 is written in higher level FORTH, it should be possible to modify it to work with most FORTH implementations with no more than moderate difficulty. Using ASMFZ80. Most of the words added with ASMFZ80 are contained in the new vocabulary ASSEMBLER. Generally, it is not necessary to directly reference this vocabulary, since the defining word CODE automatically sets this as the context vocabulary. An assembler definition is started with the word CODE and terminated with the word NEXT,. NEXT, also resets the context vocabulary to the value it had before the definition was started. ASMFZ80 is installed high up in memory, above the usual dictionary. This allows one to create assembler definitions and then purge the assembler, reducing final program size. Example of use. The following in an assembler implementation of the word 2* code 2* hl pop, hl hl add, hl push, next, Description of assembler words. Most of the words added with the assembler are simply modified forms of standard Zilog Z80 assembler identifiers. Registers are indicated by the standard assembler mnemonics in normal order. The only exception is the I register, which is called II to avoid confusion with the standard FORTH word I. Note that this includes parenthesized registers. For example, to load the a register with the value addressed by the bc register, use the instruction a (bc) ld, Parenthesized addresses (e.g. (0100h)) are indicated by preceding the value with (). Note spaces must surround the (). Unparenthesized addresses and immediate values are simply written in the code. For example hl 20 ld, Addresses, rather than offsets, are used for relative jump ! instructions. The assembler computes the offset. ASMFZ80 -- FORTH Z80 Assembler page 2 Conditions (i.e. z nz c nc pe po m p) are standard Zilog mnemonics. For example nz 5 call, As you have probably noticed, the instructions are simply standard Zilog mnemonics, followed by a comma. All instructions are implemented. Osborne users beware -- use of in or out instructions will likely crash the system. There is no label mechanism. Of course, you may use HERE to determine jump addresses, but this is unwieldly. Instead, four control structures are implemented: if, else, then, do, loop, begin, until, begin, while, repeat, The if, until, and while, controls operate like the standard FORTH versions, except that a condition is tested rather than a value. The words if, until, and while, must be preceded by a condition (e.g. z nz) and the code preceding the word must set the flags appropriately. The do, loop, structure generates a counted loop using the Z80 djnz instruction. The count must be placed in the b register before the loop and must be in that register at the end. The count may be from 1 to 256 (0 is treated as 256). Note that Software Works FORTH requires that the bc register be unmodified by a function, so be sure to save it. Control structures may be nested to a depth of at least 10. The Z80 hardware stack is used as the data stack in Software Works FORTH, so values may be removed or added with pop, and push, instructions. WARNING: The bc register must be preserved in Software Works FORTH. Failure to do this will almost certainly crash the system.  until, and while, must be preceded by a condition (e.g. z nz) and the code preceding the word must set the flags appr *D\-WWW$u1- ] ( W* t  WW o g^#V遡Us#rDOL  404g#]\ #BUFƇ#Ӝa  NOT FOUND'-FINĽ=#'?TERMINA=#'ABOR=#'BLOC=#'C=#'EMI=# 'EXPEC=#"'INTERPRE'=#$'KE5=#&'LOAF=#('NUMBEQ=#*'PAG]=#,'R/k=#.'STREAw !x 4'T&SCALÂ=#0'VOCABULAR٪=#2'WORĹ=#4x A)Z$'<4)^ XR"*$U!*/MO  "j6C+0C~w#~wD+< N+BUO4y^ +LOO` <<S>*G!C-FINij-TRAILIN43g R3 9f."^  x A@"C! &Z$'4"^ XC!  '*+'".LINk '".p 9jvU!/LOOГ D</MOġ 9j0)!#C00j 0BRANC}ʼD1)#C1"5+C.2:I)C2BU##C2Nb++C2[>79-STANDARhu SSi $x*@+p+q"@KBD  $zG!$%!C!C< \S<+LOOP <-FINDgZ$<."+'j4 '"6#6=^#Vr+sD 255'=< Z U!>If =#6>r *@++"@s#rD|  ?COMВ C! COMPILE ONLY?CONFIGURŞ VV &DRIVES WITH DENSITIES:Q> " VV& DENSITY CODEV& 0 - 5-SSSDV& 1 - 8-SSSDV& 2 - 8-DSSDV& 3 - 8-SSDDV& 4 - 8-DSDDV& 5 - 8-SSEXTV& 6 - 8-DSEXTV?CSп  DEFINITION NOT FINISHED?DUЅ  ?LOADINDz  LOADING ONLY?PAIR CONDITIONALS NOT PAIRED?STAC  NU!" EMPTY STACK <4" FULL STACK?STREAINPUT STREAM EXHAUSTED?TERMINANu^#VDABORԋABORT "^ x Au""Z$'U!4"^ X*ABӫTAGAI <ALLO.AAN":{ozgCBAS2=#8BEGIE <BP BLANbgBLk=#:BLK/DR{dhBLOC˅ BRANCȟ`i^#V+MDDBUFFEұ,# g ,#S S8RSSjSBPDRUG4BY<"U!'mGV &PAGESV1C/jsDCc<h*C/p@Cn&CCF`CHANGřySRSSS>@<S<SSɅCLEAҥ4g#CMOV  COL5>40=3&MVP-FORTH VERSION 1.11.02VUS,#SScS SSCOMPILU jS CONFIGUR V&NUMBER OF DRIVES ? -1"TOO MANY DRIVES14'SV&DRIVE  &? -0" OUT OF RANGE04G?4S cVV& DR0 SELECTED VCONSTANix^#VDCONTEXԭ=#<CONVER' Lw ,U!LR"LR"58' 8AjjCOUN'U! 7!~PKͧɂC#CREATQgZ$'^ ATTEMPTED TO REDEFINE NULL $# +'" & ISN'T UNIQUE O$'*!<3!@>*SxDɃCS`=#>CURREN=#@D#s#r#s#rDD7!9^q#Vp}o|gBD+0 DOv D.aa EMPTY STACK U!Ui j '"Dp^ 5 U!U!U!DABӮUDDRODDDUBDECIMA LSDEFINITION SDEDENSIT9DEPTK NU!mDIGIYy{0  _!BlCDISK-ERROoDLITERA̜C! U!DNEGATŭї_>W>o>gBD<DOES xu*@+p+q"@DD=#DP)=#BDPUS2BDR-DE<G?4DRHSDR]c" DRms" DR}>" DR" DRIVŝDROЯDDUлCELS> <U!>!>EMI8#EMPTY-BUFFERy4S ENCLOS U{+#]45pD#ʀ45pDDEPRINIEXECUTņJEXIԓ*@N#F#"@DEXPECԣ1FENCŹ=#FIL FIN  FIRSWFL=#DFORGEgZ$NOT IN CURRENT VOCABULARYx"IN PROTECTED DICTIONARY " " -i#" i#STg" `S  j.SFORT& -FREEZ>40=S SG3HER,.HE5LSHLD=#FHOLV\A\hHPUS`Cy*@^#VDI*@^#VDIƕ <>IMMEDIATŪ@@!INIT-FORTȿ INIT-USE*INTERPREB*@^#VDKEMLATES'LEAV7T*@^#V#s#rDLFJLIMIa`LISqVS&SCR # V x R VLI} o gCLITERAC! LOAYLOO  <M$ U!R"jUM*$U! U! $U!R"jR"5"j"U!U!UM895M U"j$TU!jTU!M/MOđ "jU! "jMAغ U!MAX-DRMIj U!MOMOVG!)@ 8ɆNEGAT P}/o|/g#CNEXEDNEXT[JNFf"NOOrNOԈ}!¥#CNUMBEғgOFFSEԨ=#HOһ{ozgCOU=#JOVEBP!s}DP !so&CPA<D4PAGs i@ i@DPF,"4PICNPICK ARGUMENT < 1G 4_¡! ~wk&C ɂPb8 OFF SCREEN! 'U!k =#!,CPRE֮WQUER!Px SQUIS$V C! &OKR=#LR/C~RL=#R\l*@^#V#"@DRe*@^#VDREPEAz jj`!ROL̋ROLL ARGUMENT < 1'iU!G 4`S` " ROԦBRP *>^#V"@DRP"*@CRP@S->(;!zF+BS2 SAVE-BUFFERI' SCV=#NSE}SEC-REAć$2DSEC-WRITő'2DSEC/BLˬSEC/T44@@SET-DRIV :ODSET-DRQUSASET-I = *.#DM!*M*!DMDSIG2  -gSMUDGb @ !SPy *>^#VDSP =#SP !9CSPACů gSPACEӾ    SPBL U#G4SPDR  SP !UG4STAT!=#P}o|gɄSWA;!W!CSYSCALN!h!M&oCT&SCAL\!TEXv!<'sZ$g4'h '=THEΊ! > <U!STIµ!=# TOGGL!!~wDTRAC! TRAVERS!U!4 U!TYP! 4U!DU "T"D}3gxD3J UlgCUM"fU/MOp""!9^q#Vp}|ڢ"!">))ҭ"Ҽ"}o|g"}o|g" =¤"DU}"U!UNTI"  <U">UPDAT"SUS#WUSE&#x^*>CVARIABL0#i>*VOC-LINI#=#VOCABULAR^#WARNINm#=#WHERń# [SVV&SCR#  x &LINE# 4VV'"x j 4x V< <4' ^ 3 j^ WHILŒ#SWIDT7$=# WORG$S$ C!XjXOd$${ozgC~$C!S[COMPILEݑ$  NOT FOUNDݟ$C!STHR$'U!u" R !CS$ SCAS$ %O % ^  <ENDO$% <U!>!ENDCASM%  ^ ^  >! SPAUSs% (-  - COP٧%4U!`S#FLUS%eDSWA%ID&+8'"VLIS &S84  VS&& T% SAVE-FORT4& f!f!VV&FILE NAME ? --- ! ' s.Z$+ 'U!=gZ$+  4U!= f! f!<"U!'mGGU!f! f!4  f!.INDEؔ&VSu" x INDEs'|'  'U!.SӦ'.S''S.S''S.'Va 0'  N` NU!f>'T& EMPTY STACKVACCUMULAT'$ @$4'4 DISPOSM((^ U!'g^ 8^ 8 )Z$'4U!Z( MORŎ(gZ$>'!8VERIF( x  Sx S( g+4h+(jx SjSVE ))u"LIST)3VS&SCR #u"V x R VNLISf)m)  'U!LISTЯ)3VS&SCR #u"V x R V-NLIST))  'U!O-PAG%*N*Aa*Ao*3m)GOTO-X*= 4 4ASCIɏ*gZ$'SCR#X-->ٹ*V>iS&SCR#U!&--> x COPY*a U!^ *>i3**U!'SU!%&R3*U!>ii*%&'U!'S V&Aborted V&DoneWIP+a> U!3*SV&CLEARING SCR#-->&' V&Aborted SV&Done- 4j-MOVH-,=#BUF-MOVa-<  U!'=>LINEu-*-U!FIND-BUƜ- P4INSERT-BUƯ--P4.V >-'"^O-'"*-> f.HSw.̗.3m)w.Ω.A».A-4U!=js#-4^!--G/ .>-4U!/w.COUNTE/BUM$0.0A.08j .0SVV 20 ^!.0S-- S.G/  w. 90H  % -R jSa0^!---+O- HA <=<>-4j=j=#w.0HA.//1/0-1 H --U!S'HS./j4HSjSCOMMV.RTHTACK)L SCREEN))1E2TS@T4CBYE .ORTH 9)278AUTOMV COMalmnopqrstuvwxa;;;;;;;50FORTH COMa_`abcdefghijkb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'=<+'"&NONE-4U!=js#-4^!--G/ .>-4U!/w.COUNTE/BUM$0.0A.08j .0SVV 20 ^!.0S-- S.G/  w. 90H  % -R jSa0^!---+O- HA $ This is the release date of the disk. CHEKLIST$$$ Fog Library Disk FOG-CPM.170 Copyright (1987) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. MVP Forth setup for Osborne computers. Filename Description -04-00 .87 This is the release date of the disk. -CPM170 .DOC This is the description of the disk contents. MVPFORTH.DOC 4F83 8K [MVP Forth79 1 of 9] Osborne single and double density versions. MVPFORTH.ASM 84DE 56K [MVP Forth79 2 of 9] MVPFORTH.DES 2877 2K [MVP Forth79 3 of 9] DDFORTH .DOC 0F1B 3K [MVP Forth79 4 of 9] DDFORTH .SCR 9E32 60K [MVP Forth79 5 of 9] SDFORTH .DOC E4BA 3K [MVP Forth79 6 of 9] SDFORTH .SQR 5502 13K [MVP Forth79 7 of 9] ASMFZ80 .DOC 5BA2 4K [MVP Forth79 8 of 9] AUTOST .COM D049 13K [MVP Forth79 9 of 9]  copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you li%&'