home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l172 / 1.img / FORTH20 / ASM86.SCR next >
Encoding:
Text File  |  1984-02-16  |  38.0 KB  |  1 lines

  1. ( 8086 Assembler for PC/FORTH                        10/31/83 ) ;S                                                                                                                              Copyright (c) 1982, 1983                                        Ray Duncan                                                      Laboratory Microsystems                                         4147 Beethoven Street                                           Los Angeles, CA 90066                                                                                                           this file created 29 Jan 1982                                   modified for PC/FORTH 2.0  10/25/83                                                                                                                                                                                                                                                                                                                                                             ( parameter field display for assembler debugging )             HEX                                                             : DIS   BASE @ >R      '                                                BEGIN                                                             DUP 1+ @ OVER 3 + + NEXT-LINK = 0=                            WHILE                                                             DUP CR HEX 0 <# # # # # #> TYPE 3 SPACES                        DUP C@ DUP 0 <# # # #> TYPE 3 SPACES                            2 BASE ! 0 <# # # # # # # # # #> TYPE                           1+                                                            REPEAT                                                          HEX 0 <# # # # # #> CR TYPE 3 SPACES                            ." JMP NEXT" CR                                                 R> BASE ! ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( System messages )                                             empty stack                                                     dictionary full                                                 has incorrect address mode                                      is redefined                                                    is undefined                                                    disk address out of range                                       stack overflow                                                  disk error                                                                                                                                                                                                                                                                                                                      BASE must be DECIMAL                                            missing decimal point                                           PC/FORTH 2.0                             Laboratory Microsystems( System messages )                                             compilation only, use in definition                             execution only                                                  conditionals not paired                                         definition not finished                                         in protected dictionary                                         use only when loading                                           off current editing screen                                      declare vocabulary                                                                                                                                                                                                                                              illegal dimension in array definition                           negative array index                                            array index too large                                                                                                           ( 8086 Assembler messages )                                     16 bit register not allowed                                     8 bit register not allowed                                      address out of range                                            immediate data value not allowed                                missing source register                                         missing destination register                                    illegal operation                                               illegal operand                                                 instruction not implemented                                     illegal destination register                                    illegal source register                                         illegal condition code                                          register mismatch                                               destination address missing                                                                                                     ( 8086 Assembler )                                              FORTH DEFINITIONS : OVERLAY ;                                   CR CR .( Wait ... loading assembler ) CR CR                     ASSEMBLER DEFINITIONS HEX                                       VARIABLE <#>    0 <#> !                                         VARIABLE <TD>   0 <TD> !                                        VARIABLE <TS>   0 <TS> !                                        VARIABLE <RD>   0 <RD> !                                        VARIABLE <RS>   0 <RS> !                                        VARIABLE <W>    0 <W> !                                         VARIABLE <WD>   0 <WD> !                                        VARIABLE <OD>   0 <OD> !                                        VARIABLE <OS>   0 <OS> !                                        VARIABLE <D>    0 <D> !                                         VARIABLE <SP>   0 <SP> !                                        -->                                                             ( 8086 Assembler                                     10/31/83 )                                                                 10 CONSTANT FRMAX#       ( max allowed forward references )                                                                     VARIABLE FRTABLE      FRMAX# 4 * ALLOT                                                                                          10 CONSTANT LBLMAX#      ( max allowed local labels )                                                                           VARIABLE LTABLE       LBLMAX# 2* ALLOT                          -->                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( 8086 Assembler                                     03/11/82 )                                                                 : FRCHK         ( check if any unresolved forward references )          FRMAX# 0                                                        DO                                                                      I 4 * FRTABLE + @                                               ABORT" unresolved forward reference"                    LOOP ;                                                                                                                  : FRCLR         ( initialize forward reference tables )                 FRTABLE FRMAX# 4 * ERASE                                        LTABLE LBLMAX# 2*  ERASE ;                              -->                                                                                                                                                                                                                                                             ( 8086 Assembler                                     10/31/83 )                                                                 : FRRES         ( resolve forward references  fr# --- fr# )             FRMAX#  0                                                       DO                                                                 I 4 * FRTABLE + DUP @                                           2 PICK =     ( *** )                                            IF   DUP 2+ @ DUP C@ DUP 0E9 = SWAP 0E8 = OR                         IF   DUP 3 + HERE SWAP - SWAP 1+ !  ( 16 bit )                  ELSE DUP 2+ HERE SWAP - DUP ABS 07F > 23 ?ERROR                      SWAP 1+ C! ( 8 bit offset )                                THEN 0 SWAP ! ( remove from table )                        ELSE    DROP                                                    THEN                                                         LOOP ;                                                  -->                                                             ( 8086 Assembler                                     03/11/82 )                                                                 : FRADD         ( add forward reference to table )                              ( fr#  ---  fr# )                                       FRMAX# 1+ 0                                                     DO                                                                      FRMAX# I =                                                      ABORT" too many forward references"                             I 4 * FRTABLE + DUP @ 0=                                        IF      2DUP ! HERE SWAP 2+ ! LEAVE                             ELSE    DROP                                                    THEN                                                    LOOP ;                                                  -->                                                                                                                                                                                             ( 8086 Assembler                                     03/11/82 )                                                                 : !LTABLE       ( establish local label address value )                         ( fr#  --- )                                                    FRRES HERE SWAP DUP + LTABLE + ! ;                                                                              : @LTABLE       ( fetch value of local label, if undefined )                    ( add current location to forward ref. table )                  ( fr#  ---  addr )                                              DUP DUP + LTABLE + @ SWAP OVER 0=                               IF FRADD 2DROP HERE                                             ELSE DROP THEN ;                                -->                                                                                                                                                                                                                                                             ( 8086 Assembler                                     10/31/83 ) DECIMAL                                                         ( local label definitions       local label references )                                                                        : 1$:   1 !LTABLE ;             : 1$    1 @LTABLE ;             : 2$:   2 !LTABLE ;             : 2$    2 @LTABLE ;             : 3$:   3 !LTABLE ;             : 3$    3 @LTABLE ;             : 4$:   4 !LTABLE ;             : 4$    4 @LTABLE ;             : 5$:   5 !LTABLE ;             : 5$    5 @LTABLE ;             : 6$:   6 !LTABLE ;             : 6$    6 @LTABLE ;             : 7$:   7 !LTABLE ;             : 7$    7 @LTABLE ;             : 8$:   8 !LTABLE ;             : 8$    8 @LTABLE ;             : 9$:   9 !LTABLE ;             : 9$    9 @LTABLE ;             : 10$: 10 !LTABLE ;             : 10$  10 @LTABLE ;             HEX                                                             -->                                                             ( 8086 Assembler                                     12/28/83 )                                                                 : !<SP>         SP@ <SP> ! ;                                    : ?<SP>         <SP> @ SP@ - 2- 2/ ;                            : ERROR         ."  ? " MESSAGE S0 @ SP! SHOW-ERROR ;           : ?ERROR        SWAP IF ERROR ELSE DROP THEN ;                  : OP-ERROR      28 ERROR ;                                                                                                      0 CONSTANT      DIRECT                                          1 CONSTANT      IMMED                                           2 CONSTANT      REG8                                            3 CONSTANT      REG16                                           4 CONSTANT      INDEXED                                         5 CONSTANT      SEGREG                                          -->                                                                                                                             ( 8086 Assembler                                     12/08/83 )                                                                 : DREG  CREATE C, C, C,                                                 DOES> DUP C@ DUP 0FF =                                          IF DROP ELSE ABS DUP <W> ! <WD> !                               THEN 1+ DUP C@ <TD> ! 1+ C@ <RD> !                              <#> @ 24 ?ERROR   <TD> @ 4 =                                    IF ?<SP> 0> IF <OD> ! THEN THEN ;                                                                                       : SREG  CREATE C, C, C,                                                 DOES> DUP C@ DUP 0FF =                                          IF DROP ELSE ABS <W> !                                          THEN 1+ DUP C@ <TS> ! 1+ C@ <RS> !                              <TS> @ 4 =                                                      IF ?<SP> 0> IF <OS> ! THEN THEN ;                       -->                                                             ( 8086 Assembler )                                                                                                              0 2 0 SREG AL   0 2 0 DREG AL,  0 3 1 SREG AX   0 3 1 DREG AX,  1 2 0 SREG CL   1 2 0 DREG CL,  1 3 1 SREG CX   1 3 1 DREG CX,  2 2 0 SREG DL   2 2 0 DREG DL,  2 3 1 SREG DX   2 3 1 DREG DX,  3 2 0 SREG BL   3 2 0 DREG BL,  3 3 1 SREG BX   3 3 1 DREG BX,  4 2 0 SREG AH   4 2 0 DREG AH,  4 3 1 SREG SP   4 3 1 DREG SP,  5 2 0 SREG CH   5 2 0 DREG CH,  5 3 1 SREG BP   5 3 1 DREG BP,  6 2 0 SREG DH   6 2 0 DREG DH,  6 3 1 SREG SI   6 3 1 DREG SI,  7 2 0 SREG BH   7 2 0 DREG BH,  7 3 1 SREG DI   7 3 1 DREG DI,                                                                  0 5 -1 SREG ES   0 5 -1 DREG ES,                                1 5 -1 SREG CS   1 5 -1 DREG CS,                                2 5 -1 SREG SS   2 5 -1 DREG SS,                                3 5 -1 SREG DS   3 5 -1 DREG DS,                                -->                                                             ( 8086 Assembler )                                                                                                              0 4 -1 SREG [BX+SI]             0 4 -1 DREG [BX+SI],            1 4 -1 SREG [BX+DI]             1 4 -1 DREG [BX+DI],            2 4 -1 SREG [BP+SI]             2 4 -1 DREG [BP+SI],            3 4 -1 SREG [BP+DI]             3 4 -1 DREG [BP+DI],            4 4 -1 SREG [SI]                4 4 -1 DREG [SI],               5 4 -1 SREG [DI]                5 4 -1 DREG [DI],               6 4 -1 SREG [BP]                6 4 -1 DREG [BP],               7 4 -1 SREG [BX]                7 4 -1 DREG [BX],               -->                                                                                                                                                                                                                                                                                                                                                                                             ( 8086 Assembler                                     12/08/83 ) : ?W      <W> @ ;               : ?TD     <TD> @ ;              : ?TS     <TS> @ ;              : ?RD     <RD> @ ;              : ?RS     <RS> @ ;              : ?OD     <OD> @ ;              : ?OS     <OS> @ ;              : +D      <D> @ 2* + ;          : +W      <W> @ + ;             : +RD     <RD> @ + ;            : +RS     <RS> @ + ;            : MOD1    3F AND 040 OR ;       : MOD2    3F AND 080 OR ;       : MOD3    3F AND 0C0 OR ;       : W/B,    ?W IF , ELSE C, THEN ;                                : RESET   0 <#> !  0 <W> !  0 <OS> !  0 <RD> !  0 <TD> !                  0 <TS> ! 0 <OD> ! 0 <D> ! 0 <WD> ! 0 <RS> ! !<SP> ;   : DSET    ?TS INDEXED = ABS <D> ! ;                             : Dt      1 <D> ! ;                                             : ?RD8*+RS    ?RD 8 * +RS ;                                     : ?RS8*+RD    ?RS 8 * +RD ;                                     -->                                                             ( 8086 Assembler )                                                                                                              : OFFSET8,      HERE 1+ - DUP ABS 07F > 23 ?ERROR C, ;          : OFFSET16,     HERE 2+ - , ;                                   : DISP,         <D> @ IF ?OS ELSE ?OD THEN DUP                                  IF DUP ABS 07F >                                                  IF SWAP MOD2 C, ,                                               ELSE SWAP MOD1 C, C, THEN                                     ELSE DROP DUP 7 AND 6 =                                           IF MOD1 C, 0 C, ELSE C, THEN                                  THEN ;                                                                                                          : 1MI           CREATE  C,      DOES> C@ C, RESET ;             : 2MI           CREATE  C,      DOES> C@ C, OFFSET8, RESET ;    : 3MI           CREATE  C,      DOES> C@ +W C, RESET ;          -->                                                             ( 8086 Assembler )                                                                                                              : 4MI           CREATE  C, C,                                                   DOES> ?TS CASE                                                    REG16  OF  1+ C@ +RS C, ENDOF                                   SEGREG OF  C@ ?RS 8 * + C, ENDOF                              OP-ERROR ENDCASE RESET ;                                                                                        : 5MI           CREATE  C, C,                                                   DOES> ?TS CASE                                                    DIRECT  OF  1+ C@ C, OFFSET16, ENDOF                            REG16   OF  0FF C, C@ MOD3 +RS C, ENDOF                         INDEXED OF  DSET 0FF C, C@ +RS DISP, ENDOF                    OP-ERROR ENDCASE RESET ;                        -->                                                                                                                             ( 8086 Assembler                                     02/16/84 )                                                                 : 6MI   CREATE  C, C,                                                   DOES> DUP C@ 2 AND IF ?TD ?TS ELSE ?TS ?TD THEN                 REG16 = ABS <W> ! REG16 =                                       IF 1+ C@ +W C, ELSE C@ +W C, C, THEN RESET ;            : 7MI   CREATE  C, C, C,                                                DOES> ?TS IMMED =                                               IF 1+ DUP 1+ C@ +W C, ?TD CASE                                    REG8    OF  C@ MOD3 +RD C, C, ENDOF                             REG16   OF  C@ MOD3 +RD C, , ENDOF                              INDEXED OF  DSET C@ +RD DISP, ?W IF ,                                       ELSE C, THEN ENDOF                                  OP-ERROR ENDCASE                                              ELSE DSET C@ +D +W C, ?TD CASE                          -->                                                             ( 8086 Assembler )                                                                                                                      REG8 OF ?TS CASE                                                     REG8    OF  ?RS 8 * +RD MOD3 C, ENDOF                           INDEXED OF  ?RD 8 * +RS DISP, ENDOF                             OP-ERROR ENDCASE   ENDOF                                   REG16 OF ?TS CASE                                                    REG16   OF  ?RS 8 * +RD MOD3 C, ENDOF                           INDEXED OF  ?RD 8 * +RS DISP, ENDOF                             OP-ERROR ENDCASE   ENDOF                                   INDEXED OF ?TS CASE                                                  REG8    OF  ?RS 8 * +RD DISP, ENDOF                             REG16   OF  ?RS 8 * +RD DISP, ENDOF                             OP-ERROR ENDCASE   ENDOF                                   OP-ERROR ENDCASE THEN RESET ;                           -->                                                             ( 8086 Assembler )                                              : 8MI   CREATE  C, C,                                                   DOES> DUP 1+ C@ +W C, ?TS CASE                                    REG8    OF  C@ +RS MOD3 C, ENDOF                                REG16   OF  C@ +RS MOD3 C, ENDOF                                INDEXED OF  DSET C@ +RS DISP, ENDOF                           OP-ERROR ENDCASE RESET ;                                : 9MI   CREATE  C, C,                                                   DOES> DUP 1+ C@ <WD> @ + ?TS 1 > IF 2+ THEN C, ?TD CASE         REG8      OF  C@ MOD3 +RD C, ENDOF                              REG16     OF  C@ MOD3 +RD C, ENDOF                              INDEXED   OF  DSET C@ +RD DISP, ENDOF                           OP-ERROR ENDCASE                                                ?TS 2 < IF DROP THEN RESET ;                            : 10MI  CREATE  C, C,                                                   DOES> DUP C@ SWAP 1+ C@ C, C, RESET ;   -->             ( 8086 Assembler                                     08/30/82 ) : 11MI  CREATE  C, C,                                                   DOES> ?TS CASE                                                    DIRECT  OF  DEPTH 1 < 1 ?ERROR   0FE +W C,                                  1+ C@ 6 + C, ,  ENDOF                               REG8    OF  0FE C, 1+ C@ MOD3 +RS C, ENDOF                      REG16   OF  C@ +RS C, ENDOF                                     INDEXED OF  DSET 0FE +W C, 1+ C@ +RS DISP, ENDOF              OP-ERROR ENDCASE RESET ;                                : 12MI  CREATE  DOES>  DROP DSET ?TD CASE                               DIRECT OF ?TS CASE                                                REG8   OF ?RS IF 088 C, ?RS 8 * 6 + C, ,                                      ELSE 0A2 +W C, , THEN ENDOF                       REG16  OF ?RS IF 089 C, ?RS 8 * 6 + C, ,                                      ELSE 0A2 +W C, , THEN ENDOF             -->                                                             ( 8086 Assembler )                                                                                                                        SEGREG  OF  08C C, ?RS 8 * 6 + C, , ENDOF                       OP-ERROR ENDCASE ENDOF                                        REG8 OF ?TS CASE                                                  DIRECT  OF  ?RD IF 08A C, ?RD 8 * 6 + C, ,                                    ELSE 0A0 +W C, , THEN ENDOF                       IMMED   OF  0B0 +RD C, C, ENDOF                                 REG8    OF  Dt 88 +D C, ?RD 8 * +RS MOD3 C, ENDOF               REG16   OF  2D ERROR ENDOF                                      INDEXED OF  88 +D +W C, ?RD 8 * +RS DISP, ENDOF                 OP-ERROR ENDCASE ENDOF                                        REG16 OF ?TS CASE                                                 DIRECT  OF  ?RD IF 08B C, ?RD 8 * 6 + C, ,                                      ELSE 0A0 +W C, , THEN ENDOF           -->                                                             ( 8086 Assembler )                                                                                                                        IMMED   OF  0B8 +RD C, , ENDOF                                  REG16   OF  Dt 088 +W +D C, ?RD 8 * +RS MOD3 C, ENDOF           INDEXED OF  088 +D +W C, ?RD 8 * +RS DISP, ENDOF                SEGREG  OF  08C C, ?RS 8 * +RD MOD3 C, ENDOF                    OP-ERROR ENDCASE ENDOF                                        INDEXED   OF  ?TS CASE                                            IMMED   OF  0C6 +W C, ?RD DISP, ?W IF ,                                         ELSE C, THEN ENDOF                              REG8    OF  088 +D +W C, ?RS 8 * +RD DISP, ENDOF                REG16   OF  088 +D +W C, ?RS 8 * +RD DISP, ENDOF                SEGREG  OF  08C C, ?RS 8 * +RD DISP, ENDOF                      OP-ERROR ENDCASE ENDOF                                -->                                                                                                                             ( 8086 Assembler )                                                                                                                      SEGREG OF ?TS CASE                                                DIRECT   OF  08E C, ?RD 8 * 6 + C, , ENDOF                      REG16    OF  08E C, ?RD 8 * +RS MOD3 C, ENDOF                   INDEXED  OF  08E C, ?RD 8 * +RS DISP, ENDOF                     OP-ERROR ENDCASE ENDOF                                        OP-ERROR ENDCASE RESET ;                                -->                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( 8086 Assembler )                                                                                                              : 13MI  CREATE  DOES> DROP DSET ?TD CASE                                DIRECT OF ?TS REG16 =                                                     IF 90 +RS C, ELSE 28 ERROR THEN ENDOF                 REG8 OF 86 +W C, ?TS CASE                                         REG8    OF  ?RD 8 * +RS MOD3 C, ENDOF                           INDEXED OF  ?RD 8 * +RS DISP, ENDOF                             OP-ERROR ENDCASE ENDOF                                        REG16 OF 86 +W C, ?TS CASE                                        REG16   OF  ?RD 8 * +RS MOD3 C, ENDOF                           INDEXED OF  ?RD 8 * +RS DISP, ENDOF                             OP-ERROR ENDCASE ENDOF                                        OP-ERROR ENDCASE RESET ;                                -->                                                                                                                             ( 8086 Assembler                                     08/20/82 )                                                                 : 14MI  CREATE  DOES> DROP ?TS CASE                                     DIRECT OF 28 ERROR ENDOF                                        IMMED OF 0F6 +W C, ?TD CASE                                       REG8    OF  ?RD MOD3 C, ?W IF , ELSE C, THEN ENDOF              REG16   OF  ?RD MOD3 C, ?W IF , ELSE C, THEN ENDOF              INDEXED OF  ?RD DISP, ?W IF , ELSE C, THEN ENDOF                OP-ERROR ENDCASE ENDOF                                        SEGREG OF 28 ERROR ENDOF                                        ?TD REG8 < ?TD REG16 > OR 28 ?ERROR 84 +W C, ?RD 8 *            +RS ?TS INDEXED < IF MOD3 C, ELSE DISP,                         THEN ENDCASE RESET ;                                    : 15MI  CREATE  DOES> DROP 0CD C, C, RESET ;                    : 16MI  CREATE  DOES> DROP ?RS 8 * 26 + C, RESET ;              -->                                                             ( 8086 Assembler                                     10/31/83 )                                                                 : 17MI  CREATE  C, C,                                                   DOES>  ?TS CASE                                                 DIRECT OF       1+ C@ C, , , ENDOF                              REG16 OF        0FF C, C@ MOD3 +RS C, ENDOF                     INDEXED OF      DSET 0FF C, C@ +RS DISP, ENDOF                  OP-ERROR ENDCASE RESET ;                                -->                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( 8086 Assembler                                     10/31/83 ) 37       1MI   AAA     80 38 38 7MI  CMP            15MI INT    D5 0A    10MI  AAD     A6       3MI  CMPS     CE    1MI  INTO   D4 0A    10MI  AAM     99       1MI  CWD      CF    1MI  IRET   3F       1MI   AAS     27       1MI  DAA      77    2MI  JA     80 10 10 7MI   ADC     2F       1MI  DAS      73    2MI  JAE    80 00 00 7MI   ADD     08 48    11MI DEC      72    2MI  JB     80 20 20 7MI   AND     F6 30    8MI  DIV      76    2MI  JBE    E8 10    5MI   CALL                ( ESC )    E3    2MI  JCXZ   9A 18    17MI  CALLF                                            98       1MI   CBW     F4       1MI  HLT      74    2MI  JE     F8       1MI   CLC     F6 38    8MI  IDIV     7F    2MI  JG     FC       1MI   CLD     F6 28    8MI  IMUL     7D    2MI  JGE    FA       1MI   CLI     EC E4    6MI  IN       7C    2MI  JL     F5       1MI   CMC     00 40    11MI INC      7E    2MI  JLE    -->                                                             ( 8086 Assembler                                     10/31/83 ) E9 20 5MI  JMP      75       2MI  JNZ      E2       2MI  LOOP   7A 28 17MI JMPF                                                 76    2MI  JNA      70       2MI  JO       E1       2MI  LOOPE  72    2MI  JNAE     7A       2MI  JP       E0       2MI  LOOPNE 73    2MI  JNB      7A       2MI  JPE      E0       2MI  LOOPNZ 77    2MI  JNBE     7B       2MI  JPO      E1       2MI  LOOPZ  75    2MI  JNE      78       2MI  JS                12MI MOV    7E    2MI  JNG      74       2MI  JZ       A4       3MI  MOVS   7C    2MI  JNGE     9F       1MI  LAHF     F6 20    8MI  MUL    7D    2MI  JNL                 (  LDS )    F6 18    8MI  NEG    7F    2MI  JNLE     8A 8A 8A 7MI  LEA      90       1MI  NOP    71    2MI  JNO                 (  LES )    F6 10    8MI  NOT    7B    2MI  JNP      F0       1MI  LOCK     80 08 08 7MI  OR     79    2MI  JNS      AC       3MI  LODS     EE E6    6MI  OUT    -->                                                             ( 8086 Assembler                                     10/31/83 ) 58 07 4MI  POP      D0 08    9MI  ROR     80 28 28 7MI  SUB     9D    1MI  POPF     9E       1MI  SAHF             14MI TEST    50 06 4MI  PUSH     D0 38    9MI  SAR     9B       1MI  WAIT    9C    1MI  PUSHF    80 18 18 7MI  SBB              13MI XCHG    D0 10 9MI  RCL      AE       3MI  SCAS    D7       1MI  XLAT    D0 18 9MI  RCR               16MI SEG     80 30 30 7MI  XOR     F3    1MI  REP      D0 20    9MI  SAL           72 2MI  JC      F3    1MI  REPE     D0 20    9MI  SHL           73 2MI  JNC     F2    1MI  REPNE    D0 28    9MI  SHR                           F2    1MI  REPNZ    F9       1MI  STC                           F3    1MI  REPZ     FD       1MI  STD                           C3    1MI  RET      FB       1MI  STI                           CB    1MI  RETF                                                 D0 00 9MI  ROL      AA       3MI  STOS                          -->                                                             ( 8086 Assembler                                     01/04/84 ) : CS: CS SEG ;  : DS: DS SEG ;  : ES: ES SEG ;  : SS: SS SEG ;  : IF            074 C, 0 C, HERE RESET ;                        : ELSE          0EB C, 0 C, DUP HERE SWAP - DUP ABS 07F >                       23 ?ERROR SWAP 1- C! HERE RESET ;               : ENDIF         DUP HERE SWAP - DUP ABS 07F > 23 ?ERROR                         SWAP 1- C! RESET ;                              : BEGIN         HERE RESET ;                                    : UNTIL         074 C, HERE 1+ - DUP ABS 07F > 23 ?ERROR                        C, RESET ;                                                                                                      : BYTE          0 <W> ! 0 <WD> ! ;                              : WORD          1 DUP <W> ! <WD> ! ;                            : #             1 DUP <#> ! <TS> ! ;                            : ,             DEPTH 1 < 2E ?ERROR 0 <TD> ! ;                  -->                                                             ( 8086 Assembler                                     11/14/83 ) ( macro to assemble in-line NEXT so code-def is relocatable)    : NEXT,         WORD LODS  BX, AX MOV  [BX] JMP  ;              : END-CODE      RESET  FRCHK  ?EXEC  ?CSP                                       UNSMUDGE [COMPILE] FORTH ; IMMEDIATE            FORTH DEFINITIONS                                               : ;CODE         ?CSP UNSMUDGE COMPILE (;CODE) [COMPILE] [                       ASSEMBLER FRCLR RESET FORTH                                     [COMPILE] ASSEMBLER ; IMMEDIATE                 : CODE          ?EXEC !CSP BUILD SMUDGE ASSEMBLER FRCLR RESET                   FORTH [COMPILE] ASSEMBLER ; IMMEDIATE                                                                           DECIMAL CR CR .( 8086 Assembler loaded.) CR                     SP@ DP @ - U. .( bytes left in dictionary.) CR CR ;S                                                                                                                                            ( 32 bit square root                                 12/08/83 )                                                                 FORTH DEFINITIONS DECIMAL                                                                                                       CODE 2SQRT      DI, BP MOV  BP, SP MOV                                          DX, [BP] MOV  AX, 2 [BP] MOV                                    BX, # 200 MOV  BX DIV  AX, # 2 ADD                                                                                 1$:          BX, AX MOV  AX, 2 [BP] MOV  DX, [BP] MOV                        BX DIV  AX, BX ADD  AX, 1 SHR  AX, BX CMP                       2$ JZ  BX, AX SUB  BX, # 1 CMP  2$ JZ                           BX, # -1 CMP  1$ JNZ                                                                                               2$:          SP, # 4 ADD  BP, DI MOV  AX PUSH                                NEXT,  END-CODE                                                                                                 ( BEEP words                                         03/04/83 ) FORTH DEFINITIONS HEX                                                                                                           CODE beep   ( divisor  time  --- )                                      BX POP  AL, # B6 MOV  # 43 , AL OUT  AX POP                     # 42 , AL OUT  AL, AH MOV  # 42 , AL OUT                        AL, # 61 IN  AH, AL MOV  AL, # 03 OR  # 61 , AL OUT          1$:  CX, # 0A48 MOV                                             2$:  2$ LOOP                                                       BX DEC    1$ JNZ                                                AL, AH MOV  # 61 , AL OUT       NEXT,  END-CODE                                                                         DECIMAL                                                         : BEEP    ( freq  centiseconds  --- )                                   >R >R  1331 1000 R> */  R> beep ;