Patches from https://github.com/nealcrook/hForth.git up to commit cdccc69
authorNick Downing <nick@ndcode.org>
Wed, 26 Jun 2019 09:47:20 +0000 (19:47 +1000)
committerNick Downing <nick@ndcode.org>
Wed, 26 Jun 2019 09:47:20 +0000 (19:47 +1000)
hf86exe.asm
hf86ram.asm
hf86rom.asm
hturtle.glo
log.f
msdos.f
optional.f
sio.f
whatsnew.eng
whatsnew.kor
whatsnew.ks

index 1f42c3b..fb7977a 100644 (file)
@@ -6,6 +6,10 @@ PAGE 62,132    ;62 lines per page, 132 characters per line
 ;\r
 ;      hForth 8086 EXE model v0.9.9 by Wonyong Koh, 1997\r
 ;\r
+; 1997. 7. 11.\r
+;      Fix SPACES. Thank Benjamin Hoyt.\r
+; 1997. 6. 23.\r
+;      Fix pack".\r
 ; 1997 6. 4.\r
 ;      Fix the problem that data are corrupted at segment boundary\r
 ;              when .EXE file saved by SAVE-INPUT-AS is larger\r
@@ -638,8 +642,8 @@ AddrTHROWMsgTbl:
                $NAME   5,'code,',CodeComma,NameCodeComma,_SLINK\r
                $NAME   5,'ALIGN',ALIGNN,NameALIGNN,_FLINK\r
                $NAME   7,'ALIGNED',ALIGNED,NameALIGNED,_FLINK\r
-                $NAME   5,'pack"',PackQuote,NamePackQuote,_SLINK\r
-                $NAME   5,'CELLS',CELLS,NameCELLS,_FLINK\r
+               $NAME   5,'pack"',PackQuote,NamePackQuote,_SLINK\r
+               $NAME   5,'CELLS',CELLS,NameCELLS,_FLINK\r
                $NAME   5,'CHARS',CHARS,NameCHARS,_FLINK\r
                $NAME   7,'1chars/',OneCharsSlash,NameOneCharsSlash,_SLINK\r
                $NAME   1,'!',Store,NameStore,_FLINK\r
@@ -1648,52 +1652,6 @@ ZBRAN1:  MOV     SI,CS:[SI]              ;IP:=(IP)
                AND     BX,0FFFEh\r
                $NEXT\r
 \r
-; pack" is dependent of cell alignment.\r
-;\r
-;   pack"       ( c-addr u a-addr -- a-addr2 )\r
-;              Place a string c-addr u at a-addr and gives the next\r
-;              cell-aligned address. Fill the rest of the last cell with\r
-;              null character.\r
-;\r
-;   : pack"     OVER max-char > IF -18 THROW THEN  \ parsed string overflow\r
-;              2DUP SWAP CHARS + CHAR+ ALIGNED DUP >R  \ ca u aa aa+u+1\r
-;              cell- 0 SWAP !                  \ fill 0 at the end of string\r
-;              2DUP C! CHAR+ SWAP              \ c-addr a-addr+1 u\r
-;              CHARS MOVE R> ;\r
-;\r
-;                $COLON  NamePackQuote,PackQuote\r
-;                DW      OVER,DoLIT,MaxChar,GreaterThan,ZBranch,PACKQ1\r
-;                DW      DoLIT,-18,THROW\r
-; PACKQ1         DW      TwoDUP,SWAP,CHARS,Plus,CHARPlus,ALIGNED,DUPP,ToR\r
-;                DW      CellMinus,DoLIT,0,SWAP,Store\r
-;                DW      TwoDUP,CStore,CHARPlus,SWAP\r
-;                DW      CHARS,MOVE,RFrom,EXIT\r
-\r
-               $CODE   NamePackQuote,PackQuote\r
-               POP     AX\r
-               PUSH    AX\r
-               CMP     AX,MaxChar\r
-               JG      PACKQ1\r
-               MOV     DI,BX\r
-               MOV     DX,SI\r
-               MOV     AX,DS\r
-               MOV     ES,AX\r
-               POP     CX\r
-               POP     SI\r
-               MOV     BYTE PTR [DI],CL\r
-               INC     DI\r
-               REP MOVSB\r
-               TEST    DI,1            ;odd address?\r
-               JZ      PACKQ2\r
-               MOV     BYTE PTR [DI],0\r
-               INC     DI\r
-PACKQ2:        MOV     BX,DI\r
-               MOV     SI,DX\r
-               $NEXT\r
-PACKQ1:        MOV     BX,-18\r
-               JMP     THROW\r
-               $ALIGN\r
-\r
 ;   CELLS      ( n1 -- n2 )                    \ CORE\r
 ;              Calculate number of address units for n1 cells.\r
 ;\r
@@ -2548,6 +2506,40 @@ DOUBC1           DW      LITERAL,EXIT
                MOV     BX,[BX-2*CELLL]\r
                $NEXT\r
 \r
+;   pack"       ( c-addr u a-addr -- a-addr2 )\r
+;              Place a string c-addr u at a-addr and gives the next\r
+;              cell-aligned address. Fill the rest of the last cell with\r
+;              null character.\r
+;\r
+;   : pack"     2DUP SWAP CHARS + CHAR+ DUP >R  \ ca u aa aa+u+1\r
+;              ALIGNED cell- 0 SWAP !          \ fill 0 at the end of string\r
+;              2DUP C! CHAR+ SWAP              \ c-addr a-addr+1 u\r
+;              CHARS MOVE R> ALIGNED ; COMPILE-ONLY\r
+;\r
+;                $COLON  5,'pack"',PackQuote,_SLINK\r
+;                DW      TwoDUP,SWAP,CHARS,Plus,CHARPlus,DUPP,ToR\r
+;                DW      ALIGNED,CellMinus,Zero,SWAP,Store\r
+;                DW      TwoDUP,CStore,CHARPlus,SWAP\r
+;                DW      CHARS,MOVE,RFrom,ALIGNED,EXIT\r
+\r
+               $CODE   NamePackQuote,PackQuote\r
+               MOV     DI,BX\r
+               MOV     DX,SI\r
+               MOV     AX,DS\r
+               MOV     ES,AX\r
+               POP     CX\r
+               POP     SI\r
+               MOV     BYTE PTR [DI],CL\r
+               INC     DI\r
+               REP MOVSB\r
+               TEST    DI,1            ;odd address?\r
+               JZ      PACKQ2\r
+               MOV     BYTE PTR [DI],0\r
+               INC     DI\r
+PACKQ2:        MOV     BX,DI\r
+               MOV     SI,DX\r
+               $NEXT\r
+\r
 ;   PARSE-WORD ( "<spaces>ccc<space>" -- c-addr u )\r
 ;              Skip leading spaces and parse a word. Return the name.\r
 ;\r
@@ -4762,17 +4754,18 @@ SMREM1:         MOV     BX,-10          ;divide by zero
 ;   SPACES     ( n -- )                        \ CORE\r
 ;              Send n spaces to the output device if n is greater than zero.\r
 ;\r
-;   : SPACES   ?DUP IF 0 DO SPACE LOOP THEN ;\r
+;   : SPACES   DUP 0 > IF 0 DO SPACE LOOP EXIT THEN  DROP;\r
 ;\r
-;                $COLON  NameSPACES,SPACES\r
-;                DW      QuestionDUP,ZBranch,SPACES2\r
-;                DW      DoLIT,0,DoDO\r
-; SPACES1        DW      SPACE,DoLOOP,SPACES1\r
-; SPACES2        DW      EXIT\r
+;                $COLON  6,'SPACES',SPACES,_FLINK\r
+;                DW      DUPP,Zero,GreaterThan,ZBranch,SPACES1\r
+;                DW      Zero,DoDO\r
+; SPACES2        DW      SPACE,DoLOOP,SPACES2\r
+;                DW      EXIT\r
+; SPACES1        DW      DROP,EXIT\r
 \r
                $CODE   NameSPACES,SPACES\r
                OR      BX,BX\r
-               J     SPACES2\r
+               JLE     SPACES2\r
                PUSH    SI\r
                SUB     BP,CELLL\r
                MOV     [BP],BX\r
index 2d31ef5..1a9f57b 100644 (file)
@@ -7,6 +7,10 @@ PAGE 62,132    ;62 lines per page, 132 characters per line
 ;      hForth 8086 RAM model v0.9.9 by Wonyong Koh, 1997\r
 ;\r
 ;\r
+; 1997. 7. 11.\r
+;      Fix SPACES. Thank Benjamin Hoyt.\r
+; 1997. 6. 23.\r
+;      Fix pack".\r
 ; 1997. 2. 19.\r
 ;      Split environmental variable systemID into CPU and Model.\r
 ; 1997. 2. 6.\r
@@ -1177,24 +1181,6 @@ ZBRAN1:  MOV     SI,[SI]                 ;IP:=(IP)
                AND     BX,0FFFEh\r
                $NEXT\r
 \r
-; pack" is dependent of cell alignment.\r
-;\r
-;   pack"       ( c-addr u a-addr -- a-addr2 )\r
-;              Place a string c-addr u at a-addr and gives the next\r
-;              cell-aligned address. Fill the rest of the last cell with\r
-;              null character.\r
-;\r
-;   : pack"     2DUP SWAP CHARS + CHAR+ DUP >R  \ ca u aa aa+u+1\r
-;              1 CHARS - 0 SWAP !              \ fill 0 at the end of string\r
-;              2DUP C! CHAR+ SWAP              \ c-addr a-addr+1 u\r
-;              CHARS MOVE R> ; COMPILE-ONLY\r
-\r
-               $COLON  5,'pack"',PackQuote,_SLINK\r
-               DW      TwoDUP,SWAP,CHARS,Plus,CHARPlus,DUPP,ToR\r
-               DW      DoLIT,CHARR,Minus,Zero,SWAP,Store\r
-               DW      TwoDUP,CStore,CHARPlus,SWAP\r
-               DW      CHARS,MOVE,RFrom,EXIT\r
-\r
 ;   CELLS      ( n1 -- n2 )                    \ CORE\r
 ;              Calculate number of address units for n1 cells.\r
 ;\r
@@ -1954,6 +1940,22 @@ AddrLastName     EQU     $-CELLL
                $COLON  7,'name>xt',NameToXT,_SLINK\r
                DW      COUNT,DoLIT,MASKK,ANDD,Plus,ALIGNED,CELLPlus,EXIT\r
 \r
+;   pack"       ( c-addr u a-addr -- a-addr2 )\r
+;              Place a string c-addr u at a-addr and gives the next\r
+;              cell-aligned address. Fill the rest of the last cell with\r
+;              null character.\r
+;\r
+;   : pack"     2DUP SWAP CHARS + CHAR+ DUP >R  \ ca u aa aa+u+1\r
+;              ALIGNED cell- 0 SWAP !          \ fill 0 at the end of string\r
+;              2DUP C! CHAR+ SWAP              \ c-addr a-addr+1 u\r
+;              CHARS MOVE R> ALIGNED ; COMPILE-ONLY\r
+\r
+               $COLON  5,'pack"',PackQuote,_SLINK\r
+               DW      TwoDUP,SWAP,CHARS,Plus,CHARPlus,DUPP,ToR\r
+               DW      ALIGNED,CellMinus,Zero,SWAP,Store\r
+               DW      TwoDUP,CStore,CHARPlus,SWAP\r
+               DW      CHARS,MOVE,RFrom,ALIGNED,EXIT\r
+\r
 ;   PARSE-WORD ( "<spaces>ccc<space>" -- c-addr u )\r
 ;              Skip leading spaces and parse a word. Return the name.\r
 ;\r
@@ -3467,13 +3469,14 @@ SMREM4          DW      DoLIT,-11,THROW
 ;   SPACES     ( n -- )                        \ CORE\r
 ;              Send n spaces to the output device if n is greater than zero.\r
 ;\r
-;   : SPACES   ?DUP IF 0 DO SPACE LOOP THEN ;\r
+;   : SPACES   DUP 0 > IF 0 DO SPACE LOOP EXIT THEN  DROP;\r
 \r
                $COLON  6,'SPACES',SPACES,_FLINK\r
-               DW      QuestionDUP,ZBranch,SPACES2\r
+               DW      DUPP,Zero,GreaterThan,ZBranch,SPACES1\r
                DW      Zero,DoDO\r
-SPACES1        DW      SPACE,DoLOOP,SPACES1\r
-SPACES2        DW      EXIT\r
+SPACES2        DW      SPACE,DoLOOP,SPACES2\r
+               DW      EXIT\r
+SPACES1        DW      DROP,EXIT\r
 \r
 ;   TO         Interpretation: ( x "<spaces>name" -- ) \ CORE EXT\r
 ;              Compilation:    ( "<spaces>name" -- )\r
index f811964..5e27b1b 100644 (file)
@@ -7,6 +7,35 @@ PAGE 62,132    ;62 lines per page, 132 characters per line
 ;      hForth 8086 ROM model v0.9.9 by Wonyong Koh, 1997\r
 ;\r
 ;\r
+; 1999. 3. 5.\r
+;      Fix bugs reported by Mr. Neal Crook. Thank Neal Crook.\r
+;      Fix Forth definition of ACCEPT. \r
+;      Add high-level definition of 2DROP and 2DUP.\r
+;      Remove superfluous THEN in optiCOMPILE,ACCEPT, and UM/MOD.\r
+;      LITERAL in the high-level definitions of doubleAlso, singleOnly,\r
+;              and SLITERAL should have been 'POSTPONE LITERAL'.\r
+;      S" in the high-level definitions of ABORT" should have been \r
+;              'POSTPONE S"'.\r
+;       The hith-level definition of REPEAT should have been \r
+;              'POSTPONE AGAIN POSTPONE THEN'.\r
+;      Add COMSTANT word 'sysVar00'.\r
+; 1998. 1. 5.\r
+;      Mr. Kwon Hyuk Kun reported several bugs. Thank Mr. Kwon.\r
+;      Fix REFILL . 'Fetch' was missing in DW statement. Thank Kwon Hyuk Kun.\r
+;      Fix PARSE . It should have been 'CHARS OVER +' to calculate\r
+;              c_addr+u*chars from 'c_addr u'.\r
+;      Add CHARS in the definition of 'head,'.\r
+;      It is more convenient to use up-growing stack for some \r
+;              microprocessors such as 8051 family. I, J, and DEPTH\r
+;              are now processor-dependent words.\r
+; 1997. 8. 26.\r
+;      Introduce MaxCountedString.\r
+; 1997. 8. 16.\r
+;      Replace 'EKEY max-char AND' with KEY in ACCEPT.\r
+; 1997. 7. 11.\r
+;      Fix SPACES. Thank Benjamin Hoyt.\r
+; 1997. 6. 23.\r
+;      Fix pack".\r
 ; 1997. 2. 19.\r
 ;      Split environmental variable systemID into CPU and Model.\r
 ; 1997. 2. 6.\r
@@ -254,6 +283,7 @@ FALSEE              EQU     0
 \r
 CHARR          EQU     1               ;byte size of a character\r
 CELLL          EQU     2               ;byte size of a cell\r
+MaxCountedString EQU   0FFh            ;max char length of counted string\r
 MaxChar        EQU     0FFh            ;Extended character set\r
                                        ;  Use 07Fh for ASCII only\r
 MaxSigned      EQU     07FFFh          ;max value of signed integer\r
@@ -298,7 +328,7 @@ RAMEnd              EQU     0FFFEh                  ;top of RAM memory ******
 ROM0           EQU     0                       ;bottom of ROM memory ******\r
 ROMEnd         EQU     08000h                  ;end of ROM memory ******\r
                                                ;ROM size = 32KB\r
-COLDD          EQU     ROM0+00100h             ;cold start vector ******\r
+COLDD          EQU     00100h                  ;cold start vector ******\r
 \r
 Trapfpc        EQU     RAMEnd                  ;reserve a cell for microdebugger\r
 RPP            EQU     RAMEnd-CELLL            ;start of return stack (RP0)\r
@@ -515,7 +545,7 @@ UZERO               DW      RXQ                     ;'ekey?
                DW      0                       ;bal\r
                DW      0                       ;notNONAME?\r
                DW      0                       ;rakeVar\r
-NOrder0        DW      2                       ;#order\r
+               DW      2                       ;#order\r
                DW      FORTH_WORDLISTAddr      ;search order stack\r
                DW      NONSTANDARD_WORDLISTAddr\r
                DW      (OrderDepth-2) DUP (0)\r
@@ -609,7 +639,7 @@ ORG _CODE
        $THROWMSG       '[IF], [ELSE], or [THEN] exception'             ;-58\r
 \r
 ;;;;;;;;;;;;;;;;\r
-; System dependent words -- Must be re-definded for each system.\r
+; System dependent words -- Must be re-defined for each system.\r
 ;;;;;;;;;;;;;;;;\r
 ; I/O words must be redefined if serial communication is used instead of\r
 ; keyboard. Following words are for MS-DOS system.\r
@@ -658,7 +688,7 @@ RXFET1:     $NEXT
 ;   CR         ( -- )                          \ CORE\r
 ;              Carriage return and linefeed.\r
 ;\r
-;   : CR       carriage-return-char EMIT  linefeed-char EMIT ;\r
+;   : CR       [ carriage-return-char ] LITERAL EMIT  [ linefeed-char ] LITERAL EMIT ;\r
 \r
                $COLON  2,'CR',CR,_FLINK\r
                DW      DoLIT,CRR,EMIT,DoLIT,LFF,EMIT,EXIT\r
@@ -680,7 +710,7 @@ RXFET1:     $NEXT
 ;              ."  by Wonyong Koh, 1997" CR\r
 ;              ." ALL noncommercial and commercial uses are granted." CR\r
 ;              ." Please send comment, bug report and suggestions to:" CR\r
-;              ."   wykoh@pado.krict.re.kr or wykoh@hitel.kol.co.kr" CR ;\r
+;              ."   wykoh@pado.krict.re.kr or wykoh@free.xtel.com" CR ;\r
 \r
                $COLON  2,'hi',HI,_SLINK\r
                DW      CR\r
@@ -698,7 +728,7 @@ RXFET1:     $NEXT
                DW      TYPEE,CR\r
                $INSTR  'Please send comment, bug report and suggestions to:'\r
                DW      TYPEE,CR\r
-               $INSTR  '  wykoh@pado.krict.re.kr or wykoh@hitel.kol.co.kr'\r
+               $INSTR  '  wykoh@pado.krict.re.kr or wykoh@free.xtel.com'\r
                DW      TYPEE,CR,EXIT\r
 \r
 ;   COLD       ( -- )\r
@@ -935,7 +965,7 @@ SAMEQ1:     MOV     SI,DX
 ;              >R              \ wid  R: ca1 u\r
 ;              BEGIN @         \ ca2  R: ca1 u\r
 ;                 DUP 0= IF R> R> 2DROP EXIT THEN      \ not found\r
-;                 DUP COUNT [ =MASK ] LITERAL AND R@ = \ ca2 ca2+char f\r
+;                 DUP COUNT [ =mask ] LITERAL AND R@ = \ ca2 ca2+char f\r
 ;                    IF   R> R@ SWAP DUP >R            \ ca2 ca2+char ca1 u\r
 ;                         same?                        \ ca2 flag\r
 ;                  \ ELSE DROP -1      \ unnecessary since ca2+char is not 0.\r
@@ -943,8 +973,8 @@ SAMEQ1:     MOV     SI,DX
 ;              WHILE cell-             \ pointer to next word in wordlist\r
 ;              REPEAT\r
 ;              R> R> 2DROP DUP name>xt SWAP            \ xt ca2\r
-;              C@ DUP [ =COMP ] LITERAL AND 0= SWAP\r
-;              [ =IMED ] LITERAL AND 0= 2* 1+ ;\r
+;              C@ DUP [ =comp ] LITERAL AND 0= SWAP\r
+;              [ =immed ] LITERAL AND 0= 2* 1+ ;\r
 ;\r
 ;                $COLON  17,'(search-wordlist)',ParenSearch_Wordlist,_SLINK\r
 ;                DW      ROT,ToR,SWAP,DUPP,ZBranch,PSRCH6\r
@@ -1007,7 +1037,7 @@ PSRCH4:   POP     SI
 ;              CALL instruction and leaves the next cell address after the\r
 ;              CALL instruction. Otherwise leaves the original xt1 and zero.\r
 ;\r
-;   : ?call    DUP @ call-code =\r
+;   : ?call    DUP @ [ call-code ] LITERAL =\r
 ;              IF   CELL+ DUP @ SWAP CELL+ DUP ROT + EXIT THEN\r
 ;                      \ Direct Threaded Code 8086 relative call\r
 ;              0 ;\r
@@ -1022,8 +1052,8 @@ QCALL1            DW      Zero,EXIT
 ;              CREATE . Return xt2 of current definition.\r
 ;\r
 ;   : xt,      xhere ALIGNED DUP TOxhere SWAP\r
-;              call-code code,         \ Direct Threaded Code\r
-;              xhere CELL+ - code, ;   \ 8086 relative call\r
+;              [ call-code ] LITERAL code,     \ Direct Threaded Code\r
+;              xhere CELL+ - code, ;           \ 8086 relative call\r
 \r
                $COLON  3,'xt,',xtComma,_SLINK\r
                DW      XHere,ALIGNED,DUPP,TOXHere,SWAP\r
@@ -1271,8 +1301,8 @@ ZBRAN1:   MOV     SI,[SI]                 ;IP:=(IP)
 ;   ALIGNED    ( addr -- a-addr )              \ CORE\r
 ;              Align address to the cell boundary.\r
 ;\r
-;   : ALIGNED  DUP 0 cell-size UM/MOD DROP DUP\r
-;              IF cell-size SWAP - THEN + ;    \ slow, very portable\r
+;   : ALIGNED  DUP 0 [ cell-size ] LITERAL UM/MOD DROP DUP\r
+;              IF [ cell-size ] LITERAL SWAP - THEN + ; \ slow, very portable\r
 ;\r
 ;                $COLON  7,'ALIGNED',ALIGNED,_FLINK\r
 ;                DW      DUPP,Zero,DoLIT,CELLL\r
@@ -1286,29 +1316,11 @@ ZBRAN1:         MOV     SI,[SI]                 ;IP:=(IP)
                AND     BX,0FFFEh\r
                $NEXT\r
 \r
-; pack" is dependent of cell alignment.\r
-;\r
-;   pack"       ( c-addr u a-addr -- a-addr2 )\r
-;              Place a string c-addr u at a-addr and gives the next\r
-;              cell-aligned address. Fill the rest of the last cell with\r
-;              null character.\r
-;\r
-;   : pack"     2DUP SWAP CHARS + CHAR+ DUP >R  \ ca u aa aa+u+1\r
-;               1 CHARS - 0 SWAP !              \ fill 0 at the end of string\r
-;              2DUP C! CHAR+ SWAP              \ c-addr a-addr+1 u\r
-;              CHARS MOVE R> ; COMPILE-ONLY\r
-\r
-               $COLON  5,'pack"',PackQuote,_SLINK\r
-                DW      TwoDUP,SWAP,CHARS,Plus,CHARPlus,DUPP,ToR\r
-                DW      DoLIT,CHARR,Minus,Zero,SWAP,Store\r
-               DW      TwoDUP,CStore,CHARPlus,SWAP\r
-               DW      CHARS,MOVE,RFrom,EXIT\r
-\r
-;   CELLS       ( n1 -- n2 )                    \ CORE\r
+;   CELLS      ( n1 -- n2 )                    \ CORE\r
 ;              Calculate number of address units for n1 cells.\r
 ;\r
-;   : CELLS    cell-size * ;   \ slow, very portable\r
-;   : CELLS    2* ;            \ fast, must be redefined for each system\r
+;   : CELLS    [ cell-size ] LITERAL * ;       \ slow, very portable\r
+;   : CELLS    2* ;                            \ fast, must be redefined for each system\r
 \r
                $COLON  5,'CELLS',CELLS,_FLINK\r
                DW      TwoStar,EXIT\r
@@ -1316,12 +1328,44 @@ ZBRAN1:         MOV     SI,[SI]                 ;IP:=(IP)
 ;   CHARS      ( n1 -- n2 )                    \ CORE\r
 ;              Calculate number of address units for n1 characters.\r
 ;\r
-;   : CHARS    char-size * ;   \ slow, very portable\r
-;   : CHARS    ;               \ fast, must be redefined for each system\r
+;   : CHARS    [ char-size ] LITERAL * ;       \ slow, very portable\r
+;   : CHARS    ;                               \ fast, must be redefined for each system\r
 \r
                $COLON  5,'CHARS',CHARS,_FLINK\r
                DW      EXIT\r
 \r
+; It is more convenient to use up-growing stack for some microprocessors such as 8051 family.\r
+; In those cases I, J, and DEPTH should be redefined.\r
+\r
+;   I          ( -- n|u ) ( R: loop-sys -- loop-sys )  \ CORE\r
+;              Push the innermost loop index.\r
+;\r
+;   : I        rp@ [ 1 CELLS ] LITERAL + @\r
+;              rp@ [ 2 CELLS ] LITERAL + @  +  ; COMPILE-ONLY\r
+\r
+               $COLON  COMPO+1,'I',I,_FLINK\r
+               DW      RPFetch,DoLIT,CELLL,Plus,Fetch\r
+               DW      RPFetch,DoLIT,2*CELLL,Plus,Fetch,Plus,EXIT\r
+\r
+;   J          ( -- n|u ) ( R: loop-sys -- loop-sys )  \ CORE\r
+;              Push the index of next outer loop.\r
+;\r
+;   : J        rp@ [ 3 CELLS ] LITERAL + @\r
+;              rp@ [ 4 CELLS ] LITERAL + @  +  ; COMPILE-ONLY\r
+\r
+               $COLON  COMPO+1,'J',J,_FLINK\r
+               DW      RPFetch,DoLIT,3*CELLL,Plus,Fetch\r
+               DW      RPFetch,DoLIT,4*CELLL,Plus,Fetch,Plus,EXIT\r
+\r
+;   DEPTH      ( -- +n )                       \ CORE\r
+;              Return the depth of the data stack.\r
+;\r
+;   : DEPTH    sp@ sp0 SWAP - [ cell-size ] LITERAL / ;\r
+\r
+               $COLON  5,'DEPTH',DEPTH,_FLINK\r
+               DW      SPFetch,SPZero,SWAP,Minus\r
+               DW      DoLIT,CELLL,Slash,EXIT\r
+\r
 ;   !          ( x a-addr -- )                 \ CORE\r
 ;              Store x at a aligned address.\r
 \r
@@ -1531,11 +1575,21 @@ MOVE1:          STD
 \r
                $CONST  7,'sysVar0',SysVar0,UZERO,_SLINK\r
 \r
+;   sysVar00   ( -- a-addr )\r
+;              Start of backup copy of original value table of system variables.\r
+\r
+               $CONST  8,'sysVar00',SysVar00,UZERO0,_SLINK\r
+\r
 ;   sysVar0End ( -- a-addr )\r
 ;              End of initial value table of system variables.\r
 \r
                $CONST  10,'sysVar0End',SysVar0End,ULAST,_SLINK\r
 \r
+;   THROWMsgTbl ( -- a-addr )                  \ CORE\r
+;              Return the address of the THROW message table.\r
+\r
+               $CONST  11,'THROWMsgTbl',THROWMsgTbl,AddrTHROWMsgTbl,_SLINK\r
+\r
 ;   'ekey?      ( -- a-addr )\r
 ;              Execution vector of EKEY?.\r
 \r
@@ -1607,11 +1661,6 @@ AddrHereVar      EQU     _VAR -CELLL
 \r
                $VAR    4,'BASE',BASE,_FLINK\r
 \r
-;   THROWMsgTbl ( -- a-addr )                  \ CORE\r
-;              Return the address of the THROW message table.\r
-\r
-               $CONST  11,'THROWMsgTbl',THROWMsgTbl,AddrTHROWMsgTbl,_SLINK\r
-\r
 ;   ROMB       ( -- a-addr )\r
 ;              Bottom of free ROM area.\r
 \r
@@ -1768,7 +1817,7 @@ SystemTaskName    EQU     _NAME-0
                DW      DoLIT,VersionStr,COUNT,EXIT\r
 \r
                $ENVIR  15,'/COUNTED-STRING'\r
-               DW      DoLIT,MaxChar,EXIT\r
+               DW      DoLIT,MaxCountedString,EXIT\r
 \r
                $ENVIR  5,'/HOLD'\r
                DW      DoLIT,PADSize,EXIT\r
@@ -1854,7 +1903,7 @@ PARDD1            DW      LessNumberSign,NumberSignS,ROT
                DW      TYPEE,EXIT\r
 \r
 ;   .prompt        ( -- )\r
-;              Disply Forth prompt. This word is vectored.\r
+;              Display Forth prompt. This word is vectored.\r
 ;\r
 ;   : .prompt  'prompt EXECUTE ;\r
 \r
@@ -1901,7 +1950,7 @@ PARDD1            DW      LessNumberSign,NumberSignS,ROT
 ;   cell-      ( a-addr1 -- a-addr2 )\r
 ;              Return previous aligned cell address.\r
 ;\r
-;   : cell-    -(cell-size) + ;\r
+;   : cell-    [ cell-size NEGATE ] LITERAL + ;\r
 \r
                $COLON  5,'cell-',CellMinus,_SLINK\r
                DW      DoLIT,0-CELLL,Plus,EXIT\r
@@ -1925,7 +1974,7 @@ PARDD1            DW      LessNumberSign,NumberSignS,ROT
 ;   doDO       ( n1|u1 n2|u2 -- ) ( R: -- n1 n2-n1-max_negative )\r
 ;              Run-time funtion of DO.\r
 ;\r
-;   : doDO     >R max-negative + R> OVER - SWAP R> SWAP >R SWAP >R >R ;\r
+;   : doDO     >R [ max-negative ] LITERAL + R> OVER - SWAP R> SWAP >R SWAP >R >R ;\r
 \r
                $COLON  COMPO+4,'doDO',DoDO,_SLINK\r
                DW      ToR,DoLIT,MaxNegative,Plus,RFrom\r
@@ -1943,10 +1992,12 @@ PARDD1          DW      LessNumberSign,NumberSignS,ROT
 ;   : head,    PARSE-WORD DUP 0=\r
 ;              IF errWord 2! -16 THROW THEN\r
 ;                              \ attempt to use zero-length string as a name\r
-;              DUP =mask > IF -19 THROW THEN   \ definition name too long\r
+;              DUP [ =mask ] LITERAL > IF -19 THROW THEN\r
+;                              \ definition name too long\r
 ;              2DUP GET-CURRENT SEARCH-WORDLIST  \ name exist?\r
 ;              IF DROP ." redefine " 2DUP TYPE SPACE THEN \ warn if redefined\r
-;              npVar @ OVER CELL+ - ALIGNED\r
+;              npVar @ OVER CHARS CHAR+ - \r
+;              DUP ALIGNED SWAP OVER XOR IF CELL- THEN \ aligned to lower addr\r
 ;              DUP >R pack" DROP R>            \ pack the name in dictionary\r
 ;              cell- GET-CURRENT @ OVER !      \ build wordlist link\r
 ;              cell- DUP npVar !  ! ;          \ adjust name space pointer\r
@@ -1960,8 +2011,10 @@ HEADC3           DW      TwoDUP,GET_CURRENT,SEARCH_WORDLIST,ZBranch,HEADC2
                DW      DROP\r
                $INSTR  'redefine '\r
                DW      TYPEE,TwoDUP,TYPEE,SPACE\r
-HEADC2         DW      NPVar,Fetch,OVER,CELLPlus,Minus,ALIGNED\r
-               DW      DUPP,ToR,PackQuote,DROP,RFrom\r
+HEADC2         DW      NPVar,Fetch,OVER,CHARS,CHARPlus,Minus\r
+               DW      DUPP,ALIGNED,SWAP,OVER,XORR,ZBranch,HEADC4\r
+               DW      CellMinus\r
+HEADC4         DW      DUPP,ToR,PackQuote,DROP,RFrom\r
                DW      CellMinus,GET_CURRENT,Fetch,OVER,Store\r
                DW      CellMinus,DUPP,NPVar,Store,Store,EXIT\r
 HEADC1         DW      ErrWord,TwoStore,DoLIT,-16,THROW\r
@@ -2008,8 +2061,8 @@ INTERP4   DW      DoLIT,-14,THROW
 ;                    2DROP EXIT THEN\r
 ;                  DUP CELL+ @ ['] EXIT = IF   \ if second word is EXIT\r
 ;                    @ DUP ['] doLIT XOR  \ make sure it is not literal value\r
-;                    IF SWAP THEN THEN\r
-;              THEN THEN DROP COMPILE, ;\r
+;                    IF SWAP THEN  THEN\r
+;              THEN DROP COMPILE, ;\r
 \r
                $COLON  12,'optiCOMPILE,',OptiCOMPILEComma,_SLINK\r
                DW      DUPP,QCall,DoLIT,DoLIST,Equals,ZBranch,OPTC2\r
@@ -2045,7 +2098,7 @@ SINGLEO2  DW      EXIT
 ;              single cell number in compilation state.\r
 ;\r
 ;   : singleOnly,\r
-;              singleOnly LITERAL ;\r
+;              singleOnly POSTPONE LITERAL ;\r
 \r
                $COLON  11,'singleOnly,',SingleOnlyComma,_SLINK\r
                DW      SingleOnly,LITERAL,EXIT\r
@@ -2098,7 +2151,7 @@ DOUBLEA6  DW      One,EXIT
 ;              compilation state.\r
 ;\r
 ;   : doubleAlso,\r
-;              (doubleAlso) 1- IF SWAP LITERAL THEN LITERAL ;\r
+;              (doubleAlso) 1- IF SWAP POSTPONE LITERAL THEN POSTPONE LITERAL ;\r
 \r
                $COLON  11,'doubleAlso,',DoubleAlsoComma,_SLINK\r
                DW      ParenDoubleAlso,OneMinus,ZBranch,DOUBC1\r
@@ -2140,6 +2193,26 @@ DOUBC1           DW      LITERAL,EXIT
                $COLON  7,'name>xt',NameToXT,_SLINK\r
                DW      CellMinus,CellMinus,Fetch,EXIT\r
 \r
+;   pack"       ( c-addr u a-addr -- a-addr2 )\r
+;              Place a string c-addr u at a-addr and gives the next\r
+;              cell-aligned address. Fill the rest of the last cell with\r
+;              null character.\r
+;\r
+;   : pack"     OVER max-counted-string SWAP U< \r
+;              IF -18 THROW THEN       \ parsed string overflow\r
+;              2DUP SWAP CHARS + CHAR+ DUP >R  \ ca u aa aa+u+1\r
+;              ALIGNED cell- 0 SWAP !          \ fill 0 at the end of string\r
+;              2DUP C! CHAR+ SWAP              \ c-addr a-addr+1 u\r
+;              CHARS MOVE R> ALIGNED ; COMPILE-ONLY\r
+\r
+               $COLON  COMPO+5,'pack"',PackQuote,_SLINK\r
+               DW      OVER,DoLIT,MaxCountedString,SWAP,ULess,ZBranch,PACKQ1\r
+               DW      DoLIT,-18,THROW\r
+PACKQ1         DW      TwoDUP,SWAP,CHARS,Plus,CHARPlus,DUPP,ToR\r
+               DW      ALIGNED,CellMinus,Zero,SWAP,Store\r
+               DW      TwoDUP,CStore,CHARPlus,SWAP\r
+               DW      CHARS,MOVE,RFrom,ALIGNED,EXIT\r
+\r
 ;   PARSE-WORD ( "<spaces>ccc<space>" -- c-addr u )\r
 ;              Skip leading spaces and parse a word. Return the name.\r
 ;\r
@@ -2330,7 +2403,7 @@ SEARCH1   DW      EXIT
 ;              Prepare the output string to be TYPE'd.\r
 ;              ||xhere>WORD/#-work-area|\r
 ;\r
-;   : #>       2DROP hld @ xhere size-of-PAD + OVER - 1chars/ ;\r
+;   : #>       2DROP hld @ xhere [ size-of-PAD ] LITERAL + OVER - 1chars/ ;\r
 \r
                $COLON  2,'#>',NumberSignGreater,_FLINK\r
                DW      TwoDROP,HLD,Fetch,XHere,DoLIT,PADSize*CHARR,Plus\r
@@ -2374,7 +2447,7 @@ NUMSS1            DW      NumberSign,TwoDUP,ORR
 ;   ,          ( x -- )                        \ CORE\r
 ;              Reserve one cell in RAM or ROM data space and store x in it.\r
 ;\r
-;   : ,        HERE ! cell-size hereVar +! ;\r
+;   : ,        HERE ! [ cell-size ] LITERAL hereVar +! ;\r
 \r
                $COLON  1,',',Comma,_FLINK\r
                DW      HERE,Store\r
@@ -2457,12 +2530,16 @@ NUMSS1          DW      NumberSign,TwoDUP,ORR
 \r
 ;   2DROP      ( x1 x2 -- )                    \ CORE\r
 ;              Drop cell pair x1 x2 from the stack.\r
+;\r
+;   : 2DROP    DROP DROP ;\r
 \r
                $COLON  5,'2DROP',TwoDROP,_FLINK\r
                DW      DROP,DROP,EXIT\r
 \r
 ;   2DUP       ( x1 x2 -- x1 x2 x1 x2 )        \ CORE\r
 ;              Duplicate cell pair x1 x2.\r
+;\r
+;   : 2DUP     DUP DUP ;\r
 \r
                $COLON  4,'2DUP',TwoDUP,_FLINK\r
                DW      OVER,OVER,EXIT\r
@@ -2535,7 +2612,7 @@ LESS1             DW      Minus,ZeroLess,EXIT
 ;              Initiate the numeric output conversion process.\r
 ;              ||xhere>WORD/#-work-area|\r
 ;\r
-;   : <#       xhere size-of-PAD + hld ! ;\r
+;   : <#       xhere [ size-of-PAD ] LITERAL + hld ! ;\r
 \r
                $COLON  2,'<#',LessNumberSign,_FLINK\r
                DW      XHere,DoLIT,PADSize*CHARR,Plus,HLD,Store,EXIT\r
@@ -2543,7 +2620,7 @@ LESS1             DW      Minus,ZeroLess,EXIT
 ;   =          ( x1 x2 -- flag )               \ CORE\r
 ;              Return true if top two are equal.\r
 ;\r
-;   : =        XORR 0= ;\r
+;   : =        XOR 0= ;\r
 \r
                $COLON  1,'=',Equals,_FLINK\r
                DW      XORR,ZeroEquals,EXIT\r
@@ -2556,7 +2633,7 @@ LESS1             DW      Minus,ZeroLess,EXIT
                $COLON  1,'>',GreaterThan,_FLINK\r
                DW      SWAP,LessThan,EXIT\r
 \r
-;   >IN        ( -- a-addr )\r
+;   >IN        ( -- a-addr )                   \ CORE\r
 ;              Hold the character pointer while parsing input stream.\r
 \r
                $VAR    3,'>IN',ToIN,_FLINK\r
@@ -2614,26 +2691,25 @@ QDUP1           DW      EXIT
 ;\r
 ;   : ACCEPT   >R 0\r
 ;              BEGIN  DUP R@ <                 \ ca n2 f  R: n1\r
-;              WHILE  EKEY max-char AND\r
-;                     DUP BL <\r
-;                     IF   DUP  cr# = IF ROT 2DROP R> DROP EXIT THEN\r
-;                          DUP  tab# =\r
+;              WHILE  KEY DUP BL <\r
+;                     IF   DUP  [ cr# ] LITERAL = IF ROT 2DROP R> DROP EXIT THEN\r
+;                          DUP  [ tab# ] LITERAL =\r
 ;                          IF   DROP 2DUP + BL DUP EMIT SWAP C! 1+\r
-;                          ELSE DUP  bsp# =\r
-;                               SWAP del# = OR\r
-;                               IF DROP DUP\r
-;                                      \ discard the last char if not 1st char\r
-;                               IF 1- bsp# EMIT BL EMIT bsp# EMIT THEN THEN\r
+;                          ELSE DUP  [ bsp# ] LITERAL =\r
+;                               SWAP [ del# ] LITERAL = OR\r
+;                               IF DUP \ discard the last char if not 1st char\r
+;                                 IF 1- [ bsp# ] LITERAL EMIT \r
+;                                     BL EMIT [ bsp# ] LITERAL EMIT THEN \r
+;                                THEN\r
 ;                          THEN\r
-;                     ELSE >R 2DUP CHARS + R> DUP EMIT SWAP C! 1+  THEN\r
+;                     ELSE >R 2DUP CHARS + R> DUP EMIT SWAP C! 1+\r
 ;                     THEN\r
 ;              REPEAT SWAP  R> 2DROP ;\r
 \r
                $COLON  6,'ACCEPT',ACCEPT,_FLINK\r
                DW      ToR,Zero\r
 ACCPT1         DW      DUPP,RFetch,LessThan,ZBranch,ACCPT5\r
-               DW      EKEY,DoLIT,MaxChar,ANDD\r
-               DW      DUPP,BLank,LessThan,ZBranch,ACCPT3\r
+               DW      KEY,DUPP,BLank,LessThan,ZBranch,ACCPT3\r
                DW      DUPP,DoLIT,CRR,Equals,ZBranch,ACCPT4\r
                DW      ROT,TwoDROP,RFrom,DROP,EXIT\r
 ACCPT4         DW      DUPP,DoLIT,TABB,Equals,ZBranch,ACCPT6\r
@@ -2700,7 +2776,7 @@ AGAIN1            DW      DoLIT,Branch,COMPILEComma,CodeComma,BalMinus,EXIT
 ;   CELL+      ( a-addr1 -- a-addr2 )          \ CORE\r
 ;              Return next aligned cell address.\r
 ;\r
-;   : CELL+    cell-size + ;\r
+;   : CELL+    [ cell-size ] LITERAL + ;\r
 \r
                $COLON  5,'CELL+',CELLPlus,_FLINK\r
                DW      DoLIT,CELLL,Plus,EXIT\r
@@ -2708,7 +2784,7 @@ AGAIN1            DW      DoLIT,Branch,COMPILEComma,CodeComma,BalMinus,EXIT
 ;   CHAR+      ( c-addr1 -- c-addr2 )          \ CORE\r
 ;              Returns next character-aligned address.\r
 ;\r
-;   : CHAR+    char-size + ;\r
+;   : CHAR+    [ char-size ] LITERAL + ;\r
 \r
                $COLON  5,'CHAR+',CHARPlus,_FLINK\r
                DW      DoLIT,CHARR,Plus,EXIT\r
@@ -2791,15 +2867,6 @@ CREAT1           DW      DoLIT,DoCREATE,xtComma,HeadComma
                $COLON  7,'DECIMAL',DECIMAL,_FLINK\r
                DW      DoLIT,10,BASE,Store,EXIT\r
 \r
-;   DEPTH      ( -- +n )                       \ CORE\r
-;              Return the depth of the data stack.\r
-;\r
-;   : DEPTH    sp@ sp0 SWAP - cell-size / ;\r
-\r
-               $COLON  5,'DEPTH',DEPTH,_FLINK\r
-               DW      SPFetch,SPZero,SWAP,Minus\r
-               DW      DoLIT,CELLL,Slash,EXIT\r
-\r
 ;   DNEGATE    ( d1 -- d2 )                    \ DOUBLE\r
 ;              Two's complement of double-cell number.\r
 ;\r
@@ -2883,16 +2950,6 @@ FMMOD3           DW      RFrom,DROP,DUPP,ZeroLess,ZBranch,FMMOD6
                DW      HLD,Fetch,DoLIT,0-CHARR,Plus\r
                DW      DUPP,HLD,Store,CStore,EXIT\r
 \r
-;   I          ( -- n|u ) ( R: loop-sys -- loop-sys )  \ CORE\r
-;              Push the innermost loop index.\r
-;\r
-;   : I        rp@ [ 1 CELLS ] LITERAL + @\r
-;              rp@ [ 2 CELLS ] LITERAL + @  +  ; COMPILE-ONLY\r
-\r
-               $COLON  COMPO+1,'I',I,_FLINK\r
-               DW      RPFetch,DoLIT,CELLL,Plus,Fetch\r
-               DW      RPFetch,DoLIT,2*CELLL,Plus,Fetch,Plus,EXIT\r
-\r
 ;   IF         Compilation: ( C: -- orig )             \ CORE\r
 ;              Run-time: ( x -- )\r
 ;              Put the location of a new unresolved forward reference orig\r
@@ -2918,7 +2975,7 @@ FMMOD3            DW      RFrom,DROP,DUPP,ZeroLess,ZBranch,FMMOD6
 ;   KEY        ( -- char )                     \ CORE\r
 ;              Receive a character. Do not display char.\r
 ;\r
-;   : KEY      EKEY max-char AND ;\r
+;   : KEY      EKEY [ max-char ] LITERAL AND ;\r
 \r
                $COLON  3,'KEY',KEY,_FLINK\r
                DW      EKEY,DoLIT,MaxChar,ANDD,EXIT\r
@@ -2954,7 +3011,7 @@ FMMOD3            DW      RFrom,DROP,DUPP,ZeroLess,ZBranch,FMMOD6
 ;\r
 ;   : PARSE    >R  SOURCE >IN @ /STRING        \ c-addr u  R: char\r
 ;              DUP IF\r
-;                 OVER CHARS + OVER       \ c-addr c-addr+u c-addr  R: char\r
+;                 CHARS OVER + OVER       \ c-addr c-addr+u c-addr  R: char\r
 ;                 BEGIN  DUP C@ R@ XOR\r
 ;                 WHILE  CHAR+ 2DUP =\r
 ;                 UNTIL  DROP OVER - 1chars/ DUP\r
@@ -2965,7 +3022,7 @@ FMMOD3            DW      RFrom,DROP,DUPP,ZeroLess,ZBranch,FMMOD6
                $COLON  5,'PARSE',PARSE,_FLINK\r
                DW      ToR,SOURCE,ToIN,Fetch,SlashSTRING\r
                DW      DUPP,ZBranch,PARSE4\r
-               DW      OVER,CHARS,Plus,OVER\r
+               DW      CHARS,OVER,Plus,OVER\r
 PARSE1         DW      DUPP,CFetch,RFetch,XORR,ZBranch,PARSE3\r
                DW      CHARPlus,TwoDUP,Equals,ZBranch,PARSE1\r
 PARSE2         DW      DROP,OVER,Minus,DUPP,OneCharsSlash,Branch,PARSE5\r
@@ -3019,13 +3076,13 @@ QUIT5           DW      SPZero,SPStore,Branch,QUIT1
 ;\r
 ;   : REFILL   SOURCE-ID IF 0 EXIT THEN\r
 ;              npVar @ [ size-of-PAD CHARS 2* ] LITERAL - DUP\r
-;              size-of-PAD ACCEPT sourceVar 2!\r
+;              [ size-of-PAD ] LITERAL ACCEPT sourceVar 2!\r
 ;              0 >IN ! -1 ;\r
 \r
                $COLON  6,'REFILL',REFILL,_FLINK\r
                DW      SOURCE_ID,ZBranch,REFIL1\r
                DW      Zero,EXIT\r
-REFIL1         DW      NPVar,DoLIT,0-PADSize*CHARR*2,Plus,DUPP\r
+REFIL1         DW      NPVar,Fetch,DoLIT,PADSize*CHARR*2,Minus,DUPP\r
                DW      DoLIT,PADSize*CHARR,ACCEPT,SourceVar,TwoStore\r
                DW      Zero,ToIN,Store,MinusOne,EXIT\r
 \r
@@ -3150,7 +3207,7 @@ ULES1             DW      Minus,ZeroLess,EXIT
 ;   UM*        ( u1 u2 -- ud )                 \ CORE\r
 ;              Unsigned multiply. Return double-cell product.\r
 ;\r
-;   : UM*      0 SWAP cell-size-in-bits 0 DO\r
+;   : UM*      0 SWAP [ cell-size-in-bits ] LITERAL 0 DO\r
 ;                 DUP um+ >R >R DUP um+ R> +\r
 ;                 R> IF >R OVER um+ R> + THEN     \ if carry\r
 ;              LOOP ROT DROP ;\r
@@ -3170,12 +3227,10 @@ UMST2           DW      DoLOOP,UMST1
 ;\r
 ;   : UM/MOD   DUP 0= IF -10 THROW THEN        \ divide by zero\r
 ;              2DUP U< IF\r
-;                 NEGATE cell-size-in-bits 0\r
+;                 NEGATE [ cell-size-in-bits ] LITERAL 0\r
 ;                 DO   >R DUP um+ >R >R DUP um+ R> + DUP\r
 ;                      R> R@ SWAP >R um+ R> OR\r
-;                      IF >R DROP 1+ R> THEN\r
-;                      ELSE DROP THEN\r
-;                      R>\r
+;                      IF  >R DROP 1+ R>  ELSE  DROP  THEN\r
 ;                 LOOP DROP SWAP EXIT\r
 ;              ELSE -11 THROW          \ result out of range\r
 ;              THEN ;\r
@@ -3198,7 +3253,7 @@ UMM4              DW      DoLIT,-11,THROW
 ;              An UNLOOP is required for each nesting level before the\r
 ;              definition may be EXITed.\r
 ;\r
-;   : UNLOOP   R> R> R> 2DROP >R ;\r
+;   : UNLOOP   R> R> R> 2DROP >R ; COMPILE-ONLY\r
 \r
                $COLON  COMPO+6,'UNLOOP',UNLOOP,_FLINK\r
                DW      RFrom,RFrom,RFrom,TwoDROP,ToR,EXIT\r
@@ -3238,7 +3293,7 @@ UMM4              DW      DoLIT,-11,THROW
 ;   (          ( "ccc<)>" -- )                 \ CORE\r
 ;              Ignore following string up to next ) . A comment.\r
 ;\r
-;   : (        [CHAR] ) PARSE 2DROP ;\r
+;   : (        [CHAR] ) PARSE 2DROP ; IMMEDIATE\r
 \r
                $COLON  IMMED+1,'(',Paren,_FLINK\r
                DW      DoLIT,')',PARSE,TwoDROP,EXIT\r
@@ -3322,7 +3377,7 @@ TBODY1            DW      DoLIT,-31,THROW
 ;              Run-time ( i*x x1 -- | i*x ) ( R: j*x -- | j*x )\r
 ;              Conditional abort with an error message.\r
 ;\r
-;   : ABORT"    S" POSTPONE ROT\r
+;   : ABORT"    POSTPONE S" POSTPONE ROT\r
 ;              POSTPONE IF POSTPONE abort"msg POSTPONE 2!\r
 ;              -2 POSTPONE LITERAL POSTPONE THROW\r
 ;              POSTPONE ELSE POSTPONE 2DROP POSTPONE THEN\r
@@ -3361,7 +3416,7 @@ ABS1              DW      EXIT
 ;              control stack.\r
 ;\r
 ;   : BEGIN    xhere 0 bal+            \ dest type is 0\r
-;              ; COMPILE-ONLY IMMDEDIATE\r
+;              ; COMPILE-ONLY IMMEDIATE\r
 \r
                $COLON  IMMED+COMPO+5,'BEGIN',BEGIN,_FLINK\r
                DW      XHere,Zero,BalPlus,EXIT\r
@@ -3369,7 +3424,7 @@ ABS1              DW      EXIT
 ;   C,         ( char -- )                     \ CORE\r
 ;              Compile a character into data space.\r
 ;\r
-;   : C,       HERE C! char-size hereVar +! ;\r
+;   : C,       HERE C! [ char-size ] LITERAL hereVar +! ;\r
 \r
                $COLON  2,'C,',CComma,_FLINK\r
                DW      HERE,CStore,DoLIT,CHARR,HereVar,PlusStore,EXIT\r
@@ -3416,7 +3471,7 @@ DOES2             DW      DoLIT,Pipe,COMPILEComma
 ;              Put the location of new unresolved forward reference orig2\r
 ;              onto control-flow stack.\r
 ;\r
-;   : ELSE     POSTPONE AHEAD 2SWAP POSTPONE THEN ; COMPILE-ONLY IMMDEDIATE\r
+;   : ELSE     POSTPONE AHEAD 2SWAP POSTPONE THEN ; COMPILE-ONLY IMMEDIATE\r
 \r
                $COLON  IMMED+COMPO+4,'ELSE',ELSEE,_FLINK\r
                DW      AHEAD,TwoSWAP,THENN,EXIT\r
@@ -3479,21 +3534,11 @@ FIND1           DW      TwoDROP,Zero,EXIT
 ;   IMMEDIATE  ( -- )                          \ CORE\r
 ;              Make the most recent definition an immediate word.\r
 ;\r
-;   : IMMEDIATE   lastName [ =imed ] LITERAL OVER @ OR SWAP ! ;\r
+;   : IMMEDIATE   lastName [ =immed ] LITERAL OVER @ OR SWAP ! ;\r
 \r
                $COLON  9,'IMMEDIATE',IMMEDIATE,_FLINK\r
                DW      LastName,DoLIT,IMMED,OVER,Fetch,ORR,SWAP,Store,EXIT\r
 \r
-;   J          ( -- n|u ) ( R: loop-sys -- loop-sys )  \ CORE\r
-;              Push the index of next outer loop.\r
-;\r
-;   : J        rp@ [ 3 CELLS ] LITERAL + @\r
-;              rp@ [ 4 CELLS ] LITERAL + @  +  ; COMPILE-ONLY\r
-\r
-               $COLON  COMPO+1,'J',J,_FLINK\r
-               DW      RPFetch,DoLIT,3*CELLL,Plus,Fetch\r
-               DW      RPFetch,DoLIT,4*CELLL,Plus,Fetch,Plus,EXIT\r
-\r
 ;   LEAVE      ( -- ) ( R: loop-sys -- )       \ CORE\r
 ;              Terminate definite loop, DO|?DO  ... LOOP|+LOOP, immediately.\r
 ;\r
@@ -3614,7 +3659,7 @@ RECUR1            DW      Bal,OneMinus,TwoStar,OnePlus,PICK
 ;              Terminate a BEGIN-WHILE-REPEAT indefinite loop. Resolve\r
 ;              backward reference dest and forward reference orig.\r
 ;\r
-;   : REPEAT   AGAIN THEN ; COMPILE-ONLY IMMEDIATE\r
+;   : REPEAT   POSTPONE AGAIN  POSTPONE THEN ; COMPILE-ONLY IMMEDIATE\r
 \r
                $COLON  IMMED+COMPO+6,'REPEAT',REPEATT,_FLINK\r
                DW      AGAIN,THENN,EXIT\r
@@ -3624,7 +3669,7 @@ RECUR1            DW      Bal,OneMinus,TwoStar,OnePlus,PICK
 ;              Put 0 into the most significant bits vacated by the shift.\r
 ;\r
 ;   : RSHIFT   ?DUP IF\r
-;                      0 SWAP  cell-size-in-bits SWAP -\r
+;                      0 SWAP  [ cell-size-in-bits ] LITERAL SWAP -\r
 ;                      0 DO  2DUP D+  LOOP\r
 ;                      NIP\r
 ;                   THEN ;\r
@@ -3640,7 +3685,7 @@ RSHIFT2   DW      EXIT
 ;              Run-time ( -- c-addr2 u )\r
 ;              Compile a string literal. Return the string on execution.\r
 ;\r
-;   : SLITERAL DUP LITERAL POSTPONE doS"\r
+;   : SLITERAL DUP POSTPONE LITERAL POSTPONE doS"\r
 ;              CHARS xhere 2DUP + ALIGNED TOxhere\r
 ;              SWAP MOVE ; COMPILE-ONLY IMMEDIATE\r
 \r
@@ -3687,13 +3732,14 @@ SMREM4          DW      DoLIT,-11,THROW
 ;   SPACES     ( n -- )                        \ CORE\r
 ;              Send n spaces to the output device if n is greater than zero.\r
 ;\r
-;   : SPACES   ?DUP IF 0 DO SPACE LOOP THEN ;\r
+;   : SPACES   DUP 0 > IF 0 DO SPACE LOOP EXIT THEN  DROP;\r
 \r
                $COLON  6,'SPACES',SPACES,_FLINK\r
-               DW      QuestionDUP,ZBranch,SPACES2\r
+               DW      DUPP,Zero,GreaterThan,ZBranch,SPACES1\r
                DW      Zero,DoDO\r
-SPACES1        DW      SPACE,DoLOOP,SPACES1\r
-SPACES2        DW      EXIT\r
+SPACES2        DW      SPACE,DoLOOP,SPACES2\r
+               DW      EXIT\r
+SPACES1        DW      DROP,EXIT\r
 \r
 ;   TO         Interpretation: ( x "<spaces>name" -- ) \ CORE EXT\r
 ;              Compilation:    ( "<spaces>name" -- )\r
index 5af21e9..b36ac4b 100644 (file)
-+          ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2\9f\94áÐe\94a.\r
-                   1 2 +\r
-           Àá\9cñ ¯¡Ç¡¡e 1\89Á 2\9f\94áÐe \88t 3·i \94ᣡµA µ©\9f¥\94a.\r
--          ( \88t1 \88t2 -- \88t3 )\r
-           \88t1µA¬á \88t2\9fi ¨\85\94a.\r
-                   2 1 -\r
-           Àá\9cñ ¯¡Ç¡¡e 2µA¬á 1·i ¨\85 \88t 1·i \94ᣡµA µ©\9f¥\94a.\r
-*          ( \88t1 \88t2 -- \88t3 )\r
-           \88t1µA \88t2\9f\89³Ðe\94a.\r
-                   2 3 *\r
-           Àá\9cñ ¯¡Ç¡¡e \89³Ðe \88t 6·i \94ᣡµA µ©\9f¥\94a.\r
-/          ( \88t1 \88t2 -- \88t3 )\r
-           \88t1·i \88t2\9d¡ \90a\92\85\94a.\r
-                   6 2 /\r
-           Àá\9cñ ¯¡Ç¡¡e 6·i 2\9d¡ \90a\92\85 \88t 3·i \94ᣡµA µ©\9f¥\94a.\r
-MOD        ( \88t1 \88t2 -- \88t3 )\r
-           \88t1·i \88t2\9d¡ \90a\92\85 \90a á»¡\9f\8a\81Ðe\94a.\r
-                   8 3 MOD\r
-           Àá\9cñ ¯¡Ç¡¡e 8·i 3·a\9d¡ \90a\92\85 \90a á»¡ 2\9f\94ᣡµA µ©\9f¥\94a.\r
-\90a á»¡     ( \88t1 \88t2 -- \88t3 )\r
-           \88t1·i \88t2\9d¡ \90a\92\85 \90a á»¡\9f\8a\81Ðe\94a.\r
-                   8 3 \90a á»¡\r
-           Àá\9cñ ¯¡Ç¡¡e 8·i 3·a\9d¡ \90a\92\85 \90a á»¡ 2\9f\94ᣡµA µ©\9f¥\94a.\r
-.          ( \88t -- )\r
-           \94ᣡ·\81  \85 ¶á \88t·i ÑÁ¡eµA ¯³»¥®\81\9d¡ ¥¡·¥\94a.\r
-DUP        ( \88t -- \88\88t )\r
-           \94ᣡ·\81  \85 ¶á \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
-                   1 DUP\r
-           Àá\9cñ ¯¡Ç¡¡e 1·i \96\81 \88\81 \94ᣡµA µ©\9f¥\94a.\r
-¥A\8da       ( \88t -- \88\88t )\r
-           \94ᣡ·\81  \85 ¶á \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
-                   1 ¥A\8da\r
-           Àá\9cñ ¯¡Ç¡¡e 1·i \96\81 \88\81 \94ᣡµA µ©\9f¥\94a.\r
-OVER       ( \88t1 \88t2 -- \88t1 \88t2 \88t1 )\r
-           \94ᣡ·\81 \96\81 ¤å¼\81 \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
-                   1 2 OVER\r
-           Àá\9cñ ¯¡Ç¡¡e 1, 2, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
-\88å\90á       ( \88t1 \88t2 -- \88t1 \88t2 \88t1 )\r
-           "\88å\90á (¥A\8da)". \94ᣡ·\81 \96\81 ¤å¼\81 \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
-                   1 2 \88å\90á\r
-           Àá\9cñ ¯¡Ç¡¡e 1, 2, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
-SWAP       ( \88t1 \88t2 -- \88t2 \88t1 )\r
-           \94ᣡ·\81  \85 ¶á \96\81 \88\81 ¸a\9f¡\9fi ¤a\8e\85\94a.\r
-                   1 2 SWAP\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA\93e 1·¡, ¤a\9d¡ £»µA 2\88a ·¶\94a.\r
-¤a\8e¡       ( \88t1 \88t2 -- \88t2 \88t1 )\r
-           \94ᣡ·\81  \85 ¶á \96\81 \88\81 ¸a\9f¡\9fi ¤a\8e\85\94a.\r
-                   1 2 ¤a\8e¡\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA\93e 1·¡, ¤a\9d¡ £»µA 2\88a ·¶\94a.\r
-DROP       ( \88t1 -- )\r
-           \94ᣡ·\81  \85 ¶á \88t·i ¤á\9f¥\94a.\r
-¤á\9da       ( \88t1 -- )\r
-           \94ᣡ·\81  \85 ¶á \88t·i ¤á\9f¥\94a.\r
-ROT        ( \88t1 \88t2 \88t3 -- \88t2 \88t3 \88t1 )\r
-           \94ᣡ·\81  \85 ¶á ­A \88t·i \95©\9f¥\94a. ­A ¤å¼\81 \88t·i \8cá\90\81  \85 ¶áµA µ©\9f¥\94a.\r
-                   1 2 3 ROT\r
-           Àá\9cñ ¯¡Ç¡¡e 2, 3, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
-\95©\9da       ( \88t1 \88t2 \88t3 -- \88t2 \88t3 \88t1 )\r
-           \94ᣡ·\81  \85 ¶á ­A \88t·i \95©\9f¥\94a. ­A ¤å¼\81 \88t·i \8cá\90\81  \85 ¶áµA µ©\9f¥\94a.\r
-                   1 2 3 \95©\9da\r
-           Àá\9cñ ¯¡Ç¡¡e 2, 3, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
->R         ( \88t\94ᣡ: \88t -- ; \96A\95©·¡\94ᣡ:  -- \88t )\r
-           \88t\94ᣡ·\81 \88t·i \96A\95©·¡\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
-           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
-           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
->\96A        ( \88t\94ᣡ:  \88t -- ; \96A\95©·¡\94ᣡ:  -- \88t )\r
-           \88t\94ᣡ·\81 \88t·i \96A\95©·¡\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
-           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
-           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
-R>         ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- )\r
-           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
-           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
-           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
-\96A>        ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- )\r
-           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
-           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
-           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
-R@         ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- \88t )\r
-           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ ¥A\8f¥\94a.\r
-\96A@        ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- \88t )\r
-           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ ¥A\8f¥\94a.\r
-=          ( \88t1 \88t2 -- -1|0 )\r
-                   5 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¡\89¡\r
-                   6 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¥\94a.\r
-==         ( \88t1 \88t2 -- -1|0 )\r
-                   5 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¡\89¡\r
-                   6 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¥\94a.\r
->          ( \88t1 \88t2 -- -1|0 )\r
-                   5 6 >   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¡\89¡\r
-                   5 5 >   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¡\89¡\r
-                   6 5 >   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¥\94a.\r
-<          ( \88t1 \88t2 -- -1|0 )\r
-                   5 6 <   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¡\89¡\r
-                   5 5 <   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¡\89¡\r
-                   6 5 <   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¥\94a.\r
-AND        ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
-\90{Ðq\8dA     ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
-OR         ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡Ðs·i \94ᣡµA µ©\9f¥\94a.\r
-\90{´a¶\89\9cá    ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡Ðs·i \94ᣡµA µ©\9f¥\94a.\r
-XOR        ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe ¤\81Èa¸â \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
-\90{\98a\9d¡     ( \88t1 \88t2 -- \88t3 )\r
-           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe ¤\81Èa¸â \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
-WORDS      ( -- )\r
-           ³i ®\81 ·¶\93e ¯¡Ç± i\97i·i ÑÁ¡eµA ¥¡·¥\94a.\r
- iÍa       ( -- )\r
-           ³i ®\81 ·¶\93e ¯¡Ç± i\97i·i ÑÁ¡eµA ¥¡·¥\94a.\r
-.S         ( -- )\r
-           \88t\94ᣡ·\81 \88t\97i·i ¥¡·¥\94a.\r
-.\94ᣡ      ( -- )\r
-           \88t\94ᣡ·\81 \88t\97i·i ¥¡·¥\94a.\r
-BYE        ( -- )\r
-           \93\91·i \8f{\90\85\94a.\r
-\8f{         ( -- )\r
-           \93\91·i \8f{\90\85\94a.\r
-CR         ( -- )\r
-           ÑÁ¡eµA ¬\81 º\89·i  e\97e\94a.\r
-\94a·qº\89     ( -- )\r
-           ÑÁ¡eµA ¬\81 º\89·i  e\97e\94a.\r
-HELP       ( -- )\r
-           HELP \94a·q·\81 \90{ iµA \94\81Ðe \95¡¶\91 i·i Ìa·© 'HFORTH.HLP'µA¬á Àx´a ¥¡·¥\94a.\r
-                   HELP DUP\r
-           Àá\9cñ ¯¡Ç¡¡e '¥A\8da'\9fi ´á\98ý\89A ³a\93e»¡ ÑÁ¡eµA ¥¡·¥\94a.\r
-\95¡¶\91 i     ( -- )\r
-           HELP \94a·q·\81 \90{ iµA \94\81Ðe \95¡¶\91 i·i Ìa·© 'HFORTH.HLP'µA¬á Àx´a ¥¡·¥\94a.\r
-                   \95¡¶\91 i ¥A\8da\r
-           Àá\9cñ ¯¡Ç¡¡e '¥A\8da'\9fi ´á\98ý\89A ³a\93e»¡ ÑÁ¡eµA ¥¡·¥\94a.\r
-CLS        ( -- )\r
-           ÑÁ¡e·i »¡¶\85\94a.\r
-ÑÁ¡e»¡¶¡    ( -- )\r
-           ÑÁ¡e·i »¡¶\85\94a.\r
-CONSTANT    ( \88t -- )\r
-           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- \88t )\r
-           \94ᣡ·\81 \88t·i °á¬á '\8a\88·e\88t' \94a·qµA \90aµ¡\93e ·¡\9fq·a\9d¡ \8a\88·e\88t(¬w®\81)·i\r
-            e\97e\94a.\r
-                   5 CONSTANT FIVE\r
-           Àá\9cñ ¯¡Ç¡¡e 'FIVE'\9ca\93e ·¡\9f\81 \8a\88·e\88t·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
-                   FIVE\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA 5\9fi µ©\9f¥\94a.\r
-\8a\88·e\88t     ( \88t -- )\r
-           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- \88t )\r
-           \94ᣡ·\81 \88t·i °á¬á '\8a\88·e\88t' \94a·qµA \90aµ¡\93e ·¡\9fq·a\9d¡ \8a\88·e\88t(¬w®\81)·i\r
-            e\97e\94a.\r
-                   5 \8a\88·e\88\94a¬õ\r
-           Àá\9cñ ¯¡Ç¡¡e '\94a¬õ'·¡\9ca\93e ·¡\9f\81 \8a\88·e\88t·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
-                   \94a¬õ\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA 5\9fi µ©\9f¥\94a.\r
-VARIABLE    ( -- )\r
-           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- º\81­¡ )\r
-                   VARIABLE AGE\r
-           Àá\9cñ ¯¡Ç¡¡e 'AGE'\9ca\93e ·¡\9f\81 ¢\81\9fe\88t(¥e®\81)·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
-                   AGE\r
-           Àá\9cñ ¯¡Ç¡¡e 'AGE'·\81 \88\81 º\81­¡\9f\94ᣡ·\81  \85 ¶áµA µ©\9f¥\94a.\r
\81\9fe\88t     ( -- )\r
-           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- º\81­¡ )\r
-                   ¢\81\9fe\88\90a·¡\r
-           Àá\9cñ ¯¡Ç¡¡e '\90a·¡'\9ca\93e ·¡\9f\81 ¢\81\9fe\88t(¥e®\81)·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
-                   \90a·¡\r
-           Àá\9cñ ¯¡Ç¡¡e '\90a·¡'·\81 \88\81 º\81­¡\9f\94ᣡ·\81  \85 ¶áµA µ©\9f¥\94a.\r
-!          ( \88t º\81­¡ --  )\r
-           \94ᣡ·\81  \85 ¶áµA ·¶\93e º\81­¡µA \94ᣡ·\81 \96\81 ¤å¼\81 \88t·i °á\90ý\93e\94a.\r
-                   16 \90a·¡ !\r
-           Àá\9cñ ¯¡Ç¡¡e ¢\81\9fe\88t '\90a·¡'µA 16·i °á\90ý\93e\94a.\r
-@          ( º\81­¡ -- \88t )\r
-           \94ᣡ·\81  \85 ¶áµA ·¶\93e º\81­¡µA \97\88t·i \94ᣡµA µ©\9f¥\94a.\r
-                   \90a·¡ @\r
-           Àá\9cñ ¯¡Ç¡¡e ¢\81\9fe\88t '\90a·¡'·\81 \88t·i \94ᣡµA µ©\9f¥\94a.\r
-:          ( -- )\r
-           \90{ i »µ\8b¡\9fi ¯¡¸bÐe\94a.\r
-                   : ¬\81\90{ i   \90{ i1 \90{ i2 \90{ i3 ;\r
-           Àá\9cñ °á¬á ¬\81 \90{ i '¬\81\90{ i'·\81 ¸÷·\81\9fi ¯¡¸bÐe\94a.\r
-;          ( -- )\r
-           \90{ i »µ\8b¡\9f\8f{\90\85\94a.\r
-                   : ¬\81\90{ i   \90{ i1 \90{ i2 \90{ i3 ;\r
-           Àá\9cñ ³e\94a.\r
-(          ( -- )\r
-           ')' \90aµ© \98\81\8ca»¡ \8bi·i ¯¡Ç¡»¡ ´g\89¡ \88å\90á\9aå\94a. '('\95¡ Ða\90\81 \90{ i·¡£a\9d¡\r
-           \96áµA §¥Äe·¡ ¤e\97a¯¡ Ða\90a ·¡¬w ·¶´á´¡ Ðe\94a.\r
-                   ( ·¡\88õ·e \94õ¦\9b·± i·³\93¡\94a.)\r
-           Àá\9cñ ³e\94a. º\81·\81: '('\93e ¯¡Ç± i·¡»¡ e ')'\93e ¯¡Ç± i·¡ ´a\93¡\94a.\r
-."          ( -- )\r
-           '"'·¡ \90aµ© \98\81\8ca»¡·\81 \8bi·i ÑÁ¡eµA ¥¡·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a.\r
-                   : ¯¡Ðñ   ." ·¡ \8bi·¡ ÑÁ¡eµA ¥¡µa»³\93¡\94a." ;\r
-           Àá\9cñ ¯¡Ç¥ \94a·q\r
-                   ¯¡Ðñ\r
-           ·¡\9ca\89¡ ¯¡Ç¡¡e ÑÁ¡eµA '·¡ \8bi·¡ ÑÁ¡eµA ¥¡µa»³\93¡\94a.'\9fi ¥¡·¥\94a.\r
-IF         ¯¡Åa»© \98\81: ( \88t -- )\r
-           'IF ... THEN'\90a 'IF ... ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
-           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a. 'IF ... THEN'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á\r
-           \88t·¡ 0·¡ ´a\93© \98\81 e 'IF ... THEN' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a. 'IF ...\r
-           ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e 'IF ...\r
-           THEN' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¡\89¡, \88t·¡ 0·¡¡e 'ELSE ... THEN' ¬a·¡·\81\r
-           \90{ i·¡ ¯¡Åa»¥\94a.\r
-                   : ?DUP   DUP IF DUP THEN ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   3 ?DUP\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
-                   0 ?DUP\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 0·i 1 \88\81 µ©\9f¥\94a.\r
-¡e         ¯¡Åa»© \98\81: ( \88t -- )\r
-           '¡e  ... \9ca'\90a '¡e ... ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
-           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a. '¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á\r
-           \88t·¡ 0·¡ ´a\93© \98\81 e '¡e ... \9ca' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a. '¡e ...\r
-           ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e '¡e\r
-           ... \9ca' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¡\89¡, \88t·¡ 0·¡¡e '´a\93¡¡e ... \9ca' ¬a·¡·\81\r
-           \90{ i·¡ ¯¡Åa»¥\94a.\r
-                   : ?¥A\8da   ¥A\8da ¡e ¥A\8d\9ca ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   3 ?¥A\8da\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
-                   0 ?¥A\8da\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 0·i 1 \88\81 µ©\9f¥\94a.\r
-ELSE       ¯¡Åa»© \98\81: ( -- )\r
-           'IF ... ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a. \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e 'IF ... ELSE' ¬a·¡·\81 \90{ i·¡\r
-           ¯¡Åa»¡\89¡, \88t·¡ 0·¡¡e 'ELSE ... THEN' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a.\r
-                   : TEST   IF DUP ELSE DROP THEN ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   3 1 TEST\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
-                   3 0 TEST\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA ´a¢\81 \88õ\95¡ µ©\9f¡»¡ ´g\93e\94a.\r
-´a\93¡¡e     ¯¡Åa»© \98\81: ( -- )\r
-           '¡e ... ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a. \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e '¡e ... ´a\93¡¡e' ¬a·¡·\81 \90{ i·¡\r
-           ¯¡Åa»¡\89¡,  \88t·¡ 0·¡¡e '´a\93¡¡e ... \9ca' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a.\r
-                   : ¯¡Ðñ   ¡e ¥A\8da ´a\93¡¡e ¤á\9d\9ca ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   3 1 ¯¡Ðñ\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
-                   3 0 ¯¡Ðñ\r
-           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA ´a¢\81 \88õ\95¡ µ©\9f¡»¡ ´g\93e\94a.\r
-THEN       ¯¡Åa»© \98\81: ( -- )\r
-           'IF ... THEN'\90a 'IF ... ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
-           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-\9ca         ¯¡Åa»© \98\81: ( -- )\r
-           '¡e ... \9ca'\90a '¡e ... ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
-           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-ENDIF      ¯¡Åa»© \98\81: ( -- )\r
-           'IF ... ENDIF'\90a 'IF ... ELSE ... ENDIF'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
-           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-BEGIN      ¯¡Åa»© \98\81: ( -- )\r
-           'BEGIN ... UNTIL'\90a 'BEGIN ... WHILE ... REPEAT'·\81 ¼b·a\9d¡ ³aµa\r
-           \88á\97s¯¡Ç±·\81 Àá·q·i Îa¯¡Ðe\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-·¡¹A¦\81Èá    ¯¡Åa»© \98\81: ( -- )\r
-           '·¡¹A¦\81Èá  ... \8ca»¡'\90a '·¡¹A¦\81Èá ... \95·´e... \88á\97\81\81 ¼b·a\9d¡ ³aµa\r
-           \88á\97s¯¡Ç±·\81 Àá·q·i Îa¯¡Ðe\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-UNTIL      ¯¡Åa»© \98\81: ( \88t -- )\r
-           'BEGIN ... UNTIL'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-           '\88t'·¡ 0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a 'UNTIL' \94a·q·\81 \90{ i·¡ ¯¡Åa»¡\89¡\r
-           '\88t'·¡ 0·¡¡e 'BEGIN ... UNTIL' ¬a·¡·\81 \90{ i·i \88á\97s¯¡Ç¥\94a.\r
-               : COUNTDOWN   BEGIN DUP . 1 - DUP 0 = UNTIL ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-               5 COUNTDOWN\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
-\8ca»¡       ¯¡Åa»© \98\81: ( \88t -- )\r
-           '·¡¹A¦\81Èá ... \8ca»¡'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
-           '\88t'·¡ 0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a '\8ca»¡' \94a·q·\81 \90{ i·¡ ¯¡Åa»¡\89¡\r
-           '\88t'·¡ 0·¡¡e '·¡¹A¦\81Èá ... \8ca»¡' ¬a·¡·\81 \90{ i·i \88á\97s¯¡Ç¥\94a.\r
-               : ¦\81Èá.´a\9c\81\9d¡.­A   ·¡¹A¦\81Èá ¥A\8da . 1 - ¥A\8da 0 = \8ca»¡ ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-               5 ¦\81Èá.´a\9c\81\9d¡.­A\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
-WHILE      ¯¡Åa»© \98\81: ( \88t -- )\r
-           'BEGIN ... WHILE ... REPEAT'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
-           ³i ®\81 ·¶\94a. '\88t'·¡  0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·¡ \89\81­¢\96A´á 'WHILE' \94a·q·\81\r
-           \90{ i·¡ ¯¡Åa»¡\89¡ '\88t'·¡ 0·¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a 'REPEAT' \94a·q·\81\r
-           \90{ i·¡ ¯¡Åa»¥\94a.\r
-               : COUNTDOWN   BEGIN DUP WHILE DUP . 1 - REPEAT ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-               5 COUNTDOWN\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
-\95·´e       ¯¡Åa»© \98\81: ( \88t -- )\r
-           '·¡¹A¦\81Èá ...  \95·´e... \88á\97\81\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
-           ³i ®\81 ·¶\94a. '\88t'·¡  0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·¡ \89\81­¢\96A´á '\95·´e' \94a·q·\81\r
-           \90{ i·¡ ¯¡Åa»¡\89¡ '\88t'·¡ 0·¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a '\88á\97\81\94a·q·\81\r
-           \90{ i·¡ ¯¡Åa»¥\94a.\r
-               : ¦\81Èá.´a\9c\81\9d¡.­A   ·¡¹A¦\81Èá ¥A\8d\95·´e ¥A\8da . 1 - \88á\97\81 ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-               5 ¦\81Èá.´a\9c\81\9d¡.­A\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
-REPEAT     ¯¡Åa»© \98\81: ( -- )\r
-           'BEGIN ... WHILE ... REPEAT'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
-           ³i ®\81 ·¶\94a. 'BEGIN' \94a·q·a\9d¡ \88á\97s¯¡Ç±·i \89\81­¢Ðe\94a.\r
-\88á\97\81     ¯¡Åa»© \98\81: ( -- )\r
-           '·¡¹A¦\81Èá ...  \95·´e... \88á\97\81\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
-           ³i ®\81 ·¶\94a. '·¡¹A¦\81Èá' \94a·q·a\9d¡ \88á\97s¯¡Ç±·i \89\81­¢Ðe\94a.\r
-DO         ¯¡Åa»© \98\81: ( \88t1 \88t2 -- )\r
-           ¤e\97a¯¡ 'DO ... LOOP'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ 'DO ... LOOP' ¬a·¡·\81\r
-           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
-                   : 5STARS   5 0 DO ." *" LOOP ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   5STARS\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '*****'\88a Îa¯¡\96E\94a.\r
\91         ¯¡Åa»© \98\81: ( \88t1 \88t2 -- )\r
-           ¤e\97a¯¡ ' \91 ... \95©´a'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ ' \91 ... \95©´a' ¬a·¡·\81\r
-           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
-                   : \94a¬õ¥i   5 0  \91 ." *" \95©´a ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   \94a¬õ¥i\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '*****'\88a Îa¯¡\96E\94a.\r
-LOOP       ¯¡Åa»© \98\81: ( -- )\r
-           ¤e\97a¯¡ 'DO ... LOOP'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ 'DO ... LOOP' ¬a·¡·\81\r
-           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
-\95©´a       ¯¡Åa»© \98\81: ( -- )\r
-           ¤e\97a¯¡ ' \91 ... \95©´a'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
-           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ ' \91 ... \95©´a' ¬a·¡·\81\r
-           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
-I          ¯¡Åa»© \98\81: ( -- \88t )\r
-            \91\95©·¡ \88a\9f¡Ç±®\81\9d¡ ¤e\97a¯¡ 'DO ... LOOP' ´eµA¬á ³e\94a.\r
-           '\88t2 \88t1 DO I LOOP'µA¬á '\88a'\93e Àa\9d\81\9d¡ '\88t1'µA¬á '\88t2'-1 \8ca»¡·\81\r
-           \88t\97i·i \94ᣡµA µ©\9f¥\94a.\r
-                   : COUNT   0 DO I . LOOP ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   5 COUNT\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '0 1 2 3 4'\9fi ¥¡·¥\94a.\r
-\88a         ¯¡Åa»© \98\81: ( -- \88t )\r
-           "\88a(\9f¡Ç±®\81)."  \91\95©·¡ \88a\9f¡Ç±®\81\9d¡ ¤e\97a¯¡ ' \91 ... \95©´a' ´eµA¬á ³e\94a.\r
-           '\88t2 \88t1  \91 \88\95©´a'µA¬á '\88a'\93e Àa\9d\81\9d¡ '\88t1'µA¬á '\88t2'-1 \8ca»¡·\81\r
-           \88t\97i·i \94ᣡµA µ©\9f¥\94a.\r
-                   : ¤å.­A\8b¡   0  \91 \88a . \95©´a ;\r
-           Àá\9cñ \90{ i·i »µ\89¡\r
-                   5 ¤å.­A\8b¡\r
-           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '0 1 2 3 4'\9fi ¥¡·¥\94a.\r
-IMMEDIATE   ( -- )\r
-           ¤w\8bq »¡·e  i·i  i»µ\8b¡ ¬wÈ\81µA¬á\95¡ ¯©Ð\97\96A\93e '¤a\9d¡ i'\9d¡  e\97e\94a.\r
-¤a\9d¡ i     ( -- )\r
-           ¤w\8bq »¡·e  i·i  i»µ\8b¡ ¬wÈ\81µA¬á\95¡ ¯©Ð\97\96A\93e '¤a\9d¡ i'\9d¡  e\97e\94a.\r
-'           ( -- º\81­¡ )\r
-           "'" \94a·qµA \90aµ¡\93\90{ i·\81 º\81­¡\9f\94ᣡµA \90q\8b¥\94a.\r
-\88{·e i     ( º\81­¡ -- )\r
-           '\88{·e i' \94a·qµA \90aµ¡\93e ·¡\9fq·a\9d¡, \94ᣡµA º\81­¡\88a ·¶\93\90{ i\89Á \99¢\88{·e\r
-           ·©·i Ða\93\90{ i·i  e\97e\94a.\r
-                   ' DUP  \88{·e i  ¥A\8da\r
-           Àá\9cñ ¯¡Ç¡¡e DUP µÁ \88{·e ·©·i Ða\93\90{ i '¥A\8da'\9fi  e\97e\94a.\r
\89ÑÁ¡e     ( º\89®\81 -- )\r
-           ´a\9c\81¬á¦\81Èá \8bi¸a\88a ¥¡·© º\89 ®\81\9fi ¸÷Ðe\94a.\r
-sin*       ( \8b©·¡ \88b\95¡ -- \8b©·¡*sin[\88b\95¡] )\r
-           \8b©·¡µÁ \88b\95¡\9d¡¦\81Èá \8b©·¡µA ¬q\88b§¡\9f\89³Ðe \88t·i \89\81¬eÐe\94a.\r
-cos*       ( \8b©·¡ \88b\95¡ -- \8b©·¡*cos[\88b\95¡] )\r
-           \8b©·¡µÁ \88b\95¡\9d¡¦\81Èá \8b©·¡µA ¬q\88b§¡\9f\89³Ðe \88t·i \89\81¬eÐe\94a.\r
-\9d¡.\8ba´á     ( x y -- )\r
-           »¡\8bq ¸a\9f¡µA¬á \88á¦\82¹ÁÎa (x,y)\9d¡ ¬å·i \8bu\93e\94a. ÑÁ¡eµA \8bq·i \8bu\93\88a¸w\r
-           \8b¡¥¥¸â·¥ \90{ i·¡\94a. \88á¦\82 ¶\91»¢·± \90{ i '¹A¸a\9f¡\9d¡'µÁ ' eÇq.\88a'µA\r
-           ³a·¥\94a.\r
-\88á¦\82¥¡µa    ( -- )\r
-           ÑÁ¡eµA \88á¦\82·¡ ·¶·a¡e »¡¶\81\89¡ ´ô·a¡e ¥¡·¥\94a.\r
-¤wз       ( -- º\81­¡ )\r
-           ¢\81\9fe\88t '¤wз'. \88á¦\82·\81 ¤wз·¡ \94q\89a ·¶\94a.\r
-\88a\9d¡¶áá    ( -- º\81­¡ )\r
-           ¢\81\9fe\88t '\88a\9d¡¶áá'. \88á¦\82·\81 x ¹ÁÎa\88\94q\89a ·¶\94a.\r
-­A\9d¡¶áá    ( -- º\81­¡ )\r
-           ¢\81\9fe\88t '\88a\9d¡¶áá'. \88á¦\82·\81 y ¹ÁÎa\88\94q\89a ·¶\94a.\r
- eÇq.\88a     ( \88a\9d¡\88á\9f¡ ­A\9d¡\88á\9f¡ -- )\r
-           \88á¦\82·¡ »¡\8bq ¹ÁÎa (x,y)µA¬á (x+\88a\9d¡\88á\9f¡, y+­A\9d¡\88á\9f¡)\9d¡ ¶\91»¢·¥\94a.\r
-           \90{ i '´|·a\9d¡'µÁ  '\96á\9d¡'µA ³a·¥\94a.\r
-__µ¡\9fe½¢.ÑÉ\8d© ( \88á\9f¡ ÒU®\81 -- )\r
-           \88á\9f¡ eÇq \88a\89¡ 10 \95¡ µ¡\9fe½¢·a\9d¡ \95¡\93\88õ·i ÒU®\81 eÇq \96\89·¡Ðe\94a.\r
-           \90{ i 'µ¡\9fe½¢.ÑÉ\8d©'µA ³a·¥\94a.\r
-__¶E½¢.ÑÉ\8d© ( \88á\9f¡ ÒU®\81 -- )\r
-           \88á\9f¡ eÇq \88a\89¡ 10 \95¡ ¶E½¢·a\9d¡ \95¡\93\88õ·i ÒU®\81 eÇq \96\89·¡Ðe\94a.\r
-           \90{ i '¶E½¢.ÑÉ\8d©'µA ³a·¥\94a.\r
-\8a\8a\89A       ( -- )\r
-           \88á¦\82·¡ »¡\90a\88e ¸aÂá\9f\8a\8a\89\8ba\9f¥\94a.\r
-\88a\93i\89A     ( -- )\r
-           \88á¦\82·¡ »¡\90a\88e ¸aÂá\9f\88a\93i\89\8ba\9f¥\94a.\r
\95\97i´á     ( -- )\r
-           \88á¦\82·¡ »¡\90a\88e ¸aÂá\9f\90q\8b¡»¡ ´g\93e\94a.\r
\95\90\81\9da     ( -- )\r
-           \88á¦\82·¡ º\89·i \8ba·a¡a \88e\94a.\r
-ÑÁ¡e»¡¶¡    ( -- )\r
-           \88á¦\82·i ¹A¸a\9f¡\9d¡ ¥¡\90\81\89¡ ÑÁ¡e·i »¡¶\85\94a.\r
-½¡\88\85ÑÁ¡e    ( -- )\r
-           \8bi¸a\9fi ´a\9c\81 8 º\89µA e ¥¡·¥\94a.\r
-µ¥ÑÁ¡e     ( -- )\r
-           \8bi¸a\9fi ¸åÁA ÑÁ¡eµA ¥¡·¥\94a.\r
-¹A¸a\9f¡\9d¡    ( -- )\r
-           \88á¦\82·\81  á\9f¡\9fi ¶á½¢·a\9d¡ Ð\81¬á ÑÁ¡e \88\85\95A\9d¡ ¥¡\90\81\89¡ ÑÁ¡e·i »¡¶\85\94a.\r
-\95¡.µ¡\9fe½¢   ( \88b\95¡ -- )\r
-           \88á¦\82·\81 ¤wз·i \88b\95¡ eÇq µ¡\9fe½¢·a\9d¡ \95©\9f¥\94a.\r
-\95¡.¶E½¢     ( \88b\95¡ -- )\r
-           \88á¦\82·\81 ¤wз·i \88b\95¡ eÇq ¶E½¢·a\9d¡ \95©\9f¥\94a.\r
-´|·a\9d¡     ( \88á\9f¡ -- )\r
-           \88á¦\82·¡ \88á\9f¡ eÇq ´|·a\9d¡ \88e\94a.\r
-\96á\9d¡       ( \88á\9f¡ -- )\r
-           \88á¦\82·¡ \88á\9f¡ eÇq \96á\9d¡ \88e\94a.\r
-µ¡\9fe½¢.ÑÉ\8d© ( ¤e»¡\9f\88b\95¡ -- )\r
-           º\81´á»¥ ¤e»¡\9fq\89Á \88b\95¡\9d¡ µ¡\9fe½¢·a\9d¡ ÑÉ\8d©·i \8ba\9f¥\94a.\r
-µ¡\9fe½¢.¶¥   ( ¤e»¡\9fq -- )\r
-           º\81´á»¥ ¤e»¡\9fq·a\9d¡ µ¡\9fe½¢·a\9d¡ \95·\8ba\9ca£¡\9f\8ba\9f¥\94a.\r
-¶E½¢.ÑÉ\8d©   ( ¤e»¡\9f\88b\95¡ -- )\r
-           º\81´á»¥ ¤e»¡\9fq\89Á \88b\95¡\9d¡ ¶E½¢·a\9d¡ ÑÉ\8d©·i \8ba\9f¥\94a.\r
-¶E½¢.¶¥     ( ¤e»¡\9fq -- )\r
-           º\81´á»¥ ¤e»¡\9fq·a\9d¡ ¶E½¢·a\9d¡ \95·\8ba\9ca£¡\9f\8ba\9f¥\94a.\r
-\91A¡¡       ( Ça\8b¡ --\r
-           º\81´á»¥ Ça\8b¡·\81 \91A¡¡\9f\8ba\9f¥\94a.\r
-\89sÃ¥\91A¡¡    ( -- )\r
-           \88b ¥e·\81 \8b©·¡\88a 100, 200, 300, 400 ·¥ \91A¡¡\9f\89sÁa \8ba\9f¥\94a.\r
-\94a·¡´a¡¥\97a  ( -- )\r
-           \94a·¡´a¡¥\97a ¡¡´··i \8ba\9f¥\94a.\r
-\8bµ¤i       ( Ça\8b¡ -- )\r
-           \8bµ¤i ¡¡´··i \8ba\9f¥\94a.\r
-µa¬õ\8bµ¤i    ( Ça\8b¡ -- )\r
-           60 \95¡³¢ \95©´a\88a¡a \8bµ¤i 6 \88\81\9f\8ba\9f¥\94a.\r
-¤a\9cq\88\81§¡    ( -- )\r
-           ¤a\9cq\88\81§¡ ¡¡´··i \8ba\9f¥\94a.\r
-\8d¹·¼       ( Ça\8b¡ -- )\r
-           \8d¹·¼ ¡¡´··i \8ba\9f¥\94a.\r
-\8d¹         ( Ça\8b¡ -- )\r
-           \8d¹·¼ 8 \88\81·¥ \8d¹·i \8ba\9f¥\94a.\r
-\94a\9fe\8d¹·¼    ( Ça\8b¡ -- )\r
-           \94a\9fe ¡¡´··\81 \8d¹·¼·i \8ba\9f¥\94a.\r
-\94a\9fe\8d¹     ( Ça\8b¡ -- )\r
-           \8d¹·¼ 6 \88\81·¥ \8d¹·i \8ba\9f¥\94a.\r
\95¬i       ( Ça\8b¡ -- )\r
-           ¢\89\89i ¡¡´··i \8ba\9f¥\94a.\r
\81         ( Ça\8b¡ -- )\r
-           Ð\81 ¡¡´··i \8ba\9f¥\94a.\r
-\88bÑw       ( Ça\8b¡ ¡¡¬á\9f¡®\81 -- )\r
-           ¸÷\94a\88bÑw·i \8ba\9f¥\94a.\r
-¥i         ( ¥e·\81\81 ÒU®\81 -- )\r
-           ¥i ¡¡´··i \8ba\9f¥\94a.\r
-\94a\88bÑw     ( Ça\8b¡ \88b\95¡ -- )\r
-           Ça\8b¡µÁ \88b\95¡µA \98a\9ca µa\9cá ¡¡´··\81 \94a\88bÑw\89Á ¥i ¡¡´··i \8ba\9f¥\94a.\r
-\94a\88bÑw¸a\9cw5 ( -- )\r
-           \90{ i '\94a\88bÑw'·i ·¡¶wÐe ¸a\9cw\r
-\94a\88bÑw¸a\9cw4 ( -- )\r
-           \90{ i '\94a\88bÑw'·i ·¡¶wÐe \94a\9fe ¸a\9cw\r
-\94a\88bÑw¸a\9cw12 ( -- )\r
-           \90{ i '\94a\88bÑw'·i ·¡¶wÐe \99¡ \94a\9fe ¸a\9cw\r
-\90\81       ( \88a»¡\88b\95¡ \88a»¡\8b©·¡ \88a»¡Ã¡\8b¡®\81 -- )\r
-           ¯a¯a\9d¡\9f\96\89\9cá¬á (recursive call) \90\81 ¡¡´··i \8ba\9f¥\94a.\r
-§¡\93iÇa\8b¡    ( -- º\81­¡ )\r
-           \90{ i '¶w'µA¬á ¬a¶wÐa\93e ¢\81\9fe\88t\r
-¶w         ( \90a·¡ -- )\r
-           ¯a¯a\9d¡\9f\96\89\9cá¬á ¶w\8ba\9f±(dragon curve)·i \8ba\9f¥\94a.\r
+\\r
+\ HTURTLE.F\r
+\ Turtle graphics package for hForth\r
+\ Words names are in Korean.\r
+\\r
+\ HTURTLE.EXE\93e HF86EXE.EXE\9fi ¯¡¸bÐe Ò\81 \94a·q ®\85¬á\9d¡ Í¡¯a Ìa·©\97i·i µ©\9da¬á\r
+\  e\97\88õ·³\93¡\94a.\r
+\\r
+\       << OPTIONAL.F\r
+\       << ASM8086.F\r
+\       << COREEXT.F\r
+\       << MSDOS.F\r
+\       BL PARSE MULTI.F    INCLUDED\r
+\       BL PARSE HIOMULT2.F INCLUDED\r
+\       BL PARSE HTURTLE.F  INCLUDED\r
+\       SAVE-SYSTEM-AS HTURTLE.EXE\r
+\\r
+\ 1996. 2. 21. \ Wonyong Koh\r
+\r
+BASE @\r
+GET-ORDER  GET-CURRENT\r
+Ðe\8bi·³Â\89\9db-WORDLIST GET-ORDER 1 + SET-ORDER\r
+\r
+MARKER ~TURTLE\r
+\r
+DECIMAL\r
+CREATE sin16384\r
+     0 ,    286 ,    572 ,    857 ,   1143 ,   1428 ,  1713 ,   1997 ,   2280 ,   2563 ,\r
+  2845 ,   3126 ,   3406 ,   3686 ,   3964 ,   4240 ,  4516 ,   4790 ,   5063 ,   5334 ,\r
+  5604 ,   5872 ,   6138 ,   6402 ,   6664 ,   6924 ,  7182 ,   7438 ,   7692 ,   7943 ,\r
+  8192 ,   8438 ,   8682 ,   8923 ,   9162 ,   9397 ,  9630 ,   9860 ,  10087 ,  10311 ,\r
+ 10531 ,  10749 ,  10963 ,  11174 ,  11381 ,  11585 ,  11786 , 11982 ,  12176 ,  12365 ,\r
+ 12551 ,  12733 ,  12911 ,  13085 ,  13255 ,  13421 ,  13583 , 13741 ,  13894 ,  14044 ,\r
+ 14189 ,  14330 ,  14466 ,  14598 ,  14726 ,  14849 ,  14968 , 15082 ,  15191 ,  15296 ,\r
+ 15396 ,  15491 ,  15582 ,  15668 ,  15749 ,  15826 ,  15897 , 15964 ,  16026 ,  16083 ,\r
+ 16135 ,  16182 ,  16225 ,  16262 ,  16294 ,  16322 ,  16344 , 16362 ,  16374 ,  16382 ,\r
+ 16384 ,  16382 ,  16374 ,  16362 ,  16344 ,  16322 ,  16294 , 16262 ,  16225 ,  16182 ,\r
+ 16135 ,  16083 ,  16026 ,  15964 ,  15897 ,  15826 ,  15749 , 15668 ,  15582 ,  15491 ,\r
+ 15396 ,  15296 ,  15191 ,  15082 ,  14968 ,  14849 ,  14726 , 14598 ,  14466 ,  14330 ,\r
+ 14189 ,  14044 ,  13894 ,  13741 ,  13583 ,  13421 ,  13255 , 13085 ,  12911 ,  12733 ,\r
+ 12551 ,  12365 ,  12176 ,  11982 ,  11786 ,  11585 ,  11381 , 11174 ,  10963 ,  10749 ,\r
+ 10531 ,  10311 ,  10087 ,   9860 ,   9630 ,   9397 ,  9162 ,   8923 ,   8682 ,   8438 ,\r
+  8192 ,   7943 ,   7692 ,   7438 ,   7182 ,   6924 ,  6664 ,   6402 ,   6138 ,   5872 ,\r
+  5604 ,   5334 ,   5063 ,   4790 ,   4516 ,   4240 ,  3964 ,   3686 ,   3406 ,   3126 ,\r
+  2845 ,   2563 ,   2280 ,   1997 ,   1713 ,   1428 ,  1143 ,    857 ,    572 ,    286 ,\r
+     0 ,   -286 ,   -572 ,   -857 ,  -1143 ,  -1428 ,  -1713 , -1997 ,  -2280 ,  -2563 ,\r
+ -2845 ,  -3126 ,  -3406 ,  -3686 ,  -3964 ,  -4240 ,  -4516 , -4790 ,  -5063 ,  -5334 ,\r
+ -5604 ,  -5872 ,  -6138 ,  -6402 ,  -6664 ,  -6924 ,  -7182 , -7438 ,  -7692 ,  -7943 ,\r
+ -8192 ,  -8438 ,  -8682 ,  -8923 ,  -9162 ,  -9397 ,  -9630 , -9860 , -10087 , -10311 ,\r
+-10531 , -10749 , -10963 , -11174 , -11381 , -11585 , -11786 , -11982 , -12176 , -12365 ,\r
+-12551 , -12733 , -12911 , -13085 , -13255 , -13421 , -13583 , -13741 , -13894 , -14044 ,\r
+-14189 , -14330 , -14466 , -14598 , -14726 , -14849 , -14968 , -15082 , -15191 , -15296 ,\r
+-15396 , -15491 , -15582 , -15668 , -15749 , -15826 , -15897 , -15964 , -16026 , -16083 ,\r
+-16135 , -16182 , -16225 , -16262 , -16294 , -16322 , -16344 , -16362 , -16374 , -16382 ,\r
+-16384 , -16382 , -16374 , -16362 , -16344 , -16322 , -16294 , -16262 , -16225 , -16182 ,\r
+-16135 , -16083 , -16026 , -15964 , -15897 , -15826 , -15749 , -15668 , -15582 , -15491 ,\r
+-15396 , -15296 , -15191 , -15082 , -14968 , -14849 , -14726 , -14598 , -14466 , -14330 ,\r
+-14189 , -14044 , -13894 , -13741 , -13583 , -13421 , -13255 , -13085 , -12911 , -12733 ,\r
+-12551 , -12365 , -12176 , -11982 , -11786 , -11585 , -11381 , -11174 , -10963 , -10749 ,\r
+-10531 , -10311 , -10087 ,  -9860 ,  -9630 ,  -9397 ,  -9162 , -8923 ,  -8682 ,  -8438 ,\r
+ -8192 ,  -7943 ,  -7692 ,  -7438 ,  -7182 ,  -6924 ,  -6664 , -6402 ,  -6138 ,  -5872 ,\r
+ -5604 ,  -5334 ,  -5063 ,  -4790 ,  -4516 ,  -4240 ,  -3964 , -3686 ,  -3406 ,  -3126 ,\r
+ -2845 ,  -2563 ,  -2280 ,  -1997 ,  -1713 ,  -1428 ,  -1143 ,  -857 ,   -572 ,   -286 ,\r
+    -0 ,    286 ,    572 ,    857 ,   1143 ,   1428 ,  1713 ,   1997 ,   2280 ,   2563 ,\r
+  2845 ,   3126 ,   3406 ,   3686 ,   3964 ,   4240 ,  4516 ,   4790 ,   5063 ,   5334 ,\r
+  5604 ,   5872 ,   6138 ,   6402 ,   6664 ,   6924 ,  7182 ,   7438 ,   7692 ,   7943 ,\r
+  8192 ,   8438 ,   8682 ,   8923 ,   9162 ,   9397 ,  9630 ,   9860 ,  10087 ,  10311 ,\r
+ 10531 ,  10749 ,  10963 ,  11174 ,  11381 ,  11585 ,  11786 , 11982 ,  12176 ,  12365 ,\r
+ 12551 ,  12733 ,  12911 ,  13085 ,  13255 ,  13421 ,  13583 , 13741 ,  13894 ,  14044 ,\r
+ 14189 ,  14330 ,  14466 ,  14598 ,  14726 ,  14849 ,  14968 , 15082 ,  15191 ,  15296 ,\r
+ 15396 ,  15491 ,  15582 ,  15668 ,  15749 ,  15826 ,  15897 , 15964 ,  16026 ,  16083 ,\r
+ 16135 ,  16182 ,  16225 ,  16262 ,  16294 ,  16322 ,  16344 , 16362 ,  16374 ,  16382 ,\r
+ 16384 ,  16382 ,  16374 ,  16362 ,  16344 ,  16322 ,  16294 , 16262 ,  16225 ,  16182 ,\r
+ 16135 ,  16083 ,  16026 ,  15964 ,  15897 ,  15826 ,  15749 , 15668 ,  15582 ,  15491 ,\r
+ 15396 ,  15296 ,  15191 ,  15082 ,  14968 ,  14849 ,  14726 , 14598 ,  14466 ,  14330 ,\r
+ 14189 ,  14044 ,  13894 ,  13741 ,  13583 ,  13421 ,  13255 , 13085 ,  12911 ,  12733 ,\r
+ 12551 ,  12365 ,  12176 ,  11982 ,  11786 ,  11585 ,  11381 , 11174 ,  10963 ,  10749 ,\r
+ 10531 ,  10311 ,  10087 ,   9860 ,   9630 ,   9397 ,  9162 ,   8923 ,   8682 ,   8438 ,\r
+  8192 ,   7943 ,   7692 ,   7438 ,   7182 ,   6924 ,  6664 ,   6402 ,   6138 ,   5872 ,\r
+  5604 ,   5334 ,   5063 ,   4790 ,   4516 ,   4240 ,  3964 ,   3686 ,   3406 ,   3126 ,\r
+  2845 ,   2563 ,   2280 ,   1997 ,   1713 ,   1428 ,  1143 ,    857 ,    572 ,    286 ,\r
+     0 ,   -286 ,   -572 ,   -857 ,  -1143 ,  -1428 ,  -1713 , -1997 ,  -2280 ,  -2563 ,\r
+ -2845 ,  -3126 ,  -3406 ,  -3686 ,  -3964 ,  -4240 ,  -4516 , -4790 ,  -5063 ,  -5334 ,\r
+ -5604 ,  -5872 ,  -6138 ,  -6402 ,  -6664 ,  -6924 ,  -7182 , -7438 ,  -7692 ,  -7943 ,\r
+ -8192 ,  -8438 ,  -8682 ,  -8923 ,  -9162 ,  -9397 ,  -9630 , -9860 , -10087 , -10311 ,\r
+-10531 , -10749 , -10963 , -11174 , -11381 , -11585 , -11786 , -11982 , -12176 , -12365 ,\r
+-12551 , -12733 , -12911 , -13085 , -13255 , -13421 , -13583 , -13741 , -13894 , -14044 ,\r
+-14189 , -14330 , -14466 , -14598 , -14726 , -14849 , -14968 , -15082 , -15191 , -15296 ,\r
+-15396 , -15491 , -15582 , -15668 , -15749 , -15826 , -15897 , -15964 , -16026 , -16083 ,\r
+-16135 , -16182 , -16225 , -16262 , -16294 , -16322 , -16344 , -16362 , -16374 , -16382 ,\r
+-16384 , -16382 , -16374 , -16362 , -16344 , -16322 , -16294 , -16262 , -16225 , -16182 ,\r
+-16135 , -16083 , -16026 , -15964 , -15897 , -15826 , -15749 , -15668 , -15582 , -15491 ,\r
+-15396 , -15296 , -15191 , -15082 , -14968 , -14849 , -14726 , -14598 , -14466 , -14330 ,\r
+-14189 , -14044 , -13894 , -13741 , -13583 , -13421 , -13255 , -13085 , -12911 , -12733 ,\r
+-12551 , -12365 , -12176 , -11982 , -11786 , -11585 , -11381 , -11174 , -10963 , -10749 ,\r
+-10531 , -10311 , -10087 ,  -9860 ,  -9630 ,  -9397 ,  -9162 , -8923 ,  -8682 ,  -8438 ,\r
+ -8192 ,  -7943 ,  -7692 ,  -7438 ,  -7182 ,  -6924 ,  -6664 , -6402 ,  -6138 ,  -5872 ,\r
+ -5604 ,  -5334 ,  -5063 ,  -4790 ,  -4516 ,  -4240 ,  -3964 , -3686 ,  -3406 ,  -3126 ,\r
+ -2845 ,  -2563 ,  -2280 ,  -1997 ,  -1713 ,  -1428 ,  -1143 ,  -857 ,   -572 ,   -286 ,\r
+    -0 ,    286 ,    572 ,    857 ,   1143 ,   1428 ,  1713 ,   1997 ,   2280 ,   2563 ,\r
+  2845 ,   3126 ,   3406 ,   3686 ,   3964 ,   4240 ,  4516 ,   4790 ,   5063 ,   5334 ,\r
+  5604 ,   5872 ,   6138 ,   6402 ,   6664 ,   6924 ,  7182 ,   7438 ,   7692 ,   7943 ,\r
+  8192 ,   8438 ,   8682 ,   8923 ,   9162 ,   9397 ,  9630 ,   9860 ,  10087 ,  10311 ,\r
+ 10531 ,  10749 ,  10963 ,  11174 ,  11381 ,  11585 ,  11786 , 11982 ,  12176 ,  12365 ,\r
+ 12551 ,  12733 ,  12911 ,  13085 ,  13255 ,  13421 ,  13583 , 13741 ,  13894 ,  14044 ,\r
+ 14189 ,  14330 ,  14466 ,  14598 ,  14726 ,  14849 ,  14968 , 15082 ,  15191 ,  15296 ,\r
+ 15396 ,  15491 ,  15582 ,  15668 ,  15749 ,  15826 ,  15897 , 15964 ,  16026 ,  16083 ,\r
+ 16135 ,  16182 ,  16225 ,  16262 ,  16294 ,  16322 ,  16344 , 16362 ,  16374 ,  16382 ,\r
+\r
+HEX\r
+\ : PLOT  ( x y -- )\r
+\     Y>SEG SWAP 8 /MOD SWAP >R          \ seg_addr x/8  R: x_mod_8\r
+\     2DUP LC@ R> CHARS XMASK + C@ OR ROT ROT LC! ;\r
+\r
+CODE PLOT  ( x y -- )\r
+    BX 1 SHL,\r
+    Y>SegTable ) BX ADD,\r
+    0 [BX] ES MOV,\r
+    BX POP,\r
+    BX CX MOV,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    ES: 0 [BX] AL MOV,\r
+    1 # AH MOV,\r
+    CL NOT,\r
+    7 # CL AND,\r
+    AH CL ROL,\r
+    AH AL OR,\r
+    ES: AL 0 [BX] MOV,\r
+    BX POP,\r
+    NEXT,\r
+END-CODE\r
+\r
+\ : 2ROT\r
+\     >R >R 2SWAP R> R> 2SWAP ;\r
+\\r
+\ : LINE  ( x1 y1 x2 y2--)\r
+\     2OVER 2OVER ROT - ABS >R - ABS R> MAX 2 <\r
+\     IF 2DROP PLOT EXIT THEN\r
+\     2OVER 2OVER ROT + 1+ 2/ >R + 1+ 2/ R>\r
+\     2DUP 2ROT RECURSE RECURSE ;\r
+\r
+VARIABLE Delta\r
+VARIABLE Delta/2\r
+\r
+\ y changing faster than x\r
+CODE steep640  \ on entry, ax = delta x, bx = delta y, cx=x1, dx=y1\r
+    BX BP MOV,                 \ for counter\r
+    BX 1 SHR,\r
+    BX Delta/2 ) MOV,          \ halfy\r
+    BX BX XOR,                 \ clear for cmp\r
+6 L:\r
+    BX PUSH,\r
+    CX PUSH,           \ x\r
+    DX BX MOV,\r
+    BX 1 SHL,\r
+    Y>SegTable ) BX ADD,\r
+    0 [BX] ES MOV,\r
+    CX BX MOV,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    ES: 0 [BX] AL MOV,\r
+    1 # AH MOV,\r
+    CL NOT,\r
+    7 # CL AND,\r
+    AH CL ROL,\r
+    AH AL OR,\r
+    ES: AL 0 [BX] MOV,\r
+    CX POP,\r
+    BX POP,\r
+    DX INC,                    \ y is always increasing\r
+    MAX-Y 16* # DX CMP,\r
+    8 L# JL,\r
+    DX DX XOR,\r
+8 L:\r
+    Delta ) BX ADD,            \ = bx + delta_y\r
+    Delta/2 ) BX CMP,          \ bx > halfy ?\r
+    7 L# JLE,\r
+    SI BX SUB,                 \ bx - delta_y\r
+    DI CX ADD,                 \ inc or dec x\r
+    MAX-X 8 * # CX SUB,\r
+    7 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+    7 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+7 L:\r
+    BP DEC,\r
+    6 L# JGE,\r
+    BP POP,\r
+    SI POP,\r
+    BX POP,\r
+    NEXT,\r
+END-CODE\r
+\r
+\ on exit, cx=x1, dx=y1, ax=x2, bx=y2\r
+CODE line640  ( x1 y1 x2 y2 -- )       \ writes to screen directly\r
+    AX POP,\r
+    DX POP,\r
+    CX POP,\r
+    SI PUSH,   ( used to hold direction)\r
+    BP PUSH,   ( used as counter)\r
+\ see if we'll inc or dec x, y (draws in any direction)\r
+    DX BX SUB,                 \ bx <- y2-y1 (delta y)\r
+    2 L# JGE,\r
+    BX DX ADD,                 \ dx <- y2\r
+    BX NEG,                    \ abs(delta y)\r
+    CX AX XCHG,\r
+2 L:\r
+    BX SI MOV,                  \ delta_y(BX) to SI\r
+    CX AX SUB,                  \ x2 - x1 = delta_x\r
+    1 # DI MOV,                 \ di to increment x\r
+    4 L# JGE,\r
+    -1 # DI MOV,                \ di to decrement x\r
+    AX NEG,                     \ abs(delta x)\r
+4 L:\r
+    \ adjust x1(CX), y1(DX) in proper range\r
+    AX PUSH,\r
+    DX PUSH,\r
+    CX AX MOV,\r
+    CWD,\r
+    MAX-X 8 * # BP MOV,\r
+    BP IDIV,\r
+    DX DX OR,\r
+    1 L# JNS,\r
+    BP DX ADD,\r
+1 L:\r
+    DX CX MOV,\r
+    DX POP,\r
+    DX AX MOV,\r
+    CWD,\r
+    MAX-Y 16* # BP MOV,\r
+    BP IDIV,\r
+    DX DX OR,\r
+    8 L# JNS,\r
+    BP DX ADD,\r
+8 L:\r
+    AX POP,\r
+    AX Delta ) MOV,            \ abs(delta x)\r
+    BX AX CMP,                 \ delta_x - delta_y\r
+    5 L# JGE,\r
+    ' steep640 # JMP,           \ y changes faster than x\r
+5 L:\r
+\ x changing faster than y\r
+    AX BP MOV,                 \ for counter\r
+    AX 1 SHR,\r
+    AX Delta/2 ) MOV,          \ halfx\r
+    BX BX XOR,                 \ clear for cmp\r
+6 L:\r
+    BX PUSH,\r
+    CX PUSH,           \ x\r
+    DX BX MOV,\r
+    BX 1 SHL,\r
+    Y>SegTable ) BX ADD,\r
+    0 [BX] ES MOV,\r
+    CX BX MOV,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    ES: 0 [BX] AL MOV,\r
+    1 # AH MOV,\r
+    CL NOT,\r
+    7 # CL AND,\r
+    AH CL ROL,\r
+    AH AL OR,\r
+    ES: AL 0 [BX] MOV,\r
+    CX POP,\r
+    BX POP,\r
+    DI CX ADD,                 \ inc or dec x\r
+    MAX-X 8 * # CX SUB,\r
+    9 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+    9 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+9 L:\r
+    SI BX ADD,                 \ = bx + delta_y\r
+    Delta/2 ) BX CMP,          \ bx > halfx ?\r
+    7 L# JLE,\r
+    Delta ) BX SUB,            \ bx - delta_x\r
+    DX INC,                    \ y is always increasing\r
+    MAX-Y 16* # DX CMP,\r
+    7 L# JL,\r
+    DX DX XOR,\r
+7 L:\r
+    BP DEC,\r
+    6 L# JGE,\r
+    BP POP,\r
+    SI POP,\r
+    BX POP,\r
+    NEXT,\r
+END-CODE\r
+\r
+\ y changing faster than x\r
+CODE xsteep640   \ on entry, ax = delta x, bx = delta y, cx=x1, dx=y1\r
+    BX BP MOV,                 \ for counter\r
+    BX 1 SHR,\r
+    BX Delta/2 ) MOV,          \ halfy\r
+    BX BX XOR,                 \ clear for cmp\r
+6 L:\r
+    BX PUSH,\r
+    CX PUSH,           \ x\r
+    DX BX MOV,\r
+    BX 1 SHL,\r
+    Y>SegTable ) BX ADD,\r
+    0 [BX] ES MOV,\r
+    CX BX MOV,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    ES: 0 [BX] AL MOV,\r
+    1 # AH MOV,\r
+    CL NOT,\r
+    7 # CL AND,\r
+    AH CL ROL,\r
+    AH AL XOR,\r
+    ES: AL 0 [BX] MOV,\r
+    CX POP,\r
+    BX POP,\r
+    DX INC,                    \ y is always increasing\r
+    MAX-Y 16* # DX CMP,\r
+    8 L# JL,\r
+    DX DX XOR,\r
+8 L:\r
+    Delta ) BX ADD,            \ = bx + delta_y\r
+    Delta/2 ) BX CMP,          \ bx > halfy ?\r
+    7 L# JLE,\r
+    SI BX SUB,                 \ bx - delta_y\r
+    DI CX ADD,                 \ inc or dec x\r
+    MAX-X 8 * # CX SUB,\r
+    7 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+    7 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+7 L:\r
+    BP DEC,\r
+    6 L# JGE,\r
+    BP POP,\r
+    SI POP,\r
+    BX POP,\r
+    NEXT,\r
+END-CODE\r
+\r
+\ on exit, cx=x1, dx=y1, ax=x2, bx=y2\r
+CODE xline640  ( x1 y1 x2 y2 -- )        \ writes to screen directly\r
+    AX POP,\r
+    DX POP,\r
+    CX POP,\r
+    SI PUSH,   ( used to hold direction)\r
+    BP PUSH,   ( used as counter)\r
+\ see if we'll inc or dec x, y (draws in any direction)\r
+    DX BX SUB,                 \ bx <- y2-y1 (delta y)\r
+    2 L# JGE,\r
+    BX DX ADD,                 \ dx <- y2\r
+    BX NEG,                    \ abs(delta y)\r
+    CX AX XCHG,\r
+2 L:\r
+    BX SI MOV,                  \ delta_y(BX) to SI\r
+    CX AX SUB,                  \ x2 - x1 = delta_x\r
+    1 # DI MOV,                 \ di to increment x\r
+    4 L# JGE,\r
+    -1 # DI MOV,                \ di to decrement x\r
+    AX NEG,                     \ abs(delta x)\r
+4 L:\r
+    \ adjust x1(CX), y1(DX) in proper range\r
+    MAX-X 8 * # CX SUB,\r
+    1 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+    1 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+1 L:\r
+    MAX-Y 16* # DX SUB,\r
+    8 L# JNS,\r
+    MAX-Y 16* # DX ADD,\r
+    8 L# JNS,\r
+    MAX-Y 16* # DX ADD,\r
+8 L:\r
+    AX Delta ) MOV,            \ abs(delta x)\r
+    BX AX CMP,                 \ delta_x - delta_y\r
+    5 L# JGE,\r
+    ' xsteep640 # JMP,          \ y changes faster than x\r
+5 L:\r
+\ x changing faster than y\r
+    AX BP MOV,                 \ for counter\r
+    AX 1 SHR,\r
+    AX Delta/2 ) MOV,          \ halfx\r
+    BX BX XOR,                 \ clear for cmp\r
+6 L:\r
+    BX PUSH,\r
+    CX PUSH,           \ x\r
+    DX BX MOV,\r
+    BX 1 SHL,\r
+    Y>SegTable ) BX ADD,\r
+    0 [BX] ES MOV,\r
+    CX BX MOV,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    BX 1 SHR,\r
+    ES: 0 [BX] AL MOV,\r
+    1 # AH MOV,\r
+    CL NOT,\r
+    7 # CL AND,\r
+    AH CL ROL,\r
+    AH AL XOR,\r
+    ES: AL 0 [BX] MOV,\r
+    CX POP,\r
+    BX POP,\r
+    DI CX ADD,                 \ inc or dec x\r
+    MAX-X 8 * # CX SUB,\r
+    9 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+    9 L# JNS,\r
+    MAX-X 8 * # CX ADD,\r
+9 L:\r
+    SI BX ADD,                 \ = bx + delta_y\r
+    Delta/2 ) BX CMP,          \ bx > halfx ?\r
+    7 L# JLE,\r
+    Delta ) BX SUB,            \ bx - delta_x\r
+    DX INC,                    \ y is always increasing\r
+    MAX-Y 16* # DX CMP,\r
+    7 L# JL,\r
+    DX DX XOR,\r
+7 L:\r
+    BP DEC,\r
+    6 L# JGE,\r
+    BP POP,\r
+    SI POP,\r
+    BX POP,\r
+    NEXT,\r
+END-CODE\r
+\r
+DECIMAL\r
+10 CONSTANT scale\r
+0 VALUE \90\81\9f¥¦\95?\r
+VARIABLE ¤wз\r
+MAX-X 8 * 2/ VALUE xOffset\r
+MAX-Y 16 * 2/ VALUE yOffset\r
+VARIABLE xCoord  xOffset xCoord !\r
+VARIABLE yCoord  yOffset yCoord !\r
+\r
+: ¦\95\97i´á ( -- )     FALSE TO \90\81\9f¥¦\95? ;\r
+: ¦\95\90\81\9da ( -- )     TRUE  TO \90\81\9f¥¦\95? ;\r
+: º\89ÑÁ¡e ( y -- )   MAX-Y SWAP - TO YTop ;\r
+: µ¥ÑÁ¡e ( -- )     PAGE ;\r
+\r
+CODE sin* ( \88á\9f¡ \88b\95¡ -- \88á\9f¡*sin[\88b\95¡] )\r
+\ : sin*   CELLS sin16384 + @ M* 16384 SM/REM NIP ;\r
+    BX 1 SHL,\r
+    sin16384 [BX] BX MOV,\r
+    AX POP,\r
+    BX IMUL,\r
+    BX BX XOR,\r
+    AX 1 SHL,\r
+    DX 1 RCL,\r
+    AX 1 SHL,\r
+    DX 1 RCL,\r
+    DX BX ADC,\r
+    NEXT,\r
+END-CODE\r
+\r
+CODE cos* ( \88á\9f¡ \88b\95¡ -- \88á\9f¡*cos[\88b\95¡] )\r
+\ : cos*   90 + CELLS sin16384 + @ M* 16384 SM/REM NIP ;\r
+    90 # BX ADD,\r
+    BX 1 SHL,\r
+    sin16384 [BX] BX MOV,\r
+    AX POP,\r
+    BX IMUL,\r
+    BX BX XOR,\r
+    AX 1 SHL,\r
+    DX 1 RCL,\r
+    AX 1 SHL,\r
+    DX 1 RCL,\r
+    DX BX ADC,\r
+    NEXT,\r
+END-CODE\r
+\r
+: \9d¡.\8ba´á ( x y -- )\r
+    scale / yOffset SWAP -         \ x y1\r
+    SWAP scale / xOffset + SWAP     \ x1 y1\r
+    \90\81\9f¥¦\95? IF 2DUP xCoord @ yCoord @ line640 THEN\r
+    yCoord !  xCoord ! ;\r
+\r
+: \88á¦\82¥¡µa ( -- )\r
+    xCoord @  8 ¤wз @ 270 + sin* +\r
+    yCoord @  8 ¤wз @ 270 + cos* -\r
+    2DUP xCoord @ yCoord @ xline640                 \ x1 y1\r
+    xCoord @  16 ¤wз @ sin* +\r
+    yCoord @  16 ¤wз @ cos* -                      \ x1 y1 x2 y2\r
+    2SWAP 2OVER xline640                            \ x2 y2\r
+    xCoord @  8 ¤wз @ 90 + sin* +\r
+    yCoord @  8 ¤wз @ 90 + cos* -                  \ x2 y2 x3 y3\r
+    2SWAP 2OVER xline640                            \ x3 y3\r
+    xCoord @  yCoord @  xline640 ;\r
+\r
+: ÑÁ¡e»¡¶¡ ( -- )   YTop PAGE 0 OVER AT-XY TO YTop \88á¦\82¥¡µa ;\r
+\r
+HEX\r
+: \88{·e i ( xt 'name2' -- )\r
+    DUP xt>name ?DUP 0= IF -12 THROW THEN\r
+    SWAP head, linkLast\r
+    C@ DUP\r
+    040 AND IF IMMEDIATE    THEN\r
+    020 AND IF COMPILE-ONLY THEN ;\r
+\r
+DECIMAL\r
+' IMMEDIATE  \88{·e i  ¤a\9d¡\r
+' RECURSE    \88{·e i  \96\89\9cá\r
+' IF         \88{·e i  ¡e\r
+' ELSE       \88{·e i  ´a\93¡¡e\r
+' THEN       \88{·e i  \9ca\r
+' BEGIN      \88{·e i  ·¡¹A¦\81Èá\r
+' UNTIL      \88{·e i  \8ca»¡\r
+' WHILE      \88{·e i  \95·´e\r
+' REPEAT     \88{·e i  \88á\97\81\r
+' DO         \88{·e i   \91\r
+' LOOP       \88{·e i  \95©´a\r
+' I          \88{·e i  \88a\r
+' CONSTANT   \88{·e i  \8a\88·e\88t\r
+' VARIABLE   \88{·e i  ¢\81\9fe\88t\r
+' DUP        \88{·e i  ¥A\8da\r
+' OVER       \88{·e i  \88å\90á\r
+' DROP       \88{·e i  ¤á\9da\r
+' SWAP       \88{·e i  ¤a\8e¡\r
+' ROT        \88{·e i  \95©\9da\r
+' >R         \88{·e i  >\96A\r
+' R>         \88{·e i  \96A>\r
+' R@         \88{·e i  \96A@\r
+' AND        \88{·e i  \90{Ðq\8dA\r
+' OR         \88{·e i  \90{´a¶\89\9cá\r
+' XOR        \88{·e i  \90{\98a\9d¡\r
+' MOD        \88{·e i  \90a á»¡\r
+' CR         \88{·e i  \94a·qº\89\r
+' WORDS      \88{·e i   iÍa\r
+' .S         \88{·e i  .\94ᣡ\r
+\r
+' THEN       \88{·e i  ENDIF\r
+' =          \88{·e i  ==\r
+' BYE        \88{·e i  \8f{\r
+' BYE        \88{·e i  EXIT\r
+' BYE        \88{·e i  exit\r
+\r
\81\9fe\88\88a\9d¡¶áá\r
\81\9fe\88t ­A\9d¡¶áá\r
+\r
+: ¹A¸a\9f¡\9d¡   ( -- )\r
+       \88á¦\82¥¡µa\r
+       0 ¤wз !\r
+       0 \88a\9d¡¶áá !\r
+       0 ­A\9d¡¶áá !\r
+       0 0 \9d¡.\8ba´á\r
+       \88á¦\82¥¡µa ;\r
+\r
+: ÑÁ¡e»¡¶¡   ( -- )\r
+       ¦\95\97i´á ¹A¸a\9f¡\9d¡ ÑÁ¡e»¡¶¡ ¦\95\90\81\9da ;\r
+\r
+: ½¡\88\85ÑÁ¡e ( -- )    8 º\89ÑÁ¡e  ÑÁ¡e»¡¶¡ ;\r
+: µ¥ÑÁ¡e   ( -- )    µ¥ÑÁ¡e    ÑÁ¡e»¡¶¡ ;\r
+\r
+: \95¡.µ¡\9fe½¢  ( \88b\95¡ -- )\r
+       \88á¦\82¥¡µa\r
+       ¤wз @ +\r
+       ¥A\8da 0 < ¡e                  ( \88b\95¡\88a 0¥¡\94a ¸b·a¡e)\r
+                  ·¡¹A¦\81Èá 360 +    ( 0 ·¡¬w·¡ \96\98\81\8ca»¡ 360·i \94áÐq)\r
+                  ¥A\8da -1 > \8ca»¡\r
+                ´a\93¡¡e 360 \90a á»¡   ( 0¥¡\94a Ça¡e 360·a\9d¡ \90a\92\85 \90a á»¡\9f\90q\8b±)\r
+                \9ca\r
+       ¤wз !\r
+       \88á¦\82¥¡µa ;\r
+\r
+: \95¡.¶E½¢     -1 * \95¡.µ¡\9fe½¢ ;\r
+\r
+:  eÇq.\88a    ( dx dy -- )\r
+       \88á¦\82¥¡µa\r
+       ­A\9d¡¶áá @ +            ( dx y+dy )\r
+       ¥A\8da ­A\9d¡¶áá !         ( dx y+dy )\r
+       ¤a\8e¡ \88a\9d¡¶áá @ +       ( y+dy x+dx )\r
+       ¥A\8d\88a\9d¡¶áá !         ( y+dy x+dx )\r
+       ¤a\8e¡                    ( x+dx y+dy )\r
+       \9d¡.\8ba´á\r
+       \88á¦\82¥¡µa ;\r
+\r
+: ´|·a\9d¡   ( l -- )\r
+       ¥A\8da                    ( l l )\r
+       ¤wз @ sin*             ( l dx )\r
+       ¤a\8e¡                    ( dx l )\r
+       ¤wз @ cos*             ( dx dy )\r
+        eÇq.\88a  ;\r
+\r
+: \96á\9d¡    ( \88á\9f¡ -- )\r
+       -1 *  ´|·a\9d¡ ;\r
+\r
+: __µ¡\9fe½¢.ÑÉ\8d©   ( \88á\9f¡ ÒU®\81  -- )\r
+       0  \91   5 \95¡.µ¡\9fe½¢   ¥A\8da ´|·a\9d¡  5 \95¡.µ¡\9fe½¢   \95©´a   ¤á\9da ;\r
+\r
+: µ¡\9fe½¢.ÑÉ\8d©  ( ¤e»¡\9f\88b\95¡ -- )\r
+       ¤a\8e¡  355 2034 */       ( \88b\95¡ \88á\9f¡ ) ( ÑÉ\8d©·i 10\95¡³¢ \90a\92\81´á \8ba\9f± )\r
+                                       ( 2*pi*r*\88b\95¡/360*10 = pi*r*\88b\95¡/18 )\r
+                                       ( pi = 355/113 = 3.141593 )\r
+       ¥A\8da >\96A                        ( \96A\95©·¡ \94ᣡµA \88á\9f¡\9f\88\81\9f¡)\r
+       \88å\90á  10 /              ( \88b\95¡ \88á\9f¡ ÒU®\81 )\r
+       __µ¡\9fe½¢.ÑÉ\8d©           ( \88b\95¡ )\r
+       10 \90a á»¡               ( \88b\95¡_\90a á»¡ )\r
+       ¥A\8d\96A>                ( \88b\95¡_\90a á»¡ \88b\95¡_\90a á»¡ \88á\9f¡ )\r
+       ( 10·a\9d¡ \90a\92\85 \90a á»¡ \88b\95¡µA Ð\81\94wÐa\93\88á\9f¡ eÇq ´|·a\9d¡ \88q)\r
+       *  10 /  ´|·a\9d¡         ( \88b\95¡_\90a á»¡ )\r
+       \95¡.µ¡\9fe½¢  ;\r
+\r
+: µ¡\9fe½¢.¶¥ ( ¤e»¡\9fq -- )   360 µ¡\9fe½¢.ÑÉ\8d© ;\r
+\r
+: __¶E½¢.ÑÉ\8d©  ( \88á\9f¡ ÒU®\81  -- )\r
+       0  \91   5 \95¡.¶E½¢   ¥A\8da ´|·a\9d¡  5 \95¡.¶E½¢   \95©´a   ¤á\9da ;\r
+\r
+: ¶E½¢.ÑÉ\8d©    ( ¤e»¡\9f\88b\95¡ -- )\r
+       ¤a\8e¡  355 2034 */       ( \88b\95¡ \88á\9f¡ ) ( ÑÉ\8d©·i 10\95¡³¢ \90a\92\81´á \8ba\9f± )\r
+                                       ( 2*pi*r*\88b\95¡/360*10 = pi*r*\88b\95¡/18 )\r
+       ¥A\8da >\96A                        ( \96A\95©·¡ \94ᣡµA \88á\9f¡\9f\88\81\9f¡)\r
+       \88å\90á  10 /              ( \88b\95¡ \88á\9f¡ ÒU®\81 )\r
+       __¶E½¢.ÑÉ\8d©             ( \88b\95¡ )\r
+       10 \90a á»¡               ( \88b\95¡_\90a á»¡ )\r
+       ¥A\8d\96A>                ( \88b\95¡_\90a á»¡ \88b\95¡_\90a á»¡ \88á\9f¡ )\r
+            ( 10·a\9d¡ \90a\92\85 \90a á»¡ \88b\95¡µA Ð\81\94wÐa\93\88á\9f¡ eÇq ´|·a\9d¡ \88q)\r
+       *  10 /  ´|·a\9d¡         ( \88b\95¡_\90a á»¡ )\r
+       \95¡.¶E½¢  ;\r
+\r
+: ¶E½¢.¶¥ ( ¤e»¡\9fq -- )   360 ¶E½¢.ÑÉ\8d© ;\r
+\r
+: \91A¡¡  ( Ça\8b¡ -- )\r
+       4 0   \91   ¥A\8da ´|·a\9d¡   90 \95¡.µ¡\9fe½¢   \95©´a   ¤á\9da ;\r
+\r
+: \89sÃ¥\91A¡¡   ( -- )\r
+       100 \91A¡¡  200 \91A¡¡  300 \91A¡¡  400 \91A¡¡ ;\r
+\r
+: \94a·¡´a¡¥\97a   ( -- )\r
+       45 \95¡.µ¡\9fe½¢\r
+       4 0  \91  \89sÃ¥\91A¡¡  90 \95¡.µ¡\9fe½¢  \95©´a ;\r
+\r
+: \8bµ¤i  ( Ça\8b¡ -- )\r
+       ¥A\8da ´|·a\9d¡  ¥A\8d\91A¡¡  \96á\9d¡ ;\r
+\r
+: µa¬õ\8bµ¤i   ( Ça\8b¡ -- )\r
+       6 0  \91  ¥A\8d\8bµ¤i  60 \95¡.µ¡\9fe½¢  \95©´a ;\r
+\r
+: ¤a\9cq\88\81§¡   ( -- )\r
+       100 µa¬õ\8bµ¤i  400 µa¬õ\8bµ¤i ;\r
+\r
+: \8d¹·¼  ( Ça\8b¡ -- )\r
+       ¥A\8da  90 µ¡\9fe½¢.ÑÉ\8d©  90 \95¡.µ¡\9fe½¢\r
+             90 µ¡\9fe½¢.ÑÉ\8d©  90 \95¡.µ¡\9fe½¢ ;\r
+\r
+: \8d¹    ( Ça\8b¡ -- )\r
+       8 0  \91   ¥A\8da  \8d¹·¼ 45 \95¡.µ¡\9fe½¢   \95©´a   ¤á\9da ;\r
+\r
+: \94a\9fe\8d¹·¼   ( Ça\8b¡ -- )\r
+       ¥A\8da  60 µ¡\9fe½¢.ÑÉ\8d©  120 \95¡.µ¡\9fe½¢\r
+             60 µ¡\9fe½¢.ÑÉ\8d©  120 \95¡.µ¡\9fe½¢ ;\r
+\r
+: \94a\9fe\8d¹     ( Ça\8b¡ -- )\r
+       6 0  \91   ¥A\8da  \94a\9fe\8d¹·¼ 60 \95¡.µ¡\9fe½¢   \95©´a   ¤á\9da ;\r
+\r
+: Ð\95¬i  ( Ça\8b¡ -- )\r
+       ¥A\8da  90 ¶E½¢.ÑÉ\8d©  ¥A\8da 90 µ¡\9fe½¢.ÑÉ\8d©\r
+       ¥A\8da  90 ¶E½¢.ÑÉ\8d©       90 µ¡\9fe½¢.ÑÉ\8d© ;\r
+\r
+: Ð\81    ( Ça\8b¡ -- )\r
+       9 0  \91   ¥A\8da Ð\95¬i  160 \95¡.µ¡\9fe½¢   \95©´a  ¤á\9da ;\r
+\r
+: \88bÑw    ( Ça\8b¡ ¡¡¬á\9f¡®\81 -- )\r
+       360 \88å\90á /  ¤a\8e¡        ( Ça\8b¡ \95©_\88b\95¡ ¡¡¬á\9f¡®\81 )\r
+       0  \91  \88å\90á ´|·a\9d¡  ¥A\8d\95¡.µ¡\9fe½¢  \95©´a\r
+       ¤á\9da ¤á\9da ;\r
+\r
+: ¥i   ( ¥e·\81\81 ¡y¤å -- )\r
+       \88å\90á \88å\90á *\r
+       0  \91  600 ´|·a\9d¡  \88å\90á \88å\90á 360 * ¤a\8e¡ / \95¡.µ¡\9fe½¢  \95©´a\r
+       ¤á\9da ¤á\9da ;\r
+\r
+: \94a\88bÑw   ( Ça\8b¡ \88b\95¡ -- )\r
+       ¤wз @ >\96A                    ( \96A\95©·¡\94ᣡµA Àá·q ¤wз·i \88\81\9f¡)\r
+       ·¡¹A¦\81Èá\r
+          \88å\90á ´|·a\9d¡ ¥A\8d\95¡.µ¡\9fe½¢\r
+       ¤wз @  \96A@ = \8ca»¡            ( ¤wз·¡ Àá·q¤wз\89Á \88{´a»© \98\81\8ca»¡ \96\89·¡)\r
+       ¤á\9da ¤á\9da  \96A> ¤á\9da ;         ( \88t\94ᣡµÁ \96A\95©·¡ \94ᣡ\9fi À÷­¡ )\r
+\r
+: \94a\88bÑw¸a\9cw5   5 0  \91  450  72 \94a\88bÑw  72 \95¡.µ¡\9fe½¢  \95©´a ;\r
+: \94a\88bÑw¸a\9cw4   4 0  \91  700 135 \94a\88bÑw  90 \95¡.µ¡\9fe½¢  \95©´a ;\r
+: \94a\88bÑw¸a\9cw12 12 0  \91  15 \95¡.µ¡\9fe½¢  ¦\95\97i´á  400 ´|·a\9d¡  ¦\95\90\81\9da\r
+                        200 135 \94a\88bÑw  15 \95¡.µ¡\9fe½¢  \95©´a ;\r
+\r
+: \90\81  ( \88a»¡\88b\95¡ \88a»¡\8b©·¡ \88a»¡Ã¡\8b¡®\81 -- )\r
+       >\96A                             ( \88a»¡Ã¡\8b¡®\81\9f\96A\95©·¡\94ᣡµA \88\81\9f¡)\r
+       \96A@ ¡e                          ( '\96A@ 0 <> ¡e' \89Á \88{·q)\r
+          \88å\90á \95¡.¶E½¢\r
+          ¥A\8da 2 * ´|·a\9d¡\r
+          \88å\90á \88å\90á \96A@ 1 - \96\89\9cá\r
+          ¥A\8da 2 * \96á\9d¡\r
+          \88å\90á 2 * \95¡.µ¡\9fe½¢\r
+          ¥A\8da ´|·a\9d¡\r
+          \88å\90á \88å\90á \96A@ 1 - \96\89\9cá\r
+          \96á\9d¡  \95¡.¶E½¢\r
+       ´a\93¡¡e  ¤á\9da ¤á\9d\9ca\r
+       \96A> ¤á\9da ;\r
+\r
\81\9fe\88t §¡\93iÇa\8b¡  20 §¡\93iÇa\8b¡ !\r
+: ¶w   ( \90a·¡ -- )\r
+       ¥A\8da  0 = ¡e  §¡\93iÇa\8b¡ @ ´|·a\9d¡\r
+             ´a\93¡¡e  ¥A\8da  0 > ¡e  ¥A\8da 1 - \96\89\9cá     (  \90a·¡-1 ¶w )\r
+                                   90 \95¡.µ¡\9fe½¢\r
+                                   1 \88å\90á - \96\89\9cá     (  1-\90a·¡ ¶w )\r
+                           ´a\93¡¡e  -1 \88å\90á - \96\89\9cá    ( -1-\90a·¡ ¶w )\r
+                                   90 \95¡.¶E½¢\r
+                                    1 \88å\90á + \96\89\9cá    (  1+\90a·¡ ¶w )\r
+             \9ca  \9ca\r
+       ¤á\9da ;\r
+\r
+: ·¥¬a i\r
+    ½¡\88\85ÑÁ¡e\r
+    ." '\93\91'·a\9d¡ ¼e \88á¦\82\8ba\9f± Ïa\9d¡\8ba\9c\91·i ¯¡¸bÐs\93¡\94a."              \94a·qº\89 \94a·qº\89\r
+    ." ¯¡Ç± i\97i·i ¥¡\9da¡e             ' iÍa'           \9ca\89¡ Ã¡¯¡\89¡"  \94a·qº\89\r
+    ." ¯¡Ç± i·i ´á\98ý\89A ³a\93e»¡ ¥¡\9da¡e '\95¡¶\91 i \95¡¶\91 i'  Àá\9cñ Ã¡¯¡\89¡"  \94a·qº\89\r
+    ." DOS\9d¡ \95©´a \88a\9da¡e             '\8f{'           ·¡\9ca\89¡ Ã¡¯³¯¡µ¡." \94a·qº\89\r
+    ." \8ba\9f±\89Á \8bi¸a\9f\88{·¡ ¥¡\9da¡e 'µ¥ÑÁ¡e' \98a\9d¡ ¥¡\9da¡e '½¡\88\85ÑÁ¡e'·¡\9ca\89¡ Ã¡¯³¯¡µ¡"\r
+    \94a·qº\89\r
+    ¦\95\90\81\9da\r
+    300 \8d¹  450 \8d¹  600 \8d¹\r
+    ¦\95\97i´á  90 \95¡.¶E½¢  2000 ´|·a\9d¡  ¦\95\90\81\9da\r
+    900 \94a\9fe\8d¹  700 \94a\9fe\8d¹  500 \94a\9fe\8d¹\r
+    ¦\95\97i´á  4000 \96á\9d¡  90 \95¡.µ¡\9fe½¢  ¦\95\90\81\9da\r
+    300 Ð\r
+    1 \8bi®A·³\9db¬wÈ\81 ! ;       \ Ðe\8bi·³\9db\r
+\r
+·¥¬a i\r
+\r
+: TURTLE-hi\r
+    DOSCommand>PAD\r
+    GET-MODE TO OldMode# HGRAPHIC hi\r
+    ." ·\81\89e\89Á ¹A´e\89Á §¡Íw·i Ða·¡ÉI wykoh\9d¡ ¥¡\90\81 º\81¯³¯¡µ¡." CR\r
+    S" BLOCKS.BLK" MAPPED-TO-BLOCK\r
+    ·¥¬a i  QUIT ;\r
+\r
+' TURTLE-hi TO 'boot\r
+\r
+( \94a·q·i Àa\9d\81\9d¡ ¯¡Åa¥¡¯³¯¡µ¡. )\r
+( \94a·¡´a¡¥\97a )\r
+( 400 \8bµ¤i  400 µa¬õ\8bµ¤i  ¤a\9cq\88\81§¡ )\r
+( 400 3 \88bÑw   400 5 \88bÑw   400 7 \88bÑw )\r
+( 5 2 ¥i  7 2 ¥i  7 3 ¥i  8 3 ¥i  9 2 ¥i  9 4 ¥i  10 3 ¥i  11 3 ¥i  11 5 ¥i )\r
+( \94a\88bÑw¸a\9cw5 )\r
+( \94a\88bÑw¸a\9cw5 )\r
+( \94a\88bÑw¸a\9cw12 )\r
+( 30 400 4 \90\81 )\r
+( 20 250 5 \90\81 )\r
+( 20 250 6 \90\81 )\r
+( 50 §¡\93iÇa\8b¡ !   9 ¶w )\r
+( 20 §¡\93iÇa\8b¡ !  12 ¶w )\r
+\r
+SET-CURRENT  SET-ORDER\r
+BASE !\r
diff --git a/log.f b/log.f
index 3eb5dfd..5af21e9 100644 (file)
--- a/log.f
+++ b/log.f
-\\r
-\ LOG.F\r
-\   Capture screen output in a textfile for hForth.\r
-\\r
-\ 1996. 2. 28.\r
-\ Wonyong Koh.\r
-\\r
-\ Usage:\r
-\   LOGON  ( -- )\r
-\      ÑÁ¡e Â\89\9db·i HFORTH.LOGµA \88\81\9f¡Ðs\93¡\94a. Â\89\9d\88a\9f¡Ç±¯©Ð\97\88t 'emit·¡\r
-\      ¤a\8eå Ò\81µA\93e (µ\81\9f\97i´á, HIOMULT?.F·\81 TEXT\90a HGRAPHIC·i ¯¡Ç¥ Ò\81\90a\r
-\      Í¡¯a ¯¡¯aÉQ·¡ '?'·i ¥¡µa ¸i¡µ·i ´i\9f¥ \89\81) LOGON·¡\9ca\89¡ \94a¯¡ ¯¡Åa´¡\r
-\      \88\81\9f¡\88\89\81­¢\96S\93¡\94a.\r
-\      Start to save screen output in HFORTH.LOG.\r
-\      Please reissue 'LOGON' after changing "'emit" vector.\r
-\       (for example, after TEXT or HGRAPHIC of HIOMULT?.F)\r
-\   LOGOFF  ( -- )\r
-\      HFORTH.LOG\9f\94h\89¡ ÑÁ¡e \88\81\9f¡\9fi  ñÂ\93\93¡\94a.\r
-\      Close HFORTH.LOG and stop saving screen output.\r
-\r
-MARKER ~LOG\r
-\r
-BASE @\r
-GET-ORDER  GET-CURRENT\r
-\r
-GET-ORDER DOS-WORDLIST SWAP 1+ SET-ORDER\r
-DOS-WORDLIST SET-CURRENT\r
-\r
-HEX\r
-8000 CONSTANT invalid-fid\r
-\r
-invalid-fid VALUE logfid\r
-0 VALUE old'emit\r
-CREATE LogBUFFER 1 CHARS ALLOT ALIGN\r
-\r
-: LogEMIT  ( char -- )\r
-    DUP LogBUFFER C! LogBUFFER 1 CHARS logfid WRITE-FILE THROW\r
-    old'emit EXECUTE ;\r
-\r
-NONSTANDARD-WORDLIST SET-CURRENT\r
-\r
-: LOGON\r
-    logfid CLOSE-FILE DROP\r
-    S" HFORTH.LOG" W/O OPEN-FILE\r
-    ?DUP IF\r
-       DUP [ 2 iorOffset + ] LITERAL <>        \ file not found?\r
-       IF THROW THEN\r
-       2DROP S" HFORTH.LOG" W/O CREATE-FILE THROW TO logfid\r
-    ELSE\r
-       TO logfid\r
-       logfid FILE-SIZE THROW logfid REPOSITION-FILE THROW\r
-    THEN\r
-    CR ." All characters on screen will be saved in HFORTH.LOG until 'emit is revectored."\r
-    CR ." ÑÁ¡eµA ¥¡·¡\93\8bi¸a\97i·e ¡¡\96\81 'emit·¡ ¤a\8eá\8b¡ ¸å\8ca»¡ HFORTH.LOGµA \88\81\9f¡\96S\93¡\94a." CR\r
-    'emit ['] LogEMIT <> IF\r
-       'emit TO old'emit\r
-       ['] LogEMIT TO 'emit\r
-    THEN ;\r
-\r
-: LOGOFF\r
-    logfid CLOSE-FILE\r
-    invalid-fid TO logfid\r
-    old'emit TO 'emit ;\r
-\r
-LOGON\r
-\r
-SET-CURRENT  SET-ORDER\r
-BASE !\r
-\r
-CHAR " PARSE FILE" ENVIRONMENT?\r
-[IF]\r
-  0= [IF] << CON [THEN]\r
-[ELSE] << CON\r
-[THEN]\r
++          ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2\9f\94áÐe\94a.\r
+                   1 2 +\r
+           Àá\9cñ ¯¡Ç¡¡e 1\89Á 2\9f\94áÐe \88t 3·i \94ᣡµA µ©\9f¥\94a.\r
+-          ( \88t1 \88t2 -- \88t3 )\r
+           \88t1µA¬á \88t2\9fi ¨\85\94a.\r
+                   2 1 -\r
+           Àá\9cñ ¯¡Ç¡¡e 2µA¬á 1·i ¨\85 \88t 1·i \94ᣡµA µ©\9f¥\94a.\r
+*          ( \88t1 \88t2 -- \88t3 )\r
+           \88t1µA \88t2\9f\89³Ðe\94a.\r
+                   2 3 *\r
+           Àá\9cñ ¯¡Ç¡¡e \89³Ðe \88t 6·i \94ᣡµA µ©\9f¥\94a.\r
+/          ( \88t1 \88t2 -- \88t3 )\r
+           \88t1·i \88t2\9d¡ \90a\92\85\94a.\r
+                   6 2 /\r
+           Àá\9cñ ¯¡Ç¡¡e 6·i 2\9d¡ \90a\92\85 \88t 3·i \94ᣡµA µ©\9f¥\94a.\r
+MOD        ( \88t1 \88t2 -- \88t3 )\r
+           \88t1·i \88t2\9d¡ \90a\92\85 \90a á»¡\9f\8a\81Ðe\94a.\r
+                   8 3 MOD\r
+           Àá\9cñ ¯¡Ç¡¡e 8·i 3·a\9d¡ \90a\92\85 \90a á»¡ 2\9f\94ᣡµA µ©\9f¥\94a.\r
+\90a á»¡     ( \88t1 \88t2 -- \88t3 )\r
+           \88t1·i \88t2\9d¡ \90a\92\85 \90a á»¡\9f\8a\81Ðe\94a.\r
+                   8 3 \90a á»¡\r
+           Àá\9cñ ¯¡Ç¡¡e 8·i 3·a\9d¡ \90a\92\85 \90a á»¡ 2\9f\94ᣡµA µ©\9f¥\94a.\r
+.          ( \88t -- )\r
+           \94ᣡ·\81  \85 ¶á \88t·i ÑÁ¡eµA ¯³»¥®\81\9d¡ ¥¡·¥\94a.\r
+DUP        ( \88t -- \88\88t )\r
+           \94ᣡ·\81  \85 ¶á \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
+                   1 DUP\r
+           Àá\9cñ ¯¡Ç¡¡e 1·i \96\81 \88\81 \94ᣡµA µ©\9f¥\94a.\r
+¥A\8da       ( \88t -- \88\88t )\r
+           \94ᣡ·\81  \85 ¶á \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
+                   1 ¥A\8da\r
+           Àá\9cñ ¯¡Ç¡¡e 1·i \96\81 \88\81 \94ᣡµA µ©\9f¥\94a.\r
+OVER       ( \88t1 \88t2 -- \88t1 \88t2 \88t1 )\r
+           \94ᣡ·\81 \96\81 ¤å¼\81 \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
+                   1 2 OVER\r
+           Àá\9cñ ¯¡Ç¡¡e 1, 2, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
+\88å\90á       ( \88t1 \88t2 -- \88t1 \88t2 \88t1 )\r
+           "\88å\90á (¥A\8da)". \94ᣡ·\81 \96\81 ¤å¼\81 \88t·i ¥A\8da¬á \94ᣡµA µ©\9f¥\94a.\r
+                   1 2 \88å\90á\r
+           Àá\9cñ ¯¡Ç¡¡e 1, 2, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
+SWAP       ( \88t1 \88t2 -- \88t2 \88t1 )\r
+           \94ᣡ·\81  \85 ¶á \96\81 \88\81 ¸a\9f¡\9fi ¤a\8e\85\94a.\r
+                   1 2 SWAP\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA\93e 1·¡, ¤a\9d¡ £»µA 2\88a ·¶\94a.\r
+¤a\8e¡       ( \88t1 \88t2 -- \88t2 \88t1 )\r
+           \94ᣡ·\81  \85 ¶á \96\81 \88\81 ¸a\9f¡\9fi ¤a\8e\85\94a.\r
+                   1 2 ¤a\8e¡\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA\93e 1·¡, ¤a\9d¡ £»µA 2\88a ·¶\94a.\r
+DROP       ( \88t1 -- )\r
+           \94ᣡ·\81  \85 ¶á \88t·i ¤á\9f¥\94a.\r
+¤á\9da       ( \88t1 -- )\r
+           \94ᣡ·\81  \85 ¶á \88t·i ¤á\9f¥\94a.\r
+ROT        ( \88t1 \88t2 \88t3 -- \88t2 \88t3 \88t1 )\r
+           \94ᣡ·\81  \85 ¶á ­A \88t·i \95©\9f¥\94a. ­A ¤å¼\81 \88t·i \8cá\90\81  \85 ¶áµA µ©\9f¥\94a.\r
+                   1 2 3 ROT\r
+           Àá\9cñ ¯¡Ç¡¡e 2, 3, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
+\95©\9da       ( \88t1 \88t2 \88t3 -- \88t2 \88t3 \88t1 )\r
+           \94ᣡ·\81  \85 ¶á ­A \88t·i \95©\9f¥\94a. ­A ¤å¼\81 \88t·i \8cá\90\81  \85 ¶áµA µ©\9f¥\94a.\r
+                   1 2 3 \95©\9da\r
+           Àá\9cñ ¯¡Ç¡¡e 2, 3, 1·i Àa\9d\81\9d¡ \94ᣡµA µ©\9f¥\94a.\r
+>R         ( \88t\94ᣡ: \88t -- ; \96A\95©·¡\94ᣡ:  -- \88t )\r
+           \88t\94ᣡ·\81 \88t·i \96A\95©·¡\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
+           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
+           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
+>\96A        ( \88t\94ᣡ:  \88t -- ; \96A\95©·¡\94ᣡ:  -- \88t )\r
+           \88t\94ᣡ·\81 \88t·i \96A\95©·¡\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
+           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
+           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
+R>         ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- )\r
+           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
+           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
+           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
+\96A>        ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- )\r
+           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ µ«\8b¥\94a. 'DO ... LOOP'\90a ' \91 ...\r
+           \95©´a'\88\96A\95©·¡\94ᣡ\9fi ¬a¶wÐa£a\9d¡  LOOPµÁ '\95©´a' ¸åµA \96A\95©·¡\94ᣡ\9fi\r
+           ¶¥¬wÈ\81\9d¡ \95©\9d\91½´a´¡ Ðe\94a.\r
+R@         ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- \88t )\r
+           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ ¥A\8f¥\94a.\r
+\96A@        ( \88t\94ᣡ:  -- \88t ; \96A\95©·¡\94ᣡ: \88t -- \88t )\r
+           \96A\95©·¡\94ᣡ·\81 \88t·i \88t\94ᣡ\9d¡ ¥A\8f¥\94a.\r
+=          ( \88t1 \88t2 -- -1|0 )\r
+                   5 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¡\89¡\r
+                   6 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¥\94a.\r
+==         ( \88t1 \88t2 -- -1|0 )\r
+                   5 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¡\89¡\r
+                   6 5 =   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¥\94a.\r
+>          ( \88t1 \88t2 -- -1|0 )\r
+                   5 6 >   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¡\89¡\r
+                   5 5 >   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¡\89¡\r
+                   6 5 >   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¥\94a.\r
+<          ( \88t1 \88t2 -- -1|0 )\r
+                   5 6 <   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA -1·i µ©\9f¡\89¡\r
+                   5 5 <   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¡\89¡\r
+                   6 5 <   Àá\9cñ ¯¡Ç¡¡e \94ᣡµA  0·i µ©\9f¥\94a.\r
+AND        ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
+\90{Ðq\8dA     ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
+OR         ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡Ðs·i \94ᣡµA µ©\9f¥\94a.\r
+\90{´a¶\89\9cá    ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe \91¥\9f¡Ðs·i \94ᣡµA µ©\9f¥\94a.\r
+XOR        ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe ¤\81Èa¸â \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
+\90{\98a\9d¡     ( \88t1 \88t2 -- \88t3 )\r
+           \88t1\89Á \88t2·\81 \88\90{(bit)µA \94\81Ðe ¤\81Èa¸â \91¥\9f¡\89³·i \94ᣡµA µ©\9f¥\94a.\r
+WORDS      ( -- )\r
+           ³i ®\81 ·¶\93e ¯¡Ç± i\97i·i ÑÁ¡eµA ¥¡·¥\94a.\r
+ iÍa       ( -- )\r
+           ³i ®\81 ·¶\93e ¯¡Ç± i\97i·i ÑÁ¡eµA ¥¡·¥\94a.\r
+.S         ( -- )\r
+           \88t\94ᣡ·\81 \88t\97i·i ¥¡·¥\94a.\r
+.\94ᣡ      ( -- )\r
+           \88t\94ᣡ·\81 \88t\97i·i ¥¡·¥\94a.\r
+BYE        ( -- )\r
+           \93\91·i \8f{\90\85\94a.\r
+\8f{         ( -- )\r
+           \93\91·i \8f{\90\85\94a.\r
+CR         ( -- )\r
+           ÑÁ¡eµA ¬\81 º\89·i  e\97e\94a.\r
+\94a·qº\89     ( -- )\r
+           ÑÁ¡eµA ¬\81 º\89·i  e\97e\94a.\r
+HELP       ( -- )\r
+           HELP \94a·q·\81 \90{ iµA \94\81Ðe \95¡¶\91 i·i Ìa·© 'HFORTH.HLP'µA¬á Àx´a ¥¡·¥\94a.\r
+                   HELP DUP\r
+           Àá\9cñ ¯¡Ç¡¡e '¥A\8da'\9fi ´á\98ý\89A ³a\93e»¡ ÑÁ¡eµA ¥¡·¥\94a.\r
+\95¡¶\91 i     ( -- )\r
+           HELP \94a·q·\81 \90{ iµA \94\81Ðe \95¡¶\91 i·i Ìa·© 'HFORTH.HLP'µA¬á Àx´a ¥¡·¥\94a.\r
+                   \95¡¶\91 i ¥A\8da\r
+           Àá\9cñ ¯¡Ç¡¡e '¥A\8da'\9fi ´á\98ý\89A ³a\93e»¡ ÑÁ¡eµA ¥¡·¥\94a.\r
+CLS        ( -- )\r
+           ÑÁ¡e·i »¡¶\85\94a.\r
+ÑÁ¡e»¡¶¡    ( -- )\r
+           ÑÁ¡e·i »¡¶\85\94a.\r
+CONSTANT    ( \88t -- )\r
+           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- \88t )\r
+           \94ᣡ·\81 \88t·i °á¬á '\8a\88·e\88t' \94a·qµA \90aµ¡\93e ·¡\9fq·a\9d¡ \8a\88·e\88t(¬w®\81)·i\r
+            e\97e\94a.\r
+                   5 CONSTANT FIVE\r
+           Àá\9cñ ¯¡Ç¡¡e 'FIVE'\9ca\93e ·¡\9f\81 \8a\88·e\88t·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
+                   FIVE\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA 5\9fi µ©\9f¥\94a.\r
+\8a\88·e\88t     ( \88t -- )\r
+           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- \88t )\r
+           \94ᣡ·\81 \88t·i °á¬á '\8a\88·e\88t' \94a·qµA \90aµ¡\93e ·¡\9fq·a\9d¡ \8a\88·e\88t(¬w®\81)·i\r
+            e\97e\94a.\r
+                   5 \8a\88·e\88\94a¬õ\r
+           Àá\9cñ ¯¡Ç¡¡e '\94a¬õ'·¡\9ca\93e ·¡\9f\81 \8a\88·e\88t·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
+                   \94a¬õ\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡ·\81  \85 ¶áµA 5\9fi µ©\9f¥\94a.\r
+VARIABLE    ( -- )\r
+           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- º\81­¡ )\r
+                   VARIABLE AGE\r
+           Àá\9cñ ¯¡Ç¡¡e 'AGE'\9ca\93e ·¡\9f\81 ¢\81\9fe\88t(¥e®\81)·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
+                   AGE\r
+           Àá\9cñ ¯¡Ç¡¡e 'AGE'·\81 \88\81 º\81­¡\9f\94ᣡ·\81  \85 ¶áµA µ©\9f¥\94a.\r
\81\9fe\88t     ( -- )\r
+           »¡·e \90{ i·¡ ¯¡Åa»© \98\81: ( -- º\81­¡ )\r
+                   ¢\81\9fe\88\90a·¡\r
+           Àá\9cñ ¯¡Ç¡¡e '\90a·¡'\9ca\93e ·¡\9f\81 ¢\81\9fe\88t(¥e®\81)·i  e\97e\94a. \8ba\9f¡\89¡ \90a¬á\r
+                   \90a·¡\r
+           Àá\9cñ ¯¡Ç¡¡e '\90a·¡'·\81 \88\81 º\81­¡\9f\94ᣡ·\81  \85 ¶áµA µ©\9f¥\94a.\r
+!          ( \88t º\81­¡ --  )\r
+           \94ᣡ·\81  \85 ¶áµA ·¶\93e º\81­¡µA \94ᣡ·\81 \96\81 ¤å¼\81 \88t·i °á\90ý\93e\94a.\r
+                   16 \90a·¡ !\r
+           Àá\9cñ ¯¡Ç¡¡e ¢\81\9fe\88t '\90a·¡'µA 16·i °á\90ý\93e\94a.\r
+@          ( º\81­¡ -- \88t )\r
+           \94ᣡ·\81  \85 ¶áµA ·¶\93e º\81­¡µA \97\88t·i \94ᣡµA µ©\9f¥\94a.\r
+                   \90a·¡ @\r
+           Àá\9cñ ¯¡Ç¡¡e ¢\81\9fe\88t '\90a·¡'·\81 \88t·i \94ᣡµA µ©\9f¥\94a.\r
+:          ( -- )\r
+           \90{ i »µ\8b¡\9fi ¯¡¸bÐe\94a.\r
+                   : ¬\81\90{ i   \90{ i1 \90{ i2 \90{ i3 ;\r
+           Àá\9cñ °á¬á ¬\81 \90{ i '¬\81\90{ i'·\81 ¸÷·\81\9fi ¯¡¸bÐe\94a.\r
+;          ( -- )\r
+           \90{ i »µ\8b¡\9f\8f{\90\85\94a.\r
+                   : ¬\81\90{ i   \90{ i1 \90{ i2 \90{ i3 ;\r
+           Àá\9cñ ³e\94a.\r
+(          ( -- )\r
+           ')' \90aµ© \98\81\8ca»¡ \8bi·i ¯¡Ç¡»¡ ´g\89¡ \88å\90á\9aå\94a. '('\95¡ Ða\90\81 \90{ i·¡£a\9d¡\r
+           \96áµA §¥Äe·¡ ¤e\97a¯¡ Ða\90a ·¡¬w ·¶´á´¡ Ðe\94a.\r
+                   ( ·¡\88õ·e \94õ¦\9b·± i·³\93¡\94a.)\r
+           Àá\9cñ ³e\94a. º\81·\81: '('\93e ¯¡Ç± i·¡»¡ e ')'\93e ¯¡Ç± i·¡ ´a\93¡\94a.\r
+."          ( -- )\r
+           '"'·¡ \90aµ© \98\81\8ca»¡·\81 \8bi·i ÑÁ¡eµA ¥¡·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a.\r
+                   : ¯¡Ðñ   ." ·¡ \8bi·¡ ÑÁ¡eµA ¥¡µa»³\93¡\94a." ;\r
+           Àá\9cñ ¯¡Ç¥ \94a·q\r
+                   ¯¡Ðñ\r
+           ·¡\9ca\89¡ ¯¡Ç¡¡e ÑÁ¡eµA '·¡ \8bi·¡ ÑÁ¡eµA ¥¡µa»³\93¡\94a.'\9fi ¥¡·¥\94a.\r
+IF         ¯¡Åa»© \98\81: ( \88t -- )\r
+           'IF ... THEN'\90a 'IF ... ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
+           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a. 'IF ... THEN'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á\r
+           \88t·¡ 0·¡ ´a\93© \98\81 e 'IF ... THEN' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a. 'IF ...\r
+           ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e 'IF ...\r
+           THEN' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¡\89¡, \88t·¡ 0·¡¡e 'ELSE ... THEN' ¬a·¡·\81\r
+           \90{ i·¡ ¯¡Åa»¥\94a.\r
+                   : ?DUP   DUP IF DUP THEN ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   3 ?DUP\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
+                   0 ?DUP\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 0·i 1 \88\81 µ©\9f¥\94a.\r
+¡e         ¯¡Åa»© \98\81: ( \88t -- )\r
+           '¡e  ... \9ca'\90a '¡e ... ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
+           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a. '¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á\r
+           \88t·¡ 0·¡ ´a\93© \98\81 e '¡e ... \9ca' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a. '¡e ...\r
+           ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¡¡e \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e '¡e\r
+           ... \9ca' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¡\89¡, \88t·¡ 0·¡¡e '´a\93¡¡e ... \9ca' ¬a·¡·\81\r
+           \90{ i·¡ ¯¡Åa»¥\94a.\r
+                   : ?¥A\8da   ¥A\8da ¡e ¥A\8d\9ca ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   3 ?¥A\8da\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
+                   0 ?¥A\8da\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 0·i 1 \88\81 µ©\9f¥\94a.\r
+ELSE       ¯¡Åa»© \98\81: ( -- )\r
+           'IF ... ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a. \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e 'IF ... ELSE' ¬a·¡·\81 \90{ i·¡\r
+           ¯¡Åa»¡\89¡, \88t·¡ 0·¡¡e 'ELSE ... THEN' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a.\r
+                   : TEST   IF DUP ELSE DROP THEN ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   3 1 TEST\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
+                   3 0 TEST\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA ´a¢\81 \88õ\95¡ µ©\9f¡»¡ ´g\93e\94a.\r
+´a\93¡¡e     ¯¡Åa»© \98\81: ( -- )\r
+           '¡e ... ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a. \94ᣡ·\81  \85 ¶á \88t·¡ 0·¡ ´a\93¡¡e '¡e ... ´a\93¡¡e' ¬a·¡·\81 \90{ i·¡\r
+           ¯¡Åa»¡\89¡,  \88t·¡ 0·¡¡e '´a\93¡¡e ... \9ca' ¬a·¡·\81 \90{ i·¡ ¯¡Åa»¥\94a.\r
+                   : ¯¡Ðñ   ¡e ¥A\8da ´a\93¡¡e ¤á\9d\9ca ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   3 1 ¯¡Ðñ\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA 3·i 2 \88\81 µ©\9f¥\94a.\r
+                   3 0 ¯¡Ðñ\r
+           Àá\9cñ ¯¡Ç¡¡e \94ᣡµA ´a¢\81 \88õ\95¡ µ©\9f¡»¡ ´g\93e\94a.\r
+THEN       ¯¡Åa»© \98\81: ( -- )\r
+           'IF ... THEN'\90a 'IF ... ELSE ... THEN'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
+           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+\9ca         ¯¡Åa»© \98\81: ( -- )\r
+           '¡e ... \9ca'\90a '¡e ... ´a\93¡¡e ... \9ca'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
+           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+ENDIF      ¯¡Åa»© \98\81: ( -- )\r
+           'IF ... ENDIF'\90a 'IF ... ELSE ... ENDIF'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡\r
+           ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+BEGIN      ¯¡Åa»© \98\81: ( -- )\r
+           'BEGIN ... UNTIL'\90a 'BEGIN ... WHILE ... REPEAT'·\81 ¼b·a\9d¡ ³aµa\r
+           \88á\97s¯¡Ç±·\81 Àá·q·i Îa¯¡Ðe\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+·¡¹A¦\81Èá    ¯¡Åa»© \98\81: ( -- )\r
+           '·¡¹A¦\81Èá  ... \8ca»¡'\90a '·¡¹A¦\81Èá ... \95·´e... \88á\97\81\81 ¼b·a\9d¡ ³aµa\r
+           \88á\97s¯¡Ç±·\81 Àá·q·i Îa¯¡Ðe\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+UNTIL      ¯¡Åa»© \98\81: ( \88t -- )\r
+           'BEGIN ... UNTIL'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+           '\88t'·¡ 0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a 'UNTIL' \94a·q·\81 \90{ i·¡ ¯¡Åa»¡\89¡\r
+           '\88t'·¡ 0·¡¡e 'BEGIN ... UNTIL' ¬a·¡·\81 \90{ i·i \88á\97s¯¡Ç¥\94a.\r
+               : COUNTDOWN   BEGIN DUP . 1 - DUP 0 = UNTIL ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+               5 COUNTDOWN\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
+\8ca»¡       ¯¡Åa»© \98\81: ( \88t -- )\r
+           '·¡¹A¦\81Èá ... \8ca»¡'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81 ·¶\94a.\r
+           '\88t'·¡ 0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a '\8ca»¡' \94a·q·\81 \90{ i·¡ ¯¡Åa»¡\89¡\r
+           '\88t'·¡ 0·¡¡e '·¡¹A¦\81Èá ... \8ca»¡' ¬a·¡·\81 \90{ i·i \88á\97s¯¡Ç¥\94a.\r
+               : ¦\81Èá.´a\9c\81\9d¡.­A   ·¡¹A¦\81Èá ¥A\8da . 1 - ¥A\8da 0 = \8ca»¡ ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+               5 ¦\81Èá.´a\9c\81\9d¡.­A\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
+WHILE      ¯¡Åa»© \98\81: ( \88t -- )\r
+           'BEGIN ... WHILE ... REPEAT'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
+           ³i ®\81 ·¶\94a. '\88t'·¡  0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·¡ \89\81­¢\96A´á 'WHILE' \94a·q·\81\r
+           \90{ i·¡ ¯¡Åa»¡\89¡ '\88t'·¡ 0·¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a 'REPEAT' \94a·q·\81\r
+           \90{ i·¡ ¯¡Åa»¥\94a.\r
+               : COUNTDOWN   BEGIN DUP WHILE DUP . 1 - REPEAT ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+               5 COUNTDOWN\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
+\95·´e       ¯¡Åa»© \98\81: ( \88t -- )\r
+           '·¡¹A¦\81Èá ...  \95·´e... \88á\97\81\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
+           ³i ®\81 ·¶\94a. '\88t'·¡  0·¡ ´a\93¡¡e \88á\97s¯¡Ç±·¡ \89\81­¢\96A´á '\95·´e' \94a·q·\81\r
+           \90{ i·¡ ¯¡Åa»¡\89¡ '\88t'·¡ 0·¡¡e \88á\97s¯¡Ç±·i ¤õ´á\90a '\88á\97\81\94a·q·\81\r
+           \90{ i·¡ ¯¡Åa»¥\94a.\r
+               : ¦\81Èá.´a\9c\81\9d¡.­A   ·¡¹A¦\81Èá ¥A\8d\95·´e ¥A\8da . 1 - \88á\97\81 ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+               5 ¦\81Èá.´a\9c\81\9d¡.­A\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '5 4 3 2 1'·i ¥¡·¥\94a.\r
+REPEAT     ¯¡Åa»© \98\81: ( -- )\r
+           'BEGIN ... WHILE ... REPEAT'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
+           ³i ®\81 ·¶\94a. 'BEGIN' \94a·q·a\9d¡ \88á\97s¯¡Ç±·i \89\81­¢Ðe\94a.\r
+\88á\97\81     ¯¡Åa»© \98\81: ( -- )\r
+           '·¡¹A¦\81Èá ...  \95·´e... \88á\97\81\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e\r
+           ³i ®\81 ·¶\94a. '·¡¹A¦\81Èá' \94a·q·a\9d¡ \88á\97s¯¡Ç±·i \89\81­¢Ðe\94a.\r
+DO         ¯¡Åa»© \98\81: ( \88t1 \88t2 -- )\r
+           ¤e\97a¯¡ 'DO ... LOOP'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ 'DO ... LOOP' ¬a·¡·\81\r
+           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
+                   : 5STARS   5 0 DO ." *" LOOP ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   5STARS\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '*****'\88a Îa¯¡\96E\94a.\r
\91         ¯¡Åa»© \98\81: ( \88t1 \88t2 -- )\r
+           ¤e\97a¯¡ ' \91 ... \95©´a'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ ' \91 ... \95©´a' ¬a·¡·\81\r
+           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
+                   : \94a¬õ¥i   5 0  \91 ." *" \95©´a ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   \94a¬õ¥i\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '*****'\88a Îa¯¡\96E\94a.\r
+LOOP       ¯¡Åa»© \98\81: ( -- )\r
+           ¤e\97a¯¡ 'DO ... LOOP'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ 'DO ... LOOP' ¬a·¡·\81\r
+           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
+\95©´a       ¯¡Åa»© \98\81: ( -- )\r
+           ¤e\97a¯¡ ' \91 ... \95©´a'·\81 ¼b·a\9d¡ ³a·¥\94a.  i»µ\8b¡ ¬wÈ\81µA¬á e ³i ®\81\r
+           ·¶\94a. '\88t2'\88a Ða\90a³¢ Äá¹a¬á '\88t1'·¡ \96\98\81\8ca»¡ ' \91 ... \95©´a' ¬a·¡·\81\r
+           \90{ i·i \88á\97s¯¡Ç¥\94a.\r
+I          ¯¡Åa»© \98\81: ( -- \88t )\r
+            \91\95©·¡ \88a\9f¡Ç±®\81\9d¡ ¤e\97a¯¡ 'DO ... LOOP' ´eµA¬á ³e\94a.\r
+           '\88t2 \88t1 DO I LOOP'µA¬á '\88a'\93e Àa\9d\81\9d¡ '\88t1'µA¬á '\88t2'-1 \8ca»¡·\81\r
+           \88t\97i·i \94ᣡµA µ©\9f¥\94a.\r
+                   : COUNT   0 DO I . LOOP ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   5 COUNT\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '0 1 2 3 4'\9fi ¥¡·¥\94a.\r
+\88a         ¯¡Åa»© \98\81: ( -- \88t )\r
+           "\88a(\9f¡Ç±®\81)."  \91\95©·¡ \88a\9f¡Ç±®\81\9d¡ ¤e\97a¯¡ ' \91 ... \95©´a' ´eµA¬á ³e\94a.\r
+           '\88t2 \88t1  \91 \88\95©´a'µA¬á '\88a'\93e Àa\9d\81\9d¡ '\88t1'µA¬á '\88t2'-1 \8ca»¡·\81\r
+           \88t\97i·i \94ᣡµA µ©\9f¥\94a.\r
+                   : ¤å.­A\8b¡   0  \91 \88a . \95©´a ;\r
+           Àá\9cñ \90{ i·i »µ\89¡\r
+                   5 ¤å.­A\8b¡\r
+           Àá\9cñ ¯¡Ç¡¡e ÑÁ¡eµA '0 1 2 3 4'\9fi ¥¡·¥\94a.\r
+IMMEDIATE   ( -- )\r
+           ¤w\8bq »¡·e  i·i  i»µ\8b¡ ¬wÈ\81µA¬á\95¡ ¯©Ð\97\96A\93e '¤a\9d¡ i'\9d¡  e\97e\94a.\r
+¤a\9d¡ i     ( -- )\r
+           ¤w\8bq »¡·e  i·i  i»µ\8b¡ ¬wÈ\81µA¬á\95¡ ¯©Ð\97\96A\93e '¤a\9d¡ i'\9d¡  e\97e\94a.\r
+'           ( -- º\81­¡ )\r
+           "'" \94a·qµA \90aµ¡\93\90{ i·\81 º\81­¡\9f\94ᣡµA \90q\8b¥\94a.\r
+\88{·e i     ( º\81­¡ -- )\r
+           '\88{·e i' \94a·qµA \90aµ¡\93e ·¡\9fq·a\9d¡, \94ᣡµA º\81­¡\88a ·¶\93\90{ i\89Á \99¢\88{·e\r
+           ·©·i Ða\93\90{ i·i  e\97e\94a.\r
+                   ' DUP  \88{·e i  ¥A\8da\r
+           Àá\9cñ ¯¡Ç¡¡e DUP µÁ \88{·e ·©·i Ða\93\90{ i '¥A\8da'\9fi  e\97e\94a.\r
\89ÑÁ¡e     ( º\89®\81 -- )\r
+           ´a\9c\81¬á¦\81Èá \8bi¸a\88a ¥¡·© º\89 ®\81\9fi ¸÷Ðe\94a.\r
+sin*       ( \8b©·¡ \88b\95¡ -- \8b©·¡*sin[\88b\95¡] )\r
+           \8b©·¡µÁ \88b\95¡\9d¡¦\81Èá \8b©·¡µA ¬q\88b§¡\9f\89³Ðe \88t·i \89\81¬eÐe\94a.\r
+cos*       ( \8b©·¡ \88b\95¡ -- \8b©·¡*cos[\88b\95¡] )\r
+           \8b©·¡µÁ \88b\95¡\9d¡¦\81Èá \8b©·¡µA ¬q\88b§¡\9f\89³Ðe \88t·i \89\81¬eÐe\94a.\r
+\9d¡.\8ba´á     ( x y -- )\r
+           »¡\8bq ¸a\9f¡µA¬á \88á¦\82¹ÁÎa (x,y)\9d¡ ¬å·i \8bu\93e\94a. ÑÁ¡eµA \8bq·i \8bu\93\88a¸w\r
+           \8b¡¥¥¸â·¥ \90{ i·¡\94a. \88á¦\82 ¶\91»¢·± \90{ i '¹A¸a\9f¡\9d¡'µÁ ' eÇq.\88a'µA\r
+           ³a·¥\94a.\r
+\88á¦\82¥¡µa    ( -- )\r
+           ÑÁ¡eµA \88á¦\82·¡ ·¶·a¡e »¡¶\81\89¡ ´ô·a¡e ¥¡·¥\94a.\r
+¤wз       ( -- º\81­¡ )\r
+           ¢\81\9fe\88t '¤wз'. \88á¦\82·\81 ¤wз·¡ \94q\89a ·¶\94a.\r
+\88a\9d¡¶áá    ( -- º\81­¡ )\r
+           ¢\81\9fe\88t '\88a\9d¡¶áá'. \88á¦\82·\81 x ¹ÁÎa\88\94q\89a ·¶\94a.\r
+­A\9d¡¶áá    ( -- º\81­¡ )\r
+           ¢\81\9fe\88t '\88a\9d¡¶áá'. \88á¦\82·\81 y ¹ÁÎa\88\94q\89a ·¶\94a.\r
+ eÇq.\88a     ( \88a\9d¡\88á\9f¡ ­A\9d¡\88á\9f¡ -- )\r
+           \88á¦\82·¡ »¡\8bq ¹ÁÎa (x,y)µA¬á (x+\88a\9d¡\88á\9f¡, y+­A\9d¡\88á\9f¡)\9d¡ ¶\91»¢·¥\94a.\r
+           \90{ i '´|·a\9d¡'µÁ  '\96á\9d¡'µA ³a·¥\94a.\r
+__µ¡\9fe½¢.ÑÉ\8d© ( \88á\9f¡ ÒU®\81 -- )\r
+           \88á\9f¡ eÇq \88a\89¡ 10 \95¡ µ¡\9fe½¢·a\9d¡ \95¡\93\88õ·i ÒU®\81 eÇq \96\89·¡Ðe\94a.\r
+           \90{ i 'µ¡\9fe½¢.ÑÉ\8d©'µA ³a·¥\94a.\r
+__¶E½¢.ÑÉ\8d© ( \88á\9f¡ ÒU®\81 -- )\r
+           \88á\9f¡ eÇq \88a\89¡ 10 \95¡ ¶E½¢·a\9d¡ \95¡\93\88õ·i ÒU®\81 eÇq \96\89·¡Ðe\94a.\r
+           \90{ i '¶E½¢.ÑÉ\8d©'µA ³a·¥\94a.\r
+\8a\8a\89A       ( -- )\r
+           \88á¦\82·¡ »¡\90a\88e ¸aÂá\9f\8a\8a\89\8ba\9f¥\94a.\r
+\88a\93i\89A     ( -- )\r
+           \88á¦\82·¡ »¡\90a\88e ¸aÂá\9f\88a\93i\89\8ba\9f¥\94a.\r
\95\97i´á     ( -- )\r
+           \88á¦\82·¡ »¡\90a\88e ¸aÂá\9f\90q\8b¡»¡ ´g\93e\94a.\r
\95\90\81\9da     ( -- )\r
+           \88á¦\82·¡ º\89·i \8ba·a¡a \88e\94a.\r
+ÑÁ¡e»¡¶¡    ( -- )\r
+           \88á¦\82·i ¹A¸a\9f¡\9d¡ ¥¡\90\81\89¡ ÑÁ¡e·i »¡¶\85\94a.\r
+½¡\88\85ÑÁ¡e    ( -- )\r
+           \8bi¸a\9fi ´a\9c\81 8 º\89µA e ¥¡·¥\94a.\r
+µ¥ÑÁ¡e     ( -- )\r
+           \8bi¸a\9fi ¸åÁA ÑÁ¡eµA ¥¡·¥\94a.\r
+¹A¸a\9f¡\9d¡    ( -- )\r
+           \88á¦\82·\81  á\9f¡\9fi ¶á½¢·a\9d¡ Ð\81¬á ÑÁ¡e \88\85\95A\9d¡ ¥¡\90\81\89¡ ÑÁ¡e·i »¡¶\85\94a.\r
+\95¡.µ¡\9fe½¢   ( \88b\95¡ -- )\r
+           \88á¦\82·\81 ¤wз·i \88b\95¡ eÇq µ¡\9fe½¢·a\9d¡ \95©\9f¥\94a.\r
+\95¡.¶E½¢     ( \88b\95¡ -- )\r
+           \88á¦\82·\81 ¤wз·i \88b\95¡ eÇq ¶E½¢·a\9d¡ \95©\9f¥\94a.\r
+´|·a\9d¡     ( \88á\9f¡ -- )\r
+           \88á¦\82·¡ \88á\9f¡ eÇq ´|·a\9d¡ \88e\94a.\r
+\96á\9d¡       ( \88á\9f¡ -- )\r
+           \88á¦\82·¡ \88á\9f¡ eÇq \96á\9d¡ \88e\94a.\r
+µ¡\9fe½¢.ÑÉ\8d© ( ¤e»¡\9f\88b\95¡ -- )\r
+           º\81´á»¥ ¤e»¡\9fq\89Á \88b\95¡\9d¡ µ¡\9fe½¢·a\9d¡ ÑÉ\8d©·i \8ba\9f¥\94a.\r
+µ¡\9fe½¢.¶¥   ( ¤e»¡\9fq -- )\r
+           º\81´á»¥ ¤e»¡\9fq·a\9d¡ µ¡\9fe½¢·a\9d¡ \95·\8ba\9ca£¡\9f\8ba\9f¥\94a.\r
+¶E½¢.ÑÉ\8d©   ( ¤e»¡\9f\88b\95¡ -- )\r
+           º\81´á»¥ ¤e»¡\9fq\89Á \88b\95¡\9d¡ ¶E½¢·a\9d¡ ÑÉ\8d©·i \8ba\9f¥\94a.\r
+¶E½¢.¶¥     ( ¤e»¡\9fq -- )\r
+           º\81´á»¥ ¤e»¡\9fq·a\9d¡ ¶E½¢·a\9d¡ \95·\8ba\9ca£¡\9f\8ba\9f¥\94a.\r
+\91A¡¡       ( Ça\8b¡ --\r
+           º\81´á»¥ Ça\8b¡·\81 \91A¡¡\9f\8ba\9f¥\94a.\r
+\89sÃ¥\91A¡¡    ( -- )\r
+           \88b ¥e·\81 \8b©·¡\88a 100, 200, 300, 400 ·¥ \91A¡¡\9f\89sÁa \8ba\9f¥\94a.\r
+\94a·¡´a¡¥\97a  ( -- )\r
+           \94a·¡´a¡¥\97a ¡¡´··i \8ba\9f¥\94a.\r
+\8bµ¤i       ( Ça\8b¡ -- )\r
+           \8bµ¤i ¡¡´··i \8ba\9f¥\94a.\r
+µa¬õ\8bµ¤i    ( Ça\8b¡ -- )\r
+           60 \95¡³¢ \95©´a\88a¡a \8bµ¤i 6 \88\81\9f\8ba\9f¥\94a.\r
+¤a\9cq\88\81§¡    ( -- )\r
+           ¤a\9cq\88\81§¡ ¡¡´··i \8ba\9f¥\94a.\r
+\8d¹·¼       ( Ça\8b¡ -- )\r
+           \8d¹·¼ ¡¡´··i \8ba\9f¥\94a.\r
+\8d¹         ( Ça\8b¡ -- )\r
+           \8d¹·¼ 8 \88\81·¥ \8d¹·i \8ba\9f¥\94a.\r
+\94a\9fe\8d¹·¼    ( Ça\8b¡ -- )\r
+           \94a\9fe ¡¡´··\81 \8d¹·¼·i \8ba\9f¥\94a.\r
+\94a\9fe\8d¹     ( Ça\8b¡ -- )\r
+           \8d¹·¼ 6 \88\81·¥ \8d¹·i \8ba\9f¥\94a.\r
\95¬i       ( Ça\8b¡ -- )\r
+           ¢\89\89i ¡¡´··i \8ba\9f¥\94a.\r
\81         ( Ça\8b¡ -- )\r
+           Ð\81 ¡¡´··i \8ba\9f¥\94a.\r
+\88bÑw       ( Ça\8b¡ ¡¡¬á\9f¡®\81 -- )\r
+           ¸÷\94a\88bÑw·i \8ba\9f¥\94a.\r
+¥i         ( ¥e·\81\81 ÒU®\81 -- )\r
+           ¥i ¡¡´··i \8ba\9f¥\94a.\r
+\94a\88bÑw     ( Ça\8b¡ \88b\95¡ -- )\r
+           Ça\8b¡µÁ \88b\95¡µA \98a\9ca µa\9cá ¡¡´··\81 \94a\88bÑw\89Á ¥i ¡¡´··i \8ba\9f¥\94a.\r
+\94a\88bÑw¸a\9cw5 ( -- )\r
+           \90{ i '\94a\88bÑw'·i ·¡¶wÐe ¸a\9cw\r
+\94a\88bÑw¸a\9cw4 ( -- )\r
+           \90{ i '\94a\88bÑw'·i ·¡¶wÐe \94a\9fe ¸a\9cw\r
+\94a\88bÑw¸a\9cw12 ( -- )\r
+           \90{ i '\94a\88bÑw'·i ·¡¶wÐe \99¡ \94a\9fe ¸a\9cw\r
+\90\81       ( \88a»¡\88b\95¡ \88a»¡\8b©·¡ \88a»¡Ã¡\8b¡®\81 -- )\r
+           ¯a¯a\9d¡\9f\96\89\9cá¬á (recursive call) \90\81 ¡¡´··i \8ba\9f¥\94a.\r
+§¡\93iÇa\8b¡    ( -- º\81­¡ )\r
+           \90{ i '¶w'µA¬á ¬a¶wÐa\93e ¢\81\9fe\88t\r
+¶w         ( \90a·¡ -- )\r
+           ¯a¯a\9d¡\9f\96\89\9cá¬á ¶w\8ba\9f±(dragon curve)·i \8ba\9f¥\94a.\r
diff --git a/msdos.f b/msdos.f
index e74b9aa..a37ebd2 100644 (file)
--- a/msdos.f
+++ b/msdos.f
@@ -490,7 +490,7 @@ END-CODE
     updated IF\r
       current-block# 1K UM* block-fid REPOSITION-FILE THROW\r
       block-buffer 1K  block-fid WRITE-FILE THROW\r
-      block-fid FLUSH-FILE\r
+      block-fid FLUSH-FILE THROW\r
       0 TO updated\r
     THEN ;\r
 \r
@@ -845,7 +845,7 @@ DECIMAL
       sp0 sp!\r
     AGAIN ;\r
 \r
-: BYE  block-fid FLUSH-FILE  BYE ;\r
+: BYE   block-fid FLUSH-FILE THROW  BYE ;\r
 \r
 NONSTANDARD-WORDLIST SET-CURRENT\r
 \r
index cb7a4db..d8d2797 100644 (file)
@@ -4,6 +4,8 @@
 \\r
 \ by Wonyong Koh\r
 \\r
+; 1997. 7. 11.\r
+;       Fix D.R . Thank Benjamin Hoyt.\r
 \ 1997. 2. 28.\r
 \      Facelift to be used with other CPUs.\r
 \ 1996. 12. 6.\r
@@ -270,7 +272,7 @@ FORTH-WORDLIST SET-CURRENT
 \r
 \   D.R        ( d n -- )                      \ DOUBLE\r
 \              Display d right-justified in field of width n.\r
-: D.R  >R (d.) R> OVER - 0 MAX SPACES  TYPE ;\r
+: D.R   >R (d.) R> OVER -  SPACES  TYPE ;\r
 \r
 \   .R         ( n1 n2 -- )                    \ CORE EXT\r
 \              Display n right-justified in field of width n2.\r
diff --git a/sio.f b/sio.f
index 931e71b..1171497 100644 (file)
--- a/sio.f
+++ b/sio.f
 \\r
 \ 1996. 2. 9.\r
 \ Wonyong Koh\r
+\\r
+\ 1997. 6. 21\r
+\       Align 'IrptServ' according to new EXE structure.\r
 \r
 HEX\r
 \r
   3 CONSTANT IRQ       \ normally COM1 and COM3 use IRQ4,\r
                        \          COM2 and COM4 use IRQ3\r
-2F8 CONSTANT COMBASE   \ base address, 3F8 for COM1, 2F8 for COM2\r
+02F8 CONSTANT COMBASE   \ base address, 3F8 for COM1, 2F8 for COM2\r
                        \               3E8 for COM3, 2E8 for COM4\r
 \r
 : BINARY   2 BASE ! ;\r
@@ -119,6 +122,7 @@ BINARY
     MCR PC@  11110111 AND  MCR PC! ;\r
 \r
 DECIMAL\r
+\r
 1 10 LSHIFT CONSTANT RxBufSize \ receive buffer size = 2 ^ 10 (1024)\r
                                \ The buffer size should be power of 2.\r
 VARIABLE RxBuffer  RxBufSize ALLOT\r
@@ -127,7 +131,7 @@ VARIABLE RxHead
 VARIABLE RxTail\r
 VARIABLE RxOverflow\r
 \r
-1 8 LSHIFT CONSTANT TxBufSize  \ receive buffer size = 2 ^ 8 (256)\r
+1 8 LSHIFT CONSTANT TxBufSize   \ transmit buffer size = 2 ^ 8 (256)\r
                                \ The buffer size should be power of 2.\r
 CREATE TxBuffer  TxBufSize CHARS ALLOT\r
 VARIABLE #Tx\r
@@ -138,6 +142,7 @@ VARIABLE LSR@
 VARIABLE MSR@\r
 \r
 HEX\r
+\r
 : CLEAR-BUFFER\r
     DISABLE\r
     0 #Rx    !\r
@@ -203,6 +208,8 @@ END-CODE
 CREATE IrptTable\r
 ' ModemServ , ' TxServ , ' RxServ , ' LineServ ,\r
 \r
+HEX\r
+\r
 CODE IrptServ\r
     STI,                       \ Enable irpt\r
     AX PUSH,\r
@@ -214,14 +221,14 @@ CODE IrptServ
     CHAR " PARSE model" ENVIRONMENT? DROP\r
     CHAR " PARSE RAM Model" COMPARE 0= OR\r
     [IF]\r
-       DS AX MOV,\r
+       CS AX MOV,\r
        AX DS MOV,\r
     [THEN]\r
     CHAR " PARSE model" ENVIRONMENT? DROP\r
     CHAR " PARSE EXE Model" COMPARE 0=\r
     [IF]\r
-      CS:\r
-      0 ) AX MOV,              \ CS:0 contains data segment address\r
+      CS AX MOV,\r
+      1000 # AX ADD,            \ data segment follows after 64KB code segment\r
       AX DS MOV,\r
     [THEN]\r
     IIR # DX MOV,              \ identify irpt\r
@@ -298,8 +305,9 @@ VARIABLE TIMEOUT
     THEN ;\r
 \r
 DECIMAL\r
-       9600 BPS  NO PARITY  8 BITS  0 STOPBIT\r
+\r
 : TERM\r
+    19200 BPS  NO PARITY  8 BITS  0 STOPBIT\r
     CLEAR-BUFFER\r
     ATTACH-IRPT\r
     ENABLE-IRQ\r
@@ -310,3 +318,9 @@ DECIMAL
                       SER-OUT\r
               THEN\r
     AGAIN ;\r
+\r
+CHAR " PARSE FILE" ENVIRONMENT?\r
+[IF]\r
+  0= [IF] << CON [THEN]\r
+[ELSE] << CON\r
+[THEN]\r
index 5a1d910..7eaf5ab 100644 (file)
@@ -28,6 +28,15 @@ hForth cannot catch.
 Some bugs are fixed including RESTORE-INPUT.\r
 \r
 \r
+Changes from 0.9.9\r
+\r
+1997. 6. 30.\r
+      Add TRHOW after FLUSH-FILE in SAVE-BUFFERS and BYE in MSDOS.F.\r
+\r
+1997. 6. 23.\r
+      Fix pack" in HF86ROM.ASM and HF86RAM.ASM.\r
+      Fix SIO.F according to new EXE program structure.\r
+\r
 Changes from 0.9.7\r
 \r
 1997. 5. 26.\r
index ae4be7e..6bb529a 100644 (file)
@@ -27,6 +27,15 @@ dest
 RESTORE-INPUT·i §¡\9dµÐe ¡y \88a»¡ ¤é\9dA\9fi ¸s´v¯s\93¡\94a.\r
 \r
 \r
+Changes from 0.9.9\r
+\r
+1997. 6. 30.\r
+      Add TRHOW after FLUSH-FILE in SAVE-BUFFERS and BYE in MSDOS.F.\r
+\r
+1997. 6. 23.\r
+      Fix pack" in HF86ROM.ASM and HF86RAM.ASM.\r
+      Fix SIO.F according to new EXE program structure.\r
+\r
 Changes from 0.9.7\r
 \r
 1997. 5. 26.\r
index 1912ada..44531ed 100644 (file)
@@ -27,6 +27,15 @@ dest
 RESTORE-INPUTÀ» ºñ·ÔÇÑ ¸î °¡Áö ¹ú·¹¸¦ Àâ¾Ò½À´Ï´Ù.\r
 \r
 \r
+Changes from 0.9.9\r
+\r
+1997. 6. 30.\r
+      Add TRHOW after FLUSH-FILE in SAVE-BUFFERS and BYE in MSDOS.F.\r
+\r
+1997. 6. 23.\r
+      Fix pack" in HF86ROM.ASM and HF86RAM.ASM.\r
+      Fix SIO.F according to new EXE program structure.\r
+\r
 Changes from 0.9.7\r
 \r
 1997. 5. 26.\r