home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l172 / 1.img / FORTH22 / GRAPH.SCR < prev    next >
Encoding:
Text File  |  1980-01-01  |  107.0 KB  |  1 lines

  1. ( Color Graphics Extensions                          01/12/84 ) ;S                                                                                                                              Copyright (c) 1982, 1983, 1984                                  Ray Duncan and Rick Wilton                                      Laboratory Microsystems, Inc.                                   4147 Beethoven Street                                           Los Angeles, CA 90066                                           (213) 306-7412                                                                                                                  modified Nov 15 1983 for PC/FORTH 2.0                           modified Jan 11 1984 for PC/FORTH+ 2.0 and version independence                                                                                                                                                                                                                                                                 ( Master load screen for graphics extensions         01/12/84 ) FORTH DEFINITIONS                                                                                                               CR CR .( Wait ... loading graphics extensions) CR                                                                                 DECIMAL         2 LOAD          CR .( Version dependence)                                                                       DECIMAL         8 LOAD          CR .( Disk save/load)           DECIMAL         11 LOAD         CR .( Graphics hard copy)       DECIMAL         18 LOAD         CR .( Graphics commands)        DECIMAL         28 LOAD         CR .( Window management)        DECIMAL         32 LOAD         CR .( Turtle graphics)                                                                        CR CR .( Graphics extensions loaded.)   CR CR                                                                                                                                                   ( Version dependence                                 01/12/84 ) DECIMAL                                                                                                                         ( 16_par 32_par --- correct_par )                               : VSel          WSIZE 2 <> IF SWAP THEN DROP ;                                                                                  59 60 VSel LOAD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ( 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                                                                                                     ( Memory dump, byte format, intersegment             02/26/82 ) FORTH DEFINITIONS DECIMAL                                       : DUMP    ( segment offset length --- )                           DEPTH 3 < 1 ?ERROR BASE @ >R HEX CR CR 10 SPACES                16 0 DO I 3 .R LOOP 2 SPACES                                    16 0 DO I 0 <# # #> TYPE LOOP CR                                OVER + SWAP DUP 15 AND XOR DO                                   CR DUP 0 <# # # # # #> TYPE 58 EMIT   ( segment )                  I 0 <# # # # # #> TYPE SPACE       ( offset )                I 16 + I                                                          DO DUP I C@L 0 <# # # #> SPACE TYPE LOOP 2 SPACES             I 16 + I                                                          DO DUP I C@L DUP 32 < OVER 126 > OR IF DROP 46 THEN             EMIT LOOP                                                       ?TERMINAL IF KEY DROP LEAVE THEN                              16 +LOOP DROP CR R> BASE ! ;                                  ( Save and load video image from disk file           01/12/84 ) FORTH DEFINITIONS DECIMAL                                                                                                       VARIABLE IMAGE-FCB 35 ALLOT                                                                                                     : SET-IMG-EXT   LIT" IMG" COUNT IMAGE-FCB 9 + SWAP CMOVE ;                                                                      : SET-FILENAME  IMAGE-FCB DUP 37 ERASE 1+ DUP 11 BLANK                          BL WORD 1+ SWAP HERE C@ 8 MIN CMOVE                             SET-IMG-EXT ;                                                                                                   -->                                                                                                                                                                                                                                                                                                                             ( Save and load video image from disk file           01/12/84 )                                                                 DECIMAL                                                                                                                         : WOPEN-IMAGE   SET-FILENAME 22 IMAGE-FCB ADDR>FDOS                             DROP 255 AND 255 =                                                IF ." Cannot create " IMAGE-FCB .FCB QUIT                     THEN 16384 IMAGE-FCB 14 + W!  ;                                                                                 : ROPEN-IMAGE   SET-FILENAME 15 IMAGE-FCB ADDR>FDOS                             DROP 255 AND 255 =                                              IF ." Can't find " IMAGE-FCB .FCB QUIT                          THEN 16384 IMAGE-FCB 14 + W! ;                  -->                                                                                                                                                                                             ( Save and load video image from disk file           01/12/84 )                                                                 : CLOSE-IMAGE   16 IMAGE-FCB ADDR>FDOS 2DROP ;                                                                                  : SAVE-IMAGE    WOPEN-IMAGE SET-DTA                                             34 IMAGE-FCB ADDR>FDOS DROP 255 AND                             IF CR 7 EMIT                                                       ." Not enough room on disk " CR CR                           THEN CLOSE-IMAGE ;                                                                                              : GET-IMAGE     ROPEN-IMAGE SET-DTA                                             33 IMAGE-FCB ADDR>FDOS 2DROP                                    CLOSE-IMAGE ;                                                                                                   DECIMAL ;S                                                                                                                      ( High res graphics hard copy                        07/05/82 ) FORTH DEFINITIONS HEX                                           B800 CONSTANT cgmap                ( seg. addr of memory map)                                                                   VARIABLE BIT-BUFFER 1DE ALLOT ( build printer output here )     VARIABLE HBIT-TABLE -2 ALLOT   ( bit masks )                    80 C, 40 C, 20 C, 10 C, 8 C, 4 C, 2 C, 1 C,                                                                                     ( Fetch dot value from memory.  Stack effect:  x y --- f )      : @HDOT DUP 1 AND                  ( calc byte addr,if y odd)           IF 2000 ELSE 0 THEN        ( then offset by 2000h)              SWAP 2/ 50 * + OVER 8 / +  ( each dot row=80 bytes)             cgmap SWAP C@L SWAP 7 AND  ( get mask from table to)            HBIT-TABLE + C@ AND        ( test dot position )                IF 1 ELSE 0 THEN  ;        ( return 1 if dot on,else 0) -->                                                             ( High res graphics hard copy                        07/05/82 )                                                                 ( after a pattern has been built into BIT-BUFFER )              ( corresponding to X=0 to 479 and Y=Y to Y+3 by )               ( DUMP-MAP, this routine sends it to the printer )                                                                              : SEND-LINE     0A EMIT             ( line feed)                                ( make sure something is in buffer )                            0 1E0 0 DO I BIT-BUFFER + C@ OR LOOP                            IF  1B EMIT 4B EMIT ( graphics mode )                               E0 EMIT 01 EMIT ( 480 bytes will be sent)                       1E0 0 DO        ( transmit this byte )                             BIT-BUFFER I + C@ EMIT                                       LOOP                                                        THEN ;                                          -->                                                             ( High res graphics hard copy                        07/05/82 )                                                                 : HDUMP-MAP     C8 0 DO         ( for y=0 to 199 step 4 )                          1E0 0 DO 0   ( for x=0 to 479 )                                     I J @HDOT IF 80 OR THEN      ( x,y )                            I J 1+ @HDOT IF 20 OR THEN   ( x,y+1 )                          I J 2+ @HDOT IF 8 OR THEN    ( x,y+2 )                          I J 3 + @HDOT IF 2 OR THEN   ( x,y+3 )                          BIT-BUFFER I + C!                                           LOOP   ( next x )   SEND-LINE                                   ?TERMINAL IF KEY DROP LEAVE THEN                             4 +LOOP ; ( next y )                                                                                            : HDUMP         PRINTER 1B EMIT 41 EMIT 08 EMIT ( set spacing)                  HDUMP-MAP CONSOLE ;                             -->                                                             ( Color medium resolution graphics hard copy         07/05/82 )                                                                 VARIABLE CBIT-TABLE -2 ALLOT   ( bit masks )                    C0 C, 30 C, 0C C, 03 C,                                                                                                         ( Fetch dot value from memory.  Stack effect:  x y --- f )      : @CDOT DUP 1 AND                  ( calc byte addr,if y odd)           IF 2000 ELSE 0 THEN        ( then offset by 2000h)              SWAP 2/ 50 * + OVER 4 / +  ( each dot row=80 bytes)             cgmap SWAP C@L SWAP 3 AND  ( get mask from table to)            CBIT-TABLE + C@ AND        ( test dot position )                IF 1 ELSE 0 THEN  ;        ( return 1 if dot on,else 0) -->                                                                                                                                                                                                                                                             ( Color medium resolution graphics hard copy         07/05/82 )                                                                 : CDUMP-MAP     C8 0 DO         ( for y=0 to 199 step 8 )                          140 0 DO 0   ( for x=0 to 319 )                                     I J     @CDOT IF 80 OR THEN   ( x,y )                           I J 1+  @CDOT IF 40 OR THEN   ( x,y+1 )                         I J 2+  @CDOT IF 20 OR THEN   ( x,y+2 )                         I J 3 + @CDOT IF 10 OR THEN   ( x,y+3 )                         I J 4 + @CDOT IF 08 OR THEN   ( x,y+4 )                         I J 5 + @CDOT IF 04 OR THEN   ( x,y+5 )                         I J 6 + @CDOT IF 02 OR THEN   ( x,y+6 )                         I J 7 + @CDOT IF 01 OR THEN   ( x,y+7 )                         BIT-BUFFER I + C!                                           LOOP   ( next x )   SEND-LINE                                   ?TERMINAL  IF KEY DROP LEAVE THEN                            8 +LOOP ; ( next y )    -->                     ( Color medium resolution graphics hard copy         07/05/82 )                                                                 : CDUMP         BIT-BUFFER 1E0 ERASE                                            PRINTER 1B EMIT 41 EMIT 08 EMIT ( set spacing)                  CDUMP-MAP CONSOLE ;                                                                                             -->                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( Sideways graphic dump    RJW                       12/07/83 ) FORTH DEFINITIONS HEX                                           : SDUMP PRINTER CR 0C EMIT       ( clear out buffer, form feed)    1B EMIT 33 EMIT 18 EMIT CR CR CR             ( dot graphics)    HERE 200 + 196 ERASE                                            FF DUP HERE 200 + C! HERE 395 + C!         ( output vector )    50 0 DO                                   ( do over 80 cols)     HERE 392 + 1F40 0 DO                                             B800 I J + C@L  2DUP SWAP C! OVER 1- C! 2-   ( even line )      BA00 I J + C@L  2DUP SWAP C! OVER 1- C! 2-    ( odd line )             50 +LOOP                                              5 SPACES 1B EMIT 4B EMIT 96 EMIT 1 EMIT                         HERE 200 + 196 TYPE CR DROP LOOP                                1B EMIT 33 EMIT CA EMIT CR CR               ( reset printer )   1B EMIT 32 EMIT  1B EMIT 40 EMIT 0C EMIT  CONSOLE ;           DECIMAL ;S                                                      ( misc primitives                                    12/08/83 ) DECIMAL                                                         : 4DUP          3 PICK 3 PICK 3 PICK 3 PICK ;                   : 8DUP          7 PICK 7 PICK 7 PICK 7 PICK                                     7 PICK 7 PICK 7 PICK 7 PICK ;                   ( : AUDIT4      PRINTER 4DUP  CR  SWAP ." X=" . ." Y=" .                        SWAP ." X=" . ." Y=" . CONSOLE ;  )                                                                             ( xul yul xlr ylr color --- )                                   : BOX   >R 1 PICK 3 PICK 5 PICK 5 PICK R@ LINE  ( top )                 3 PICK 1 PICK 5 PICK 5 PICK R@ LINE  ( left)                    1 PICK 3 PICK 3 PICK 3 PICK R@ LINE  ( right )                  3 PICK 1 PICK 3 PICK 3 PICK R> LINE  ( bottom) 4DROP ;                                                                  -->                                                                                                                             ( rectangle                                          12/08/83 )                                                                 ( xul yul xlr ylr color --- )                                   : XBOX  >R 1 PICK 3 PICK 5 PICK 5 PICK R@ XLINE  ( top )                3 PICK 1 PICK 5 PICK 5 PICK R@ XLINE  ( left)                   1 PICK 3 PICK 3 PICK 3 PICK R@ XLINE  ( right )                 3 PICK 1 PICK 3 PICK 3 PICK R> XLINE  ( bottom) 4DROP ;                                                                 ( points must be specified in order around the edge )           ( x1 y1  x2 y2  x3 y3  x4 y4  color  --- )                      : RECTANGLE     DEPTH 9 < 1 ?ERROR >R                                           4DUP R@ line            ( 3,4 side )                            7 PICK 7 PICK R@ line   ( 1,4 side )                            3 PICK 3 PICK R@ line   ( 2,3 side )                            R> line ;               ( 1,2 side )            -->                                                             ( triangle                                           05/04/82 )                                                                 ( points may be specified in any order )                        ( x1 y1  x2 y2  x3 y3  color  ---  )                            : TRIANGLE      DEPTH 7 < 1 ?ERROR                                              >R                                                              4DUP R@ line            ( 2,3 side )                            5 PICK 5 PICK R@ line   ( 1,3 side )                            R> line ;               ( 1,2 side )                                                                            -->                                                                                                                                                                                                                                                                                                                                                                                             ( arc                                                07/13/82 ) 0 CONSTANT XOFS    0 CONSTANT YOFS    0 CONSTANT CHUE           60 CONSTANT CMAG   0 CONSTANT XPREV   0 CONSTANT YPREV          0 CONSTANT CINCR                                                : CADJ          ?MODE 6 < IF 92 ELSE 48 THEN ['] CMAG 2+ ! ;                                                                    ( x y x' y' --- )                                               : QCPLOT  3 PICK XOFS + 3 PICK YOFS + 3 PICK XOFS +                     3 PICK YOFS + CHUE ARCSEG                                       3 PICK NEGATE XOFS + 3 PICK YOFS + 3 PICK NEGATE XOFS +         3 PICK YOFS + CHUE ARCSEG                                       3 PICK XOFS + 3 PICK NEGATE YOFS + 3 PICK XOFS +                3 PICK NEGATE YOFS + CHUE ARCSEG                                3 PICK NEGATE XOFS + 3 PICK NEGATE YOFS + 3 PICK NEGATE         XOFS + 3 PICK NEGATE YOFS + CHUE ARCSEG 4DROP ;         -->                                                             ( arc                                                08/21/82 )                                                                 ( radius degrees ---  x y )                                     : <ARC>         ARCXY  CMAG 100 */ NEGATE                                       YOFS + SWAP XOFS + SWAP ;                                                                                       ( deg-start deg-end x y r color --- )                           : ARC           DEPTH 6 < 1 ?ERROR ['] CHUE 2+ ! CADJ                           ROT ROT ['] YOFS 2+ ! ['] XOFS 2+ ! ROT ROT                     2DUP > IF SWAP THEN 1+ SWAP                                     2 PICK OVER <ARC> ['] YPREV 2+ ! ['] XPREV 2+ !                 DO   DUP I <ARC> 2DUP XPREV YPREV CHUE ARCSEG                        ['] YPREV 2+ ! ['] XPREV 2+ !                              LOOP DROP ;                                     -->                                                                                                                             ( ellipse                                            12/17/83 ) ( x y r e color --- r )                                         : (ELLIPSE)  DEPTH 4 < 1 ?ERROR ['] CHUE 2+ ! CADJ                           CMAG M* 100 UM/MOD SWAP DROP ['] CMAG 2+ !                      ROT ROT ['] YOFS 2+ ! ['] XOFS 2+ !                             0 ['] YPREV 2+ ! DUP ['] XPREV 2+ !  DUP 100 <                  IF 3 ELSE 2 THEN ['] CINCR 2+ ! ;                                                                                  ( x y r e color --- )                                           : ELLIPSE    (ELLIPSE)  90 CINCR + 0 CINCR +                        DO   DUP I ARCXY  CMAG 100 */ NEGATE                                 2DUP XPREV YPREV QCPLOT                                         ['] YPREV 2+  ! ['] XPREV 2+ !                             CINCR +LOOP DROP ;                                          -->                                                                                                                             ( circle                                             12/17/83 ) DECIMAL                                                         ( x y r color --- )                                             : CIRCLE     100 SWAP ELLIPSE ;                                                                                                 -->                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( cube                                               05/05/82 ) ( A cube is defined by the usual coordinates for a box and )    ( the xd,yd which gives the displayed depth of the sides. )                                                                     ( For the routine to work properly, the corners of the box )    ( must be defined in clockwise order around the edge, where)    ( x1,y1 is the upper left corner of the box; )                  ( x2,y2 is upper right corner of box; x3,y3 is lower )          ( right corner of box; x4,y4 is lower left corner of box. )     ( yd < 0 => top view, yd > 0 => bottom view )                   ( xd < 0 => left view, xd > 0 => right view )                                                                                   : XD@   RP@ WSIZE + @ ;                                         : YD@   RP@ WSIZE 2* + @ ;                                      -->                                                                                                                             ( cube                                               05/04/82 ) ( x1 y1  x2 y2  x3 y3  x4 y4  xd yd  color  --- )               : CUBE          DEPTH 11 < 1 ?ERROR                                             ['] CHUE 2+ ! >R >R 8DUP CHUE RECTANGLE YD@ 0<                  IF    7 PICK 7 PICK 7 PICK 7 PICK                               ELSE  3 PICK 3 PICK 3 PICK 3 PICK                               THEN  4DUP 2SWAP                                                3 ROLL XD@ + 3 ROLL YD@ +                                       3 ROLL XD@ + 3 ROLL YD@ + CHUE RECTANGLE XD@ 0<                 IF   2DUP 09 PICK 09 PICK                                       ELSE 5 PICK 5 PICK 5 PICK 5 PICK                                THEN 4DUP 2SWAP                                                 3 ROLL XD@ + 3 ROLL YD@ +                                       3 ROLL XD@ + 3 ROLL YD@ +   CHUE RECTANGLE                      R> R> 2DROP 2DROP 2DROP 2DROP 2DROP ;           ;S                                                              ( light pen support                                  07/10/82 ) HEX                                                             : @lightpen     0 0 0 0400 video-io ;                           : ?lightpen     @lightpen 100 AND 100 = ;                       ( --- f         f=0 light pen not down/triggered, =1 triggered) : ?LIGHTPEN     ?lightpen >R 2DROP DROP R> ;                    ( --- x y       leave graphics address )                        (               range of x,y depends on current mode )          : @GRAPHXY      BEGIN ?lightpen 0= WHILE 2DROP DROP REPEAT                      ROT DROP SWAP 0 100 UM/MOD SWAP DROP ;          ( --- x y       leave cursor address )                          : @CURSORXY     BEGIN ?lightpen 0= WHILE 2DROP DROP REPEAT                      DROP DROP DUP 0FF AND SWAP                                      0 100 UM/MOD SWAP DROP ;                        DECIMAL ;S                                                                                                                      ( window support        Ray Duncan                   07/12/82 ) HEX                                                                                                                             ( create wpb      compilation:   xul yul xlr ylr --- )          (                 execution:     ---  wpb-addr )                : WINDOW        CREATE  100 * + , 100 * + , 700 , DOES> ;                                                                       ( fetch parameters for VIDEO-IO call:  wpb  ---  dx cx bx )     : WPAR@         DUP @ SWAP WSIZE + DUP @ SWAP WSIZE + @ ;                                                                       ( change initializing attribute:    attrib wpb --- )            : W-ATTRIB      SWAP 100 * SWAP WSIZE 2* + ! ;                                                                                  ( execute window function:   dx cx bx ax --- )                  : W-EXEC        video-io 4DROP ;                                -->                                                             ( window support, continued                          07/12/82 )                                                                 ( initialize window:     wpb  ---  )                            : W-CLEAR       WPAR@ 0600 W-EXEC ;                                                                                             ( scroll window up:      wpb  ---  )                            : W-UP          WPAR@ 0601 W-EXEC ;                                                                                             ( scroll window down:    wpb  ---  )                            : W-DOWN        WPAR@ 0701 W-EXEC ;                                                                                             ( cursor addressing within window:    x y wpb --- )             : W-GOTOXY      WSIZE + @ DUP 0FF AND SWAP 100 / D+ GOTOXY ;                                                                    -->                                                                                                                             ( window support, continued                          07/12/82 )                                                                                                                                 ( move cursor to window home position:     wpb --- )            : W-HOME        WSIZE + @ DUP 0FF AND SWAP 100 / GOTOXY ;                                                                       ( move cursor to window lower left corner:    wpb --- )         : W-LLC         DUP WSIZE + @ 0FF AND SWAP @ 100 / GOTOXY ;                                                                     -->                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( window support, continued                          07/12/82 )                                                                 ( draw border around window:   wpb  --- )                       : W-BORDER   DUP >R WSIZE + @ DUP 0FF AND                                  SWAP 0 100 UM/MOD SWAP DROP                                     R> @ DUP 0FF AND SWAP 0 100 UM/MOD SWAP DROP         ( top )    1 PICK 1+ 4 PICK DO I 3 PICK 1- GOTOXY C4 EMIT LOOP  ( bottom)  1 PICK 1+ 4 PICK DO I 1 PICK 1+ GOTOXY C4 EMIT LOOP  ( right )  DUP 1+ 3 PICK DO 1 PICK 1+ I GOTOXY B3 EMIT LOOP     ( left )   DUP 1+ 3 PICK DO 3 PICK 1- I GOTOXY B3 EMIT LOOP     ( ur )     1 PICK 1+ 3 PICK 1- GOTOXY 0BF EMIT                  ( ll )     3 PICK 1- 1 PICK 1+ GOTOXY 0C0 EMIT                  ( lr )     1+ SWAP 1+ SWAP GOTOXY 0D9 EMIT                      ( ul )     1- SWAP 1- SWAP GOTOXY DA EMIT ;                                                                                     DECIMAL ;S                                                      ( turtle graphics for IBM       Ray Duncan           12/07/83 )                                                                 VOCABULARY TURTLE IMMEDIATE                                     TURTLE DEFINITIONS DECIMAL                                                                                                      VARIABLE turtleX        ( Turtle current X coordinate )         VARIABLE turtleY        ( Turtle current Y coordinate )         VARIABLE turtleD        ( Turtle's direction, degrees )         VARIABLE turtleP        ( Turtle's pen, 0=pen up, <>0=pen down) VARIABLE turtleC        ( Turtle's color )                      1 turtleP !             ( default turn on pen )                 1 turtleC !             ( default turn on color )                                                                               -->                                                                                                                                                                                             ( turtle graphics for IBM       RGD                  12/07/83 ) ( math redefinitions without flooring for turtle graphics )     : tM/MOD ?DUP IF 2DUP XOR >R >R DABS R@ ABS UM/MOD SWAP R>               0< IF NEGATE THEN SWAP R> 0< IF NEGATE THEN THEN ;     : t/MOD  >R S>D R> tM/MOD ;                                     : t/     t/MOD SWAP DROP ;                                      : tMOD   OVER 0< IF SWAP ABS SWAP t/MOD DROP NEGATE                      ELSE t/MOD DROP THEN ;                                 : t*/MOD >R M* R> tM/MOD ;                                      : t*/    >R M* R> tM/MOD SWAP DROP ;                                                                                            : moveTurtle    ( units --- x' y' )                                     DUP  turtleD @ COS 10000 t*/ turtleX @ +                        SWAP turtleD @ SIN 10000 t*/                                    ?MODE 6 < IF 92 ELSE 48 THEN 100 t*/ turtleY @ + ;      -->                                                             ( turtle graphics for IBM       RGD                  12/07/83 )                                                                 : FORWARD       ( units --- ) moveTurtle turtleP @                              IF   2DUP turtleX @ turtleY @ turtleC @ line                    THEN turtleY ! turtleX ! ;                      : BACKWARD      ( units --- )                                                   NEGATE FORWARD ;                                : RIGHT         ( degrees --- )                                                 turtleD @ + 360 tMOD turtleD ! ;                : LEFT          ( degrees --- )                                                 NEGATE RIGHT ;                                  : CENTER        ( put turtle in center of screen )                              ?MODE 6 = IF 320 ELSE 160                                       THEN turtleX ! 100 turtleY ! 0 turtleD ! ;      -->                                                                                                                             ( turtle graphics for IBM       RGD                  12/07/83 )                                                                 ( put turtle in upper left corner )                             : HOME          0 turtleX ! 0 turtleY ! 0 turtleD ! ;                                                                           ( return current direction in degrees )                         : ?DIRECTION    turtleD @ ;                                                                                                     ( set direction in degrees )                                    : DIRECTION     turtleD ! ;                                                                                                     ( set current location of turtle )                              : SETXY         turtleY ! turtleX ! ;                                                                                           ( lift pen --- ie turtle movements do not leave a trail )       : PENUP         0 turtleP ! ;   -->                             ( turtle graphics for IBM       RGD                  12/07/83 )                                                                 ( lower pen --- movements by turtle leave a trail )             : PENDOWN       1 turtleP ! ;                                   ( set color of pen )                                            : COLOR         turtleC ! ;                                     ( return true flag if turtle has gone outside bounds )          : ?QUIT         turtleX @ DUP ?MODE 6 =                                         IF 639 ELSE 319 THEN > SWAP 0< OR                               turtleY @ DUP 199 > SWAP 0< OR OR ;             : SQUARE        ( size --- )                                                    DUP FORWARD 90 RIGHT DUP FORWARD 90 RIGHT                       DUP FORWARD 90 RIGHT FORWARD 90 RIGHT ;         FORTH DEFINITIONS                                                                                                                                                                               ( Keypad Mouse          Rick Wilton                  08/20/82 ) ( The keypad mouse allows the convenient entry of points     )  ( in high or medium resolution graphics mode. When MOUSE     )  ( is called, it puts a dot in the middle of the screen and   )  ( waits for keypad commands.  The arrow keys can be used     )  ( to move the dot in increments of one, shift/arrow will     )  ( jump the dot 10 positions.  To select a point push ENTER,  )  ( the point will be marked with an X.  You can select as     )  ( many points as you wish.  To leave the MOUSE, push ESC.    )  ( When MOUSE returns control to its caller, the coordinates  )  ( of selected points are on the stack as 2 word X,Y pairs.   )  ( Use DEPTH/2 to determine the number of pairs on the stack. )  -->                                                                                                                                                                                                                                                             ( Keypad Mouse, cont                                 08/20/82 )                                                                 : INC-XY ( x y dx dy -- x y ) 3 PICK 3 PICK 0 !dot                 ROT + 0 MAX 199 MIN >R + 0 MAX                                  ?MODE 6 < IF 319 ELSE 639 THEN MIN R>                           2DUP 1 !dot 2DUP 0 0 GOTOXY SWAP 3 .R 4 .R ;                                                                                 : SAVE-XY ( x y -- )                                               OVER 1+ OVER 1+ 1 !dot OVER 1- OVER 1- 1 !dot                   OVER 1+ OVER 1- 1 !dot OVER 1- OVER 1+ 1 !dot                   OVER 2+ OVER 2+ 1 !dot OVER 2- OVER 2- 1 !dot                   OVER 2+ OVER 2- 1 !dot OVER 2- OVER 2+ 1 !dot 7 EMIT ;       -->                                                                                                                                                                                                                                                             ( Keypad Mouse, cont                                 08/20/82 )                                                                 : PARSE-PENMOVE ( x y n -- x y )    CASE                           72 OF 0 -1 INC-XY ENDOF   56 OF 0 -10 INC-XY ENDOF              77 OF 1  0 INC-XY ENDOF   54 OF 10 0  INC-XY ENDOF              80 OF 0  1 INC-XY ENDOF   50 OF 0 10 INC-XY ENDOF               75 OF -1 0 INC-XY ENDOF   52 OF -10 0 INC-XY ENDOF              13 OF 2DUP SAVE-XY ENDOF       ENDCASE ;                                                                                     : AWAIT-PENMOVE ( -- )   BEGIN                                     BEGIN ?TERMINAL UNTIL KEY ?DUP IF ELSE KEY THEN                 DUP 27 = IF 2DROP DROP EXIT THEN  PARSE-PENMOVE AGAIN ;                                                                      -->                                                                                                                                                                                             ( Keypad Mouse, cont                                 08/20/82 )                                                                 : MOUSE (  ---   x,y-pairs   )  CLEARSCREEN  ?MODE 6 <                  IF 160 ELSE 319 THEN 99 0 0 INC-XY  AWAIT-PENMOVE ;     ;S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ( Microsoft Mouse 16 Bit version   Ray Duncan        12/08/83 )                                                                 FORTH DEFINITIONS HEX                                                                                                           ( M4 M3 M2 M1 --- M4 M3 M2 M1 )                                 ( dx cx bx ax --- dx cx bx ax )                                 CODE mouse-io   AX POP  BX POP  CX POP  DX POP                                  SI PUSH  BP PUSH  33 INT                                        BP POP   SI POP                                                 DX PUSH  CX PUSH  BX PUSH  AX PUSH                              NEXT,  END-CODE                                 -->                                                                                                                                                                                                                                                                                                                             ( Microsoft Mouse interface                          12/08/83 )                                                                 DECIMAL                                                         ( --- flag : -1 installed, 0 not installed )                    : MOUSE-RESET   0 0 0 0 mouse-io >R 3DROP R> ;                                                                                  ( --- )                                                         : SHOW-CURSOR   0 0 0 1 mouse-io 4DROP ;                                                                                        ( --- )                                                         : HIDE-CURSOR   0 0 0 2 mouse-io 4DROP ;                                                                                        ( ---  x y )                                                    : @POSITION     0 0 0 3 mouse-io 2DROP SWAP ;                   -->                                                                                                                             ( Microsoft Mouse interface                          12/08/83 )                                                                 DECIMAL                                                         ( --- n  : bits 0 and 1 represent left and right buttons )      : @BUTTONS      0 0 0 3 mouse-io DROP >R 2DROP R> ;                                                                             ( x y --- )                                                     : !POSITION     SWAP 0 4 mouse-io 4DROP ;                                                                                       ( button --- x y press_count button_status )                    ( button=0 left,=1 right)                                       : @PRESSES      0 0 ROT 5 mouse-io                                              3 ROLL 3 ROLL SWAP 3 ROLL 3 ROLL ;              -->                                                                                                                                                                                             ( Microsoft Mouse interface                          12/08/83 )                                                                 DECIMAL                                                         ( button --- x y release_count button_status )                  ( button=0 left,=1 right)                                       : @RELEASES     0 0 ROT 6 mouse-io                                              3 ROLL 3 ROLL SWAP 3 ROLL 3 ROLL ;                                                                              ( min max --- )                                                 : HORIZ-LIMITS  SWAP 0 7 mouse-io 4DROP ;                                                                                       ( min max --- )                                                 : VERT-LIMITS   SWAP 0 8 mouse-io 4DROP ;                       -->                                                                                                                                                                                             ( Microsoft Mouse interface                          12/08/83 )                                                                 DECIMAL                                                         ( pointer x y --- )                                             : SET-GCUR      SWAP 9 mouse-io 4DROP ;                                                                                         ( hardware: scan_line_start scan_line_stop cursor_select --- )  ( software: screen_mask cursor_mask cursor_select --- )         : SET-TCUR      ROT ROT SWAP ROT 10 mouse-io 4DROP ;                                                                            ( --- x_count y_count )                                         : @COUNTERS     0 0 0 11 mouse-io 2DROP SWAP ;                  -->                                                                                                                                                                                                                                                             ( Microsoft Mouse interface                          12/08/83 )                                                                 DECIMAL                                                         ( address mask --- )                                            : SET-SUBR      0 12 mouse-io 4DROP ;                                                                                           ( --- )                                                         : ENABLE-PEN    0 0 0 13 mouse-io 4DROP ;                                                                                       ( --- )                                                         : DISABLE-PEN   0 0 0 14 mouse-io 4DROP ;                                                                                       ( horizontal_ratio vertical_ratio --- )                         : SET-MICKEY    SWAP 0 15 mouse-io 4DROP ;                      ;S                                                                                                                              ( Optical mouse 16 Bit version  RJW                  01/29/83 ) ;S                                                              This routine monitors and demonstrates the MSC M-1 Optical      Mouse, sold by Mouse Systems Corp., 2336H Walsh Ave.,           Santa Clara, CA 95051.  The software assumes that the Mouse     is on the first serial port --- COM0.                                                                                           There are 2 code defs -- one call to the ROM BIOS to initialize the first comm port, and one code def which reads data          directly from the port (no handshaking).                                                                                        To run the demo, enter:   83 LOAD  DEMO                                                                                         Pressing the left button causes the mouse to leave a trail.     Pressing all 3 at once ends the demo.                                                                                           ( Optical mouse 16 Bit version                       12/07/83 )                                                                 HEX                                                                                                                             CODE INT14  ( AX DX -- AX )            ( see Tech Ref p. A-20 )  DX POP AX POP  14 INT  AX PUSH  NEXT, END-CODE                                                                                                                                                 : INIT-MOUSE ( -- AX )     ( set commo port 0 to 1200 baud .. )    083 0 INT14 ;        ( .. no parity, 1 stopbit, 8-bit data )                                                                 DECIMAL                                                                                                                          -->                                                                                                                                                                                            ( Optical mouse 16 Bit version                       01/29/83 )                                                                 FORTH DEFINITIONS HEX                                                                                                           CODE @MOUSE ( -- dX dY dX dY LMR )                                   CX, # 3 MOV                           ( # bits for shift ) 1$:  DX, # 3FD MOV     AL, DX IN       ( read RS-232 LSR port )      AL, # 01 AND                       ( wait for Data Ready )      1$ JZ                                                           DX, # 3F8 MOV     AL, DX IN      ( read RS-232 data port )      AH, AL MOV                       ( copy to hi-order byte )      AX, CL SHR                   ( put flag in AH, LMR in AL )      AH, # 10 CMP                  ( 1st byte of data packet? )      1$ JNE                                ( try again if not )      BL, AL MOV                          ( save LMR for later )  -->                                                            ( Optical mouse 16 bit version                       12/07/83 )                                                                      CX, # 4 MOV                             ( count for loop ) 2$:  DX, # 3FD MOV     AL, DX IN       ( read RS-232 LSR port )      AL, # 01 AND                       ( wait for Data Ready )      2$ JZ                                                           DX, # 3F8 MOV     AL, DX IN      ( read RS-232 data port )      CBW                                        ( sign extend )      AX PUSH                                ( push onto stack )      2$ LOOP                                                         BH, BH XOR                          ( zero hi-order byte )      CL, # 5 MOV                        ( set # bits to shift )      BL, CL SHR                    ( shift LMR flags to right )      BX PUSH                                ( push the result )      NEXT, END-CODE                              ( c'est tout )  DECIMAL                                                        ( Lo Res 16 bit version                              12/27/82 ) FORTH DEFINITIONS HEX                                                                                                           ( initialize video controller chip )                            : TR            3D4 PC! 3D5 PC! ;                               : CRT_LRC_INIT  9 3D8 PC! 07F 4 TR 64 6 TR 70 7 TR 1 9 TR ;                                                                     ( initialize video memory map for low res graphics )            : CLEAR_BUFF    4000 0 DO 0DE B800 I !L  2 +LOOP ;                                                                              ( set operating mode for low resolution color graphics )        : LRCG          2 MODE  CRT_LRC_INIT  CLEAR_BUFF ;              -->                                                                                                                                                                                                                                                             ( Lo Res 16 Bit version                              01/12/84 )                                                                 ( plot point in low res graphics:  x y color --- )              : !DOT          ROT DUP 1 AND                                                   IF    ROT 0A0 * + B800 SWAP 2DUP C@L                                  0F0 AND >R ROT R> OR ROT ROT C!L                          ELSE  1 OR SWAP 10 * SWAP ROT 0A0 * +                                 B800 SWAP 2DUP C@L 0F AND                                       >R ROT R> OR ROT ROT C!L                                  THEN ;                                                                                                          DECIMAL                                                                                                                                                                                                                                                                                                                         ( Lo Res 16 Bit version                              12/07/83 ) FORTH DEFINITIONS HEX                                                                                                           ( initialize video controller chip )                            : TR            3D4 PC! 3D5 PC! ;                               : CRT_LRC_INIT  9 3D8 PC! 07F 4 TR 64 6 TR 70 7 TR 1 9 TR ;                                                                     ( initialize video memory map for low res graphics )            CODE CLEAR_BUFF CX, # B800 MOV DX, ES MOV  ES, CX MOV                           DI, # 0 MOV  CX, # 4000 MOV  AX, # DE MOV                       REP WORD STOS  ES, DX MOV  NEXT, END-CODE                                                                       ( set operating mode for low resolution color graphics )        : LRCG          2 MODE  CRT_LRC_INIT  CLEAR_BUFF ;              -->                                                                                                                             ( Lo Res 16 Bit version                              12/07/83 ) HEX                                                                                                                             ( plot point in low res graphics:  x y color --- )              CODE !DOT       CX, # B800 MOV  DX, DS MOV  DS, CX MOV                          BX POP  AX POP  CL, # 0A0 MOV  CL MUL                           CX POP  AX, BX XCHG  BX, CX ADD  BX, # 1 OR                     AH, [BX] MOV  CX, # 1 AND  1$ JNZ                               AH, # 0F AND  AL, 1 SHL  AL, 1 SHL                              AL, 1 SHL  AL, 1 SHL  2$ JMP                               1$:  AH, # 0F0 AND                                              2$:  AL, AH OR  [BX], AL MOV  DS, DX MOV                             NEXT, END-CODE                                                                                                  DECIMAL -->                                                                                                                     ( Lo Res 16 Bit version                              12/07/83 ) VARIABLE INCR 2 ALLOT                                           VARIABLE COLOR                                                  : 4DUP  3 PICK 3 PICK 3 PICK 3 PICK ;                                                                                           : LINE  ( x1 y1 x2 y2 color --- )  COLOR !                              4DUP ROT - ABS ROT ROT SWAP - ABS <                             IF  3 PICK 2 PICK > IF 2SWAP THEN                                   4DUP ROT - ROT ROT SWAP -                                       SWAP 1000 M* ROT M/MOD                                          S>D INCR 2! DROP                                                DROP SWAP 1000 M*                                               3 ROLL 3 ROLL SWAP                                              DO 2DUP 1000 M/MOD SWAP DROP I                                     SWAP COLOR @ !DOT INCR 2@ D+ LOOP                -->                                                             ( Lo Res 16 Bit version                              12/07/83 )                                                                         ELSE 2 PICK 1 PICK > IF 2SWAP THEN                                 4DUP ROT - ROT ROT SWAP -                                       1000 M* ROT M/MOD  S>D INCR 2! DROP                             SWAP DROP ROT 1000 M*                                           3 ROLL 3 ROLL SWAP                                              DO  2DUP 1000 M/MOD  SWAP DROP I COLOR @ !DOT                       INCR 2@ D+ LOOP                                          THEN 2DROP ;                                                                                                                                                                                                                                                                                                                                                                                                                                            ( Joystick 16 Bit                        J. Marxer    4/01/83 )                                                                 HEX CODE STICK  ( bit number 0-3 --- reading )                  ( reading of 12CH = 300 decimal means stick not connected )             CX      POP             ( bit number from stack )               CX, # 3 CMP             ( bits 0-3 allowed here )               1$      JLE             ( too large ? )                         CX, CX  XOR             ( yes set to zero )               1$:   BX, # 1 MOV             ( BX will be bit mask )                 BL, CL  ROL                                                     DX, # 201 MOV           ( port address to DX )                  CX, CX  XOR             ( zero counter )                        DX, AL  OUT             ( fire the one-shot)              2$:   CX      INC             ( increment counter )                   CX, # 12B CMP           ( count = 300 decimal?)         -->                                                             ( Joystick 16 Bit                                    12/07/83 )                                                                         4$      JG              ( yes, stick not connected)             AL, DX  IN              ( read game adapter port )              AL, BL  AND             ( isolate bit )                         2$      JNZ             ( if zero, finished )                   CX, CX  XOR             ( zero counter again )                  DX, AL  OUT             ( fire the one-shot )             3$:   CX      INC             ( increment counter )                   AL, DX  IN              ( read game adapter port)               AL, BL  AND             ( isolate bit )                         3$      JNZ             ( if zero, finished )             4$:   CX PUSH                 ( put counter on stack )                NEXT, END-CODE                                                                                                          DECIMAL ;S                                                      ( Version dependent parameters for 16 Bit Forth      01/12/84 ) FORTH DEFINITIONS HEX                                                                                                           B800 CONSTANT C/G-MAP                                                                                                           : SET-DTA       C/G-MAP 0 set-dta ;                             : W!            ! ;             ( aliases )                     : W@            @ ;                                             : ADDR>FDOS     FDOS ;                                          : W,            , ;                                                                                                             DECIMAL                                                                                                                                                                                                                                                                                                                         ( Version dependent parameters for 32 Bit Forth      01/12/84 ) FORTH DEFINITIONS HEX                                                                                                           HEX B8000000 CONSTANT C/G-MAP                                                                                                   : SET-DTA  C/G-MAP S&O>ADDR set-dta ;                                                                                           DECIMAL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ( MS Mouse 32 Bit               Ray Duncan           01/12/84 ) FORTH DEFINITIONS HEX                                           ( M4 M3 M2 M1 --- M4 M3 M2 M1 )                                 ( dx cx bx ax --- dx cx bx ax )                                 CODE mouse-io   SP, # 2 ADD  AX POP  SP, # 2 ADD  BX POP                        SP, # 2 ADD  CX POP  SP, # 2 ADD  DX POP                        DS PUSH   SI PUSH  BP PUSH  33 INT                              BP POP   SI POP   DS PUSH    DI, AX MOV                         AX, DX MOV  CWD  AX PUSH  DX PUSH                               AX, CX MOV  CWD  AX PUSH  DX PUSH                               AX, BX MOV  CWD  AX PUSH  DX PUSH                               AX, DI MOV  CWD  AX PUSH  DX PUSH                               NEXT,  END-CODE                                                                                                 DECIMAL 42 LOAD  ( load remainder of words )                                                                                    ( Optical Mouse 32 bit                               01/12/84 )                                                                 HEX                                                                                                                             CODE INT14  ( AX DX -- AX )            ( see Tech Ref p. A-20 )      SP, # 2 ADD  DX POP   SP, # 2 ADD  AX POP                       14 INT  CWD   AX PUSH  DX PUSH   NEXT, END-CODE                                                                                                                                            : INIT-MOUSE ( -- AX )     ( set commo port 0 to 1200 baud .. )    083 0 INT14 ;        ( .. no parity, 1 stopbit, 8-bit data )                                                                 DECIMAL                                                                                                                          -->                                                                                                                            ( Optical Mouse 32 bit                               01/29/83 )                                                                 FORTH DEFINITIONS HEX                                                                                                           CODE @MOUSE ( -- dX dY dX dY LMR )                                   CX, # 3 MOV                           ( # bits for shift ) 1$:  DX, # 3FD MOV     AL, DX IN       ( read RS-232 LSR port )      AL, # 01 AND                       ( wait for Data Ready )      1$ JZ                                                           DX, # 3F8 MOV     AL, DX IN      ( read RS-232 data port )      AH, AL MOV                       ( copy to hi-order byte )      AX, CL SHR                   ( put flag in AH, LMR in AL )      AH, # 10 CMP                  ( 1st byte of data packet? )      1$ JNE                                ( try again if not )      BL, AL MOV                          ( save LMR for later )  -->                                                            ( Optical Mouse 32 Bit                               12/07/83 )                                                                      CX, # 4 MOV                             ( count for loop ) 2$:  DX, # 3FD MOV     AL, DX IN       ( read RS-232 LSR port )      AL, # 01 AND                       ( wait for Data Ready )      2$ JZ                                                           DX, # 3F8 MOV     AL, DX IN      ( read RS-232 data port )      CBW   CWD                                  ( sign extend )      AX PUSH  DX PUSH                       ( push onto stack )      2$ LOOP                                                         BH, BH XOR                          ( zero hi-order byte )      CL, # 5 MOV                        ( set # bits to shift )      BL, CL SHR                    ( shift LMR flags to right )      BX PUSH  BX, BX SUB  BX PUSH           ( push the result )      NEXT, END-CODE                              ( c'est tout )  DECIMAL                                                        ( Lo Res Graphics 32 bit                             12/07/83 ) FORTH DEFINITIONS HEX                                                                                                           ( initialize video controller chip )                            : TR            3D4 PC! 3D5 PC! ;                               : CRT_LRC_INIT  9 3D8 PC! 07F 4 TR 64 6 TR 70 7 TR 1 9 TR ;                                                                     ( initialize video memory map for low res graphics )            CODE CLEAR_BUFF CX, # B800 MOV DX, ES MOV  ES, CX MOV                           DI, # 0 MOV  CX, # 4000 MOV  AX, # 0DE MOV                      REP WORD STOS  ES, DX MOV  NEXT, END-CODE                                                                       ( set operating mode for low resolution color graphics )        : LRCG          2 MODE  CRT_LRC_INIT  CLEAR_BUFF ;              -->                                                                                                                             ( Lo Res Graphics 32 bit                             12/07/83 ) HEX                                                             ( plot point in low res graphics:  x y color --- )              CODE !DOT       CX, # B800 MOV  DX, DS MOV  DS, CX MOV                          SP, # 2 ADD   BX POP  SP, # 2 ADD  AX POP                       CL, # 0A0 MOV  CL MUL   SP, # 2 ADD                             CX POP  AX, BX XCHG  BX, CX ADD  BX, # 1 OR                     AH, [BX] MOV  CX, # 1 AND  1$ JNZ                               AH, # 0F AND  AL, 1 SHL  AL, 1 SHL                              AL, 1 SHL  AL, 1 SHL  2$ JMP                               1$:  AH, # 0F0 AND                                              2$:  AL, AH OR  [BX], AL MOV  DS, DX MOV                             NEXT, END-CODE                                                                                                  DECIMAL 55 LOAD ( get implementation independent words )                                                                        ( Joystick 32 Bit                        J. Marxer    4/01/83 ) HEX CODE STICK  ( bit number 0-3 --- reading )                  ( reading of 12CH = 300 decimal means stick not connected )             SP, # 2 ADD             ( drop upper 16 bits)                   CX      POP             ( bit number from stack )               CX, # 3 CMP             ( bits 0-3 allowed here )               1$      JLE             ( too large ? )                         CX, CX  XOR             ( yes set to zero )               1$:   BX, # 1 MOV             ( BX will be bit mask )                 BL, CL  ROL                                                     DX, # 201 MOV           ( port address to DX )                  CX, CX  XOR             ( zero counter )                        DX, AL  OUT             ( fire the one-shot)              2$:   CX      INC             ( increment counter )                   CX, # 12B CMP           ( count = 300 decimal?)         -->                                                             ( Joystick 32 Bit                                    12/07/83 )                                                                         4$      JG              ( yes, stick not connected)             AL, DX  IN              ( read game adapter port )              AL, BL  AND             ( isolate bit )                         2$      JNZ             ( if zero, finished )                   CX, CX  XOR             ( zero counter again )                  DX, AL  OUT             ( fire the one-shot )             3$:   CX      INC             ( increment counter )                   AL, DX  IN              ( read game adapter port)               AL, BL  AND             ( isolate bit )                         3$      JNZ             ( if zero, finished )             4$:   CX PUSH                 ( put counter on stack )                CX, CX SUB  CX PUSH                                             NEXT, END-CODE                                          DECIMAL ;S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ( Color PC drawing demo                              05/15/82 ) VARIABLE DCOUNT                                                                                                                 : DEMO  4 MODE 0 PALETTE 2 FOREGROUND 1 BACKGROUND                      5 1 GOTOXY  ." Laboratory Microsystems PC/FORTH"                105 40 205 40 205 120 105 120 10 -10 3 CUBE  ( monitor)         110 45 185 45 185 115 110 115 3 RECTANGLE  ( screen)            147 80 3 2 FLOOD                                                147 80 9 1 CIRCLE                                               147 80 1 1 FLOOD                                                147 80 20 20 1  ELLIPSE                                         147 80 20 15 1  ELLIPSE                                         195 100 3 3 CIRCLE 195 90 3 3 CIRCLE        ( knobs )           195 100 3 3 FLOOD  195 90 3 3 FLOOD                     -->                                                                                                                             ( Color PC drawing demo                              05/15/82 )                                                                         80  125 230 125 230 160 80  160 3 RECTANGLE                     80  125 95  110 3 LINE  230 125 245 110 3 LINE                  230 160 245 145 3 LINE  245 145 245 110 3 LINE                  95  110 103 110 3 LINE  216 110 245 110 3 LINE                  120 90 DO I 145 I 2 + 145               ( vent slots)              I 2 + 155 I 155 3 RECTANGLE 5 +LOOP                          130 130 225 130 225 155 130 155 3 RECTANGLE                     176 130 176 155 3 LINE                  ( divider )             178 130 178 155 3 LINE ( divider )                              131 142 175 142 175 145 131 145 3 RECTANGLE                     151 133 156 133 156 150 151 150 3 RECTANGLE             -->                                                                                                                                                                                             ( Color PC drawing demo                              05/15/82 )                                                                         180 142 223 142 223 145 180 145 3 RECTANGLE                     199 133 204 133 204 150 199 150 3 RECTANGLE                     80  165 230 165 215 185 65 185 3 RECTANGLE                      81  170 221 170 212 182 72 182 3 RECTANGLE                      83  174 208 174 3 LINE                                          79 178  205 178 3 LINE                                          215 85  DO I 172 I 6 - 180 3 LINE 5 +LOOP                       0 0 GOTOXY ;                                                                                                                                                                                                                                                                                                                                                                                                                                            ( window examples                                    07/12/82 ) 5 5 30 10 WINDOW W1                                             40 7 70 15 WINDOW W2                                            10 21 70 23 WINDOW W3                                                                                                           : DEMO  CLEARSCREEN  W1 W-BORDER W2 W-BORDER W3 W-BORDER                W1 W-CLEAR W2 W-CLEAR W3 W-CLEAR                                W3 W-HOME ." We will scroll the left window up"                 0 1 W3 W-GOTOXY ." and the right window down"                   100 0 DO  W1 W-UP W1 W-LLC ." Line # " I .                                W2 W-DOWN W2 W-HOME ." Line # " I .   LOOP            W3 W-CLEAR W3 W-HOME ." Demonstration is finished."             0 0 GOTOXY ;                                                                                                                                                                                                                                            ( Color trig demo for integer trig functions         08/01/82 )                                                                 DECIMAL                                                                                                                         -50 CONSTANT SCALING                                                                                                            : AXES          20 20 20 180 3 line                                             20 180 300 180 3 line                                           300 20 DO       I 180 I 175 3 line                              45 +LOOP                                                        600 0 DO        I 16 / 2 + 24 GOTOXY I .                        90 +LOOP ;                                      -->                                                                                                                                                                                                                                                             ( Color trig demo for integer trig functions         08/01/82 )                                                                 : DEMO          4 MODE  AXES                                                    560 0 DO  I SIN SCALING 10000 */                                          100 + I 2/ 20 + SWAP 1 !dot                           LOOP                                                            560 0 DO  I COS SCALING 10000 */                                          100 + I 2/ 20 + SWAP 2 !dot                           LOOP                                                            1 FOREGROUND  8 20 GOTOXY ." Sine"                              2 FOREGROUND  4 12 GOTOXY ." Cosine"                            0 0 GOTOXY ;                                                                                                                                                                                                                                                                                                    ( POLYSPI demo for Turtle Graphics                   08/07/82 ) FORTH DEFINITIONS DECIMAL                                                                                                       : POLYSPI   ( distance  angle  change  --- )    TURTLE                  ?QUIT IF EXIT THEN                                              2 PICK FORWARD  1 PICK RIGHT                                    ROT OVER + ROT ROT  MYSELF   FORTH ;                    : DEMOX         TURTLE 6 MODE CENTER FORTH ;                    : DEMO1         DEMOX 10 60 3 POLYSPI ;                         : DEMO2         DEMOX 10 61 3 POLYSPI ;                         : DEMO3         DEMOX 10 62 3 POLYSPI ;                         : DEMO4         DEMOX 10 91 3 POLYSPI ;                         : DEMO5         DEMOX 10 121 3 POLYSPI ;                        : DEMO9         TURTLE 135 10 DO CLEARSCREEN ." Angle = " I .                   0 DIRECTION  CENTER 10 I 3 POLYSPI LOOP FORTH ;                                                                 ( STAR demo for Turtle Graphics                      08/07/82 ) FORTH DEFINITIONS DECIMAL                                       : STAR       ( distance  angle  change  --- )   TURTLE                  ?QUIT IF EXIT THEN                                              320 turtleX ! 99 turtleY !                                      2 PICK FORWARD                                                  1 PICK RIGHT                                                    ROT OVER + ROT ROT                                              MYSELF FORTH ;                                          : DEMOX         TURTLE 0 turtleX ! 0 turtleY ! 6 MODE FORTH ;   : DEMO1         DEMOX   10 59 1 STAR ;                          : DEMO2         DEMOX   10 61 1 STAR ;                          : DEMO3         DEMOX   10 65 1 STAR ;                                                                                                                                                                                                                          ( Bi-Tree Demo for Turtle Graphics                   08/07/82 ) FORTH DEFINITIONS DECIMAL                                                                                                       : DRAW-TREE     ( size  --- )   TURTLE                                  DUP 5 < IF DROP  EXIT THEN                                      DUP FORWARD                                                     45 RIGHT                                                        DUP 5 - FORWARD DUP 5 - MYSELF DUP 5 - BACKWARD                 90 LEFT                                                         DUP 5 - FORWARD DUP 5 - MYSELF DUP 5 - BACKWARD                 45 RIGHT                                                        BACKWARD FORTH  ;                                                                                                       : DEMO  TURTLE  6 MODE  320 199 SETXY -90 DIRECTION 50 FORWARD          40  DRAW-TREE   FORTH ;                                                                                                 ( SPINSQUARE demo for turtle graphics                08/07/82 )                                                                 FORTH DEFINITIONS DECIMAL                                                                                                       : SPINSQUARE    ( size angle difference --- )   TURTLE                          2 PICK 150 > IF EXIT                                            THEN 2 PICK SQUARE 1 PICK RIGHT                                 ROT OVER + ROT ROT MYSELF FORTH ;               : DEMOX         TURTLE 6 MODE CENTER FORTH ;                    : DEMO1         DEMOX 10 5 3 SPINSQUARE ;                       : DEMO2         DEMOX 10 10 3 SPINSQUARE ;                      : DEMO3         DEMOX 10 45 3 SPINSQUARE ;                      : DEMO4         DEMOX 10 60 3 SPINSQUARE ;                                                                                                                                                                                                                      ( Lo Res Color Graphics demonstration                12/07/83 ) VARIABLE COLOR  3 COLOR !                                       VARIABLE CSEQ   2 , 4 , 6 , 8 , 10 , 12 , 14 ,                                  1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 ,              : SQUARE        DUP 0= IF DROP EXIT THEN DUP 80 + OVER 80                       SWAP - 2 PICK DUP 50 + 50 ROT - SWAP 1+ SWAP                    DO    DUP I COLOR @ !DOT OVER I COLOR @ !DOT                    LOOP  2DROP DUP 50 + OVER 50 SWAP -                             2 PICK DUP 80 + 80 ROT - SWAP 1+ SWAP                           DO    DUP I SWAP COLOR @ !DOT                                         OVER I SWAP COLOR @ !DOT                                  LOOP  2DROP DROP ;                              : DEMO1         LRCG 50 0                                                       DO    I 15 AND 2* CSEQ + @ COLOR ! I SQUARE                     LOOP  KEY DROP 3 MODE ;                         -->                                                             ( Lo Res Color Graphics demonstration                12/07/83 )                                                                 : DEMO2         LRCG                                                            100 0 DO                                                            0 0 160 I I 2/ 16 MOD LINE                                  2 +LOOP                                                         0 160 DO                                                            0 0 I 99 I 2/ 16 MOD LINE                                   -2 +LOOP  KEY DROP 2 MODE ;                                                                                     : DEMO3         LRCG                                                            100 0 DO                                                           0 I 159 I I 2 / 16 MOD LINE                                  LOOP    KEY DROP 2 MODE ;                                                                                                                                                       ( demo for optical mouse                             01/29/83 )                                                                 VARIABLE LEFT                            ( button status flag )                                                                 : DEMO ( -- )                                                      INIT-MOUSE DROP             ( set comm port, ignore status )    6 MODE 320 100 2DUP 1 !dot     ( start at center of screen )    BEGIN @MOUSE ?DUP WHILE                                          4 AND 4 = LEFT !                          ( update button )     LEFT @ IF 5 PICK 5 PICK 0 !dot THEN       ( erase old x,y )     >R >R NEGATE ROT + >R + R>                      ( 1st x,y )     LEFT @ 0= IF 2DUP 1 !dot  THEN             ( mark 1st x,y )     R> R> NEGATE ROT + >R + R> 2DUP 1 !dot          ( 2nd x,y )                      REPEAT    ( until all 3 buttons are down )    2 MODE 2DROP 2DROP 2DROP  ;                                                                                                  ( Demo for fast FLOOD routine                        05/28/83 ) FORTH DEFINITIONS DECIMAL                                                                                                       : (DEMO)        TURTLE DUP 5 <                                                  IF    150 100 1 2 FLOOD                                               0 0 1 3 FLOOD                                                   0 PALETTE 0 199 1 2 FLOOD QUIT                            THEN DUP FORWARD                                                45 RIGHT                                                        1 - MYSELF                                                      MYSELF FORTH ;                                                                                                  : DEMO          TURTLE 4 MODE   120 15 SETXY                                    0 DIRECTION  80 (DEMO)  FORTH ;                                                                                                                                                 ( joystick test routine                              05/28/83 )                                                                 : TEST  CLEARSCREEN ." push any key to terminate test"                  0 12 GOTOXY ." Game adapter port bit 0 --"                      0 14 GOTOXY ."                   bit 1 --"                      0 16 GOTOXY ."                   bit 2 --"                      0 18 GOTOXY ."                   bit 3 --"                      BEGIN                                                                   0 STICK 27 12 GOTOXY .                                          1 STICK 27 14 GOTOXY .                                          2 STICK 27 16 GOTOXY .                                          3 STICK 27 18 GOTOXY .                                  ?TERMINAL IF KEY DROP CLEARSCREEN QUIT THEN                     AGAIN ;                                                 ;S                                                                                                                              ( COLORS for mode 4 FLOOD                            05/28/83 )                                                                 : COLORS                                                        (  [ HEX ] B800 GBUFSEG !  ( used if ghost buffer available)       [ DECIMAL ] 4 MODE 0 BACKGROUND                                 6 1 DO  200 I 6 */  >R    0 R@ 319 R> 3 LINE   LOOP             100  20  3   1  FLOOD  14  2 GOTOXY ."  color = 1 "             100  50  3   2  FLOOD  14  6 GOTOXY ."  color = 2 "             100  80  3   3  FLOOD  14 10 GOTOXY ."  color = 3 "             100 110  3 102  FLOOD  14 14 GOTOXY ."  color = 66h "           100 140  3 119  FLOOD  14 18 GOTOXY ."  color = 77h "           100 170  3 187  FLOOD  14 22 GOTOXY ."  color = BBh "           5 1 DO I 1 AND PALETTE  32000 0 DO LOOP  LOOP ;                                                                                                                                                                                                              ( Demo for FLOOD routine                             05/28/83 ) VARIABLE SEED         1 SEED !                                  : (RAND) SEED @ 259 * 3 + 32767 AND DUP SEED ! ;                : RANDOM        ( n1 -- n2 )  (RAND) 32767 */ ;                 : XMAX          ?MODE 4 = IF 320 ELSE 640 THEN  ;               : RX            XMAX RANDOM ;                                   : RY            200 RANDOM ;                                    : DEMO  4 MODE  BEGIN   CLEARSCREEN                                 XMAX 2/ 20 -    80 ( 100) 70 RANDOM 20 + 3 CIRCLE               RX RY RX RY RX RY 3 TRIANGLE                                    XMAX 2/ 20 +   120 100 RANDOM 30 + 50 RANDOM 50 + 3 ELLIPSE     RX RY RX RY RX RY 3 TRIANGLE                                    RX RY 3 2 FLOOD RX RY 3 1 FLOOD RX RY 3 3 FLOOD                 32000 0 DO LOOP                                                 ?TERMINAL IF KEY DROP QUIT THEN AGAIN ;                                                                                     ( Animation demo           RJW                       06/13/83 ) FORTH DEFINITIONS DECIMAL                                       VARIABLE AX    VARIABLE BX                                      VARIABLE TILE  32 ALLOT       VARIABLE GHOST  1000 ALLOT        : BULLET ( -- )                                                    102 100 100 102 2 LINE  103 100 102 102 2 LINE                  103 101 101 103 2 LINE   94 100 103 108 TILE @block             TILE 94 100 Xblock ;                                                                                                         : AIRPLANE ( -- )                                                  100 103 2 !dot  101 102 101 104 2 LINE                          102 102 120 102 1 LINE    102 104 130 104 1 LINE                102 103 120 103 1 LINE    121 103 125 103 2 LINE                102 101 102 98  1 LINE    103 98 106 101 1 LINE                 97 98 130 104 GHOST @block  GHOST 97 98 Xblock ;              -->                                                            ( Animation demo, cont.                              06/13/83 )                                                                 : MOVE-BULLET ( -- )                                               TILE BX @ 6 + DUP BX !  192 OVER 2* 3 / - !block ;                                                                           : MOVE-AIRPLANE ( -- )                                             GHOST AX @ 2 + DUP AX !  11 !block ;                                                                                         : GUN ( -- )                                                       10 189 0 195 3 LINE  0 195 0 199 3 LINE                         0 199 5 199 3 LINE  5 199 13 192 3 LINE                         13 192 10 189 3 LINE   0 199 2 !dot 1 198 3 3 FLOOD ;                                                                         -->                                                                                                                                                                                            ( Animation demo, cont.                              06/13/83 )                                                                 : SPRITE-BANNER ( -- )                                             2 FOREGROUND 21 22 GOTOXY ." ANIMATION using"                   1 FOREGROUND 17 23 GOTOXY ." Laboratory Microsystems"           3 FOREGROUND 24 24 GOTOXY ." PC/FORTH" ;                                                                                     : RESET-BULLET ( -- )                                                TILE BX @ 192 OVER 2* 3 / - Xblock 13 BX ! ;                                                                               : RESET-AIRPLANE ( -- ) GHOST AX @ 11 Xblock 0 AX ! ;                                                                            -->                                                                                                                                                                                                                                                            ( Animation demo, cont.                              06/13/83 )                                                                 : OUTLINE-BOX ( x y x y -- )                                       600 0 DO   3 PICK 3 PICK OVER 3 PICK 1 Xline                               3 PICK OVER 3 PICK 3 PICK 1 Xline                               2DUP 3 PICK 5 PICK        1 Xline                               OVER 3 PICK 5 PICK 5 PICK 1 Xline                          LOOP                                                       2DROP 2DROP ;                                                                                                               -->                                                                                                                                                                                                                                                                                                                                                                                             ( Animation demo, cont.                              06/13/83 )                                                                 : BANG ( -- )                                                      RESET-BULLET RESET-AIRPLANE  2 FOREGROUND                       35 1 GOTOXY ." bang!"  275 5  319 18 OUTLINE-BOX ;                                                                           : DEMO ( -- )                                                      4 MODE 0 PALETTE    BULLET AIRPLANE GUN  SPRITE-BANNER          0 AX !  13 BX !                                                 BEGIN                                                            BX @ 280 < IF MOVE-BULLET    ELSE RESET-BULLET   THEN           AX @ 280 < IF MOVE-AIRPLANE  ELSE RESET-AIRPLANE THEN           AX @ BX @ > AX @ BX @ 30 + < AND                                BX @ 275 >                       AND                           UNTIL BANG ;                                                                                                                 ( PAC-MAN demo          RGD                          12/07/83 ) FORTH DEFINITIONS DECIMAL                                                                                                       : MAKE-PAC1     4 MODE  150 100 25 3 CIRCLE                             160 92 5 3 CIRCLE   150 100 3 1 FLOOD   ;                                                                               : MAKE-PAC2     4 MODE   -20 325 150 100 25 3 ARC                       150 100 173 106 3 LINE 150 100 171 113 3 LINE                   160 92   5 3 CIRCLE 140 100 3 1 FLOOD ;                                                                                 : MAKE-PAC3    4 MODE -18 310 150 100 25 3 ARC                          150 100 173 106 3 LINE 150 100 166 117 3 LINE                   160 92   5 3 CIRCLE 140 100 3 1 FLOOD ;                 -->                                                                                                                                                                                             ( PAC-MAN demo                                       07/06/83 )                                                                 VARIABLE PAC1 750 ALLOT                                         VARIABLE PAC2 750 ALLOT                                         VARIABLE PAC3 750 ALLOT                                                                                                         : STORE-PAC1    MAKE-PAC1                                                       122 75 175 125 PAC1 @block ;                                                                                    : STORE-PAC2    MAKE-PAC2                                                       122 75 175 125 PAC2 @block ;                                                                                    : STORE-PAC3    MAKE-PAC3                                                       122 75 175 125 PAC3 @block ;                    -->                                                                                                                             ( PAC-MAN demo                                       07/06/83 )                                                                 : INIT-PACMAN   STORE-PAC1 STORE-PAC2 STORE-PAC3 ;                                                                              : SHOW-PACMAN   ( x y  --- )                                                    PAC1 2 PICK    2 PICK !block                                    PAC2 2 PICK 1+ 2 PICK !block                                    PAC3 2 PICK 2+ 2 PICK !block 2DROP ;                                                                            : DEMO          INIT-PACMAN 4 MODE                                              265 0 DO I 75 SHOW-PACMAN 3 +LOOP 4 MODE                        265 0 DO I 75 SHOW-PACMAN 5 +LOOP 4 MODE                        160 0 DO 265 0 DO                                                  PAC3 I J !block 55 +LOOP 50 +LOOP                            160 0 DO 265 0 DO                                                  PAC3 I J Xblock 55 +LOOP 50 +LOOP ;          ( Binary tree #2                                     01/17/84 ) TURTLE DEFINITIONS DECIMAL                                      VARIABLE 'LBR                                                   VARIABLE 'RBR                                                   VARIABLE LEVEL  8 LEVEL !                                       VARIABLE ANGLE  20 ANGLE !                                                                                                      : LBR   'LBR @ EXECUTE ;                                        : RBR   'RBR @ EXECUTE ;                                                                                                        : NODE  LEVEL @ 1 < IF EXIT THEN                                        -1 LEVEL +!  ANGLE @ LEFT LBR                                   ANGLE @ 2* RIGHT RBR                                            ANGLE @ LEFT 1 LEVEL +! ;                               -->                                                                                                                             ( Binary tree #2                                     01/17/84 ) : (LBR) DUP 2* PENDOWN FORWARD NODE                                     DUP 2* PENUP BACKWARD ;                                                                                                 : (RBR) DUP PENDOWN FORWARD NODE                                        DUP PENUP BACKWARD ;                                                                                                    ' (LBR) 'LBR !                                                  ' (RBR) 'RBR !                                                                                                                  FORTH DEFINITIONS                                               : DEMO          TURTLE  4 MODE  1 FOREGROUND                                    160 199 SETXY -90 DIRECTION                                     8 LEVEL ! 12 LBR DROP ;