QS-Forth Screens#


SCR # 1 
  0    FORTH DEFINITIONS HEX
  1 
  2  : L-ON  0780 ' CREATE ! ;
  3  : L-OFF ' FIRST CFA
  4          ' CREATE ! ; DECIMAL
  5  : LOCATE ~[COMPILE] ' DUP
  6         ~[ FENCE @ ] LITERAL >
  7    IF NFA 2 - @ DUP 0=
  8    IF    25 MESSAGE
  9    ELSE   DUP 0 <
 10    IF 5 MESSAGE QUIT ELSE LIST
 11    ENDIF ENDIF
 12    ELSE  9 MESSAGE ENDIF ;
 13 
 14  DECIMAL -->
 15 

SCR # 2 
  0  HEX
  1 
  2  : CASE: <BUILDS ] SMUDGE
  3          DOES> SWAP 2 * +
  4          @ EXECUTE ;
  5 
  6  6 USER S0  ( COMP STK ORG )
  7  8 USER R0  ( RET STK ORG )
  8 
  9 : UPDATE PREV @ @ 8000 OR PREV
 10     @ ! ;
 11 
 12 : DCX DECIMAL ;
 13 
 14   DECIMAL -->
 15 

SCR # 3 
  0  ( STACK WORDS )
  1 
  2  : .S ( PEEK AT STACK )
  3        S0 @  SP@ -  2 / 1 -
  4        IF SP@ 2 - S0 @  2 -
  5           DO I @ . -2 +LOOP
  6        ELSE ." STACK EMPTY "
  7        CR ENDIF ;
  8 
  9  : 2DUP OVER OVER ;
 10 
 11  : LOAD-ED     30 LOAD ;
 12  : LOAD-ASM    58 LOAD ;
 13  : LOAD-IO     6 LOAD ;
 14          DECIMAL -->
 15 

SCR # 4 
  0  ( TEXT LINE  )        HEX
  1 
  2 : TEXT ( TEXT --> PAD )
  3     HERE C/L 1+ BLANKS WORD HERE
  4     PAD C/L 1+ CMOVE ;
  5 
  6 : LINE  ( ADR OF LINE-->STK )
  7     DUP FFF0 AND 17 ?ERROR
  8     SCR @ (LINE) DROP ;
  9   : INVON FF 0668 C!
 10           FF 06BE C! ;
 11   : INVOF 7F 0668 C!
 12           7F 06BE C! ;
 13   : BELL  06BE C@ FF 06BE C!
 14       FD EMIT 06BE C!  ;
 15   INVOF   DECIMAL -->

SCR # 5 
  0  ( HDUMPER )   HEX
  1   : HXOT <# # # #> TYPE  ;
  2   : HPRT     C@ 7F AND DUP
  3        20 < IF DROP 2E THEN
  4  SPACE 1B EMIT EMIT SPACE ;
  5   : ADDR <# # # # # #> TYPE ;
  6   : DUMP ( ADDR CNT ) CR
  7       HEX 1 - 08 / 1+
  8        0 DO DUP 0 ADDR SPACE
  9      8 0 DO DUP I + C@ 0
 10        HXOT  SPACE  LOOP CR
 11           4 SPACES
 12    8 0 DO DUP I + HPRT LOOP
 13      08 + CR    LOOP DROP ;
 14   : U. 0 <# #S #> TYPE SPACE  ;
 15    DECIMAL    ;S

SCR # 6 
  0   FORTH DEFINITIONS
  1  ( CIO CALL CHEATER )  HEX
  2   ." I/O MODULE LOADING..." CR
  3   CREATE JSRCIO ( CALL TO )
  4                 ( CH #6   )
  5     B5 C, 00 C, ( LDA TOS )
  6     86 C, B5 C, ( STX XSAVE )
  7     A2 C, 60 C, ( LDX #$60  )
  8     20 C, C4 C, E4 C, ( JSR )
  9     A6 C, B5 C, ( LDX XSAVE )
 10     E8 C, E8 C, ( CLR STK  )
 11     4C C, DF C, 0A C, ( 0A  )
 12 
 13     SMUDGE
 14 
 15           DECIMAL -->

SCR # 7 
  0  ( IOCB CONTSTANTS  )    HEX
  1 
  2  60 VARIABLE IO#
  3 
  4  : IO#@ IO# @ + ;
  5 
  6  : CHANID 340 IO#@   ;
  7  : CDEV#  341 IO#@   ;
  8  : CCMD   342 IO#@   ;
  9  : CSTAT  343 IO#@   ;
 10  : BUFADR 344 IO#@   ;
 11  : BUFLEN 348 IO#@   ;
 12  : CAUX1  34A IO#@   ;
 13  : CAUX2  34B IO#@   ;
 14 
 15  DECIMAL -->

SCR # 8 
  0  ( IOCB COMMANDS )       HEX
  1 
  2  04 CONSTANT INOP
  3  08 CONSTANT OUTOP
  4 
  5  : #-> ( ASSIGNS I0CB # )
  6     10 *  DUP IO# !
  7           ' JSRCIO 5 +  C! ;
  8 
  9  0 VARIABLE "K" -2 ALLOT
 10     4B C, 3A C, 9B C,
 11 
 12  0 VARIABLE "S" -2 ALLOT
 13     53 C, 3A C, 9B C,
 14 
 15  DECIMAL -->

SCR # 9 
  0  ( IOCB CONT )
  1  HEX
  2  0 VARIABLE "P" -2 ALLOT
  3     50 C, 3A C, 9B C,
  4 
  5  0 VARIABLE "C" -2 ALLOT
  6     43 C, 3A C, 9B C,
  7 
  8  0 VARIABLE "E" -2 ALLOT
  9     45 C, 3A C, 9B C,
 10 
 11  : CKSTAT CSTAT C@ DUP 80 AND
 12      IF 7F AND 21 + DUP ?ERROR
 13         ELSE DROP ENDIF ;
 14                DECIMAL -->
 15 

SCR # 10 
  0  ( OPEN IOCB )
  1   HEX
  2  ( "K" INOP 0 I0CB# OPEN )
  3 
  4  : OPEN #->        ( IOCB# )
  5         03 CCMD C! ( OPEN CMD)
  6         CAUX2 C!   ( 0 USUAL )
  7         CAUX1 C!   ( IN/OUT  )
  8         BUFADR !   ( -> K:   )
  9         JSRCIO     ( SET TO 6)
 10         CKSTAT ;   ( ERROR?  )
 11 
 12 
 13           DECIMAL -->
 14 
 15 

SCR # 11 
  0  ( GET A CHAR TO STACK ) HEX
  1  ( GET ... ASCII TO STACK )
  2 
  3  : GET #->     0 ( DUMMY )
  4        07 CCMD C! ( GET CHAR )
  5        0  BUFADR ! ( 0 -> A  )
  6        JSRCIO  CKSTAT ;
  7 
  8  : PUT #->
  9        0B CCMD C! ( PUT CHAR )
 10        0 BUFADR ! ( 0-> A   )
 11        JSRCIO  CKSTAT DROP  ;
 12   HEX
 13  : CLOSE #->
 14          0C CCMD C! JSRCIO
 15          CKSTAT ; DECIMAL -->

SCR # 12 
  0  ( PRINTER WORDS )
  1 
  2  : PRON  4 CLOSE
  3      "P" OUTOP 0 4 OPEN ;
  4 
  5  : PROF 4 CLOSE
  6      "E" OUTOP 0 4 OPEN ;
  7 
  8          -->
  9 
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 13 
  0  ( VOL,DIST,FREQ,VOICE, SND )
  1  HEX
  2   : SOUND 0232 C@ 07 AND
  3      D20F C!  0 D208 C!
  4      DUP 3 > IF
  5  ." ILLEGAL CHAN" ABORT ENDIF
  6     2 * D200 + >R >R 10 * OR
  7     EF AND
  8     100 * R>  OR R> ! ;
  9 
 10 
 11   : XSND D208 D200 DO
 12           0 I C! LOOP ;
 13   DECIMAL
 14   -->
 15 

SCR # 14 
  0  ." GRAPHICS LOADING..." CR
  1  ( ALL USE CH # 6 )
  2  : GRN 6 OPEN ;
  3  : GR.  ( MODE 7 SPLIT )
  4      6 CLOSE >R
  5      "S" OUTOP 16 OR R> GRN ;
  6 
  7  : GR.16 6 CLOSE >R "S"
  8      OUTOP R> GRN  ;  HEX
  9 
 10  : SETCOLOR  DUP 4 > IF
 11     ." ILLEGAL COLOR"
 12      . . .           ELSE
 13     02C4 + >R 10 * OR
 14       R>  C!         ENDIF ;
 15     DECIMAL -->

SCR # 15 
  0  ( PLOT DRAWTO ) HEX
  1  : CKER CSTAT C@ 8D = IF
  2            ." RANGE ERROR "
  3    QUIT ELSE CKSTAT ENDIF ;
  4 
  5  : DRAWTO ( Y,X,C ) 02FB C!
  6      54 C! 55 ! 6 #->
  7          11 CCMD C!  ( DRAW)
  8    0 BUFADR ! JSRCIO CKER ;
  9 
 10  : PLOT >R OVER OVER OVER
 11    OVER DUP 0= IF 2+ ENDIF 1 -
 12    5A C! 5B ! I DRAWTO R>
 13    DRAWTO ;
 14   DECIMAL -->
 15 

SCR # 16 
  0  ( POS.     GR."  ) HEX
  1  : POS. 54 C! 55 ! ;
  2 
  3  : GRTYPE -DUP IF OVER +
  4    SWAP DO I C@ 6 #-> 0B
  5    CCMD C! 0 BUFADR ! JSRCIO
  6    CKER DROP LOOP ELSE
  7     DROP ENDIF ;
  8  : GR(.") R COUNT DUP 1+ R>
  9    + >R GRTYPE ;
 10 
 11  : GR." 22 STATE @ IF COMPILE
 12    GR(.") WORD HERE C@ 1+
 13    ALLOT ELSE WORD HERE COUNT
 14    GRTYPE ENDIF ; IMMEDIATE
 15        DECIMAL ;S

SCR # 19 
  0 (ERROR MESSAGES )
  1 EMPTY STACK
  2 DICTIONARY FULL
  3 INCORRECT ADDRESS MODE
  4 NAME NOT UNIQUE
  5 LOCATE OUT OF RANGE
  6 DISK OUT OF RANGE
  7 FULL STACK
  8 DISK ERROR !!
  9 IN BOOT
 10 
 11 
 12 
 13 
 14 
 15  QS FORTH VER 1.0 3/27/81

SCR # 20 
  0 ( ERROR MESSAGES )
  1 COMPILATION ONLY, USE IN DEF
  2 EXECUTION ONLY
  3 CONDITIONALS NOT PAIRED
  4 INCOMPLETE DEFINITION
  5 IN PROTECTED DICTIONARY
  6 USE ONLY WHEN LOADING
  7 OFF CURRENT EDIT SCREEN
  8 
  9 NOT COMPILED FROM DISK
 10 # OPERAND > $FF
 11 ILLEGAL USE OF Z-PAGE
 12 ILLEGAL ADDR MODE
 13 
 14 
 15 

SCR # 21 
  0  ( IOCB ERRORS )
  1  BREAK ABORT
  2  IOCB OPEN
  3  NONEXISTENT DEVICE
  4  IOCB WRITE ONLY
  5  INVALID COMMAND
  6  DEVICE NOT OPEN
  7  BAD IOCB #
  8  IOCB READ ONLY ERROR
  9  EOF
 10  TRUNCATED RECORD
 11  DEVICE TIMEOUT
 12  DEVICE NOT ACKNOWLEDGE CMD
 13  SERIAL BUS FRAMING ERROR
 14  CURSOR OUT OF RANGE
 15  SERIAL BUS FRAME OVERRUN

SCR # 22 
  0  SERIAL CHECKSUM ERROR
  1  DEVICE ERROR
  2  BAD SCREEN MODE #
  3  FUNCTION NOT SUPPORTED
  4  SCREEN MODE EXCEEDED MEMORY
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 23 
  0 
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 24 
  0  ( SET COLD START )
  1 
  2  FORTH DEFINITIONS
  3 
  4 
  5  HEX
  6  ' FORTH 4 + @ C +ORIGIN !
  7  HERE  1E +ORIGIN !
  8  VOC-LINK @ 20 +ORIGIN !
  9  HERE     1C +ORIGIN ! ( FENCE)
 10  HERE 600 - 80 / 2+
 11  601 C!    ( BOOT CNT )
 12  DECIMAL ;S
 13 
 14 
 15 

SCR # 25 
  0 ( BOOTMAKER )
  1 HEX
  2     0 VARIABLE BOOTSTART
  3 
  4 : MAKEBOOT
  5                 600 BOOTSTART !
  6    HERE BOOTSTART @ - 80 / 2+
  7           1 DO
  8    BOOTSTART @ I 0 R/W
  9         80 BOOTSTART +! LOOP ;
 10 
 11 
 12 
 13   DECIMAL ;S
 14 
 15 

SCR # 26 
  0  ( MEMORY REF POINTER SET )
  1  HEX
  2 
  3  : MEMSET
  4    02E5 @ ( FETCH HI LIMIT )
  5    DUP
  6    ' LIMIT !
  7    420 -
  8    DUP ' FIRST !
  9    DUP   USE  ! PREV  !
 10    COLD ;   ;S
 11 
 12 
 13 
 14 
 15 

SCR # 30 
  0  FORTH DEFINITIONS
  1  VOCABULARY EDITOR IMMEDIATE
  2  ( EDITOR CONT )    HEX
  3 : WHERE  ( PRINT ERROR )
  4     DUP B/SCR / DUP SCR !
  5     ." SCR # " DECIMAL . SWAP
  6     C/L /MOD C/L * ROT BLOCK +
  7     CR C/L TYPE CR HERE C@ -
  8     SPACES 5E EMIT ~[COMPILE]
  9     EDITOR QUIT ;
 10 
 11 EDITOR DEFINITIONS
 12  CR ." EDITOR LOADING..."
 13 
 14                     -->
 15 

SCR # 31 
  0  ( EDITOR CONT ) HEX
  1  : -MOVE ( BLOCK ADR->LINE )
  2      LINE C/L CMOVE UPDATE ;
  3 
  4 
  5  : E ( ERASE LINE )
  6    LINE C/L BLANKS UPDATE ;
  7 
  8  : S DUP 1 - 0E DO I LINE I
  9     1+ -MOVE -1 +LOOP E ;
 10  : /R PAD 1+ SWAP -MOVE ;
 11                   -->
 12 
 13 
 14 
 15 

SCR # 32 
  0  ( EDITOR CONT )
  1  : CLEAR SCR ! 10 0 DO FORTH
  2        I EDITOR E LOOP ;
  3 
  4  : COPY B/SCR * OFFSET @ +
  5       SWAP B/SCR * B/SCR OVER
  6       + SWAP DO DUP FORTH
  7       I BLOCK 2 - ! 1+ UPDATE
  8       LOOP DROP FLUSH ;
  9 
 10  : D 0F DUP ROT DO I 1+ LINE
 11      I -MOVE LOOP E ;
 12 
 13 
 14  : P 1 TEXT /R ;
 15            -->

SCR # 33 
  0 ( DUPLICATE )
  1 0 VARIABLE EBLK  ( ENDING BLK )
  2 0 VARIABLE SBLK  ( STARTIN BLK )
  3 0 VARIABLE PSBLK
  4 : DISP ( ->DEST ADR IN FRE RAM )
  5    PSBLK @ B/BUF * HERE + ;
  6 
  7 : GTPAR ( SET UP DO AND PSBLK )
  8    EBLK @ SBLK @ 0 PSBLK ! ;
  9 
 10 : MVIN ( MOVE BLKS INTO RAM )
 11     GTPAR DO I BLOCK DISP
 12     B/BUF CMOVE 1 PSBLK +!
 13     LOOP ;
 14          DECIMAL -->
 15 

SCR # 34 
  0 : MOVOT ( WRITE RAM TO DISC )
  1     GTPAR OFFSET @ + SWAP OFFSET
  2     @ + SWAP  DO I BUFFER DISP
  3     SWAP B/BUF CMOVE 1 PSBLK +!
  4     UPDATE FLUSH LOOP ;
  5 
  6  : DUPLICATE ( STARTSCR ENDSCR )
  7    1+ B/SCR * EBLK ! B/SCR *
  8     SBLK ! EBLK @ SBLK @ -
  9   ' FIRST 1+ C@ DP 1+ C@ -
 10   2 * 2 -   > IF ." TOO MANY "
 11    QUIT ENDIF CR    MVIN
 12   ." INSERT DESTINATION DISK
 13   " CR ." RETURN TO CONTINUE "
 14   KEY DROP CR    MOVOT  ;
 15        DECIMAL -->

SCR # 35 
  0  ( ATARI FORTH EDITOR ) HEX
  1 
  2  0 VARIABLE COL ( USR COL PTR )
  3  0 VARIABLE LIN ( USR LIN PTR )
  4 
  5 
  6  : EDLIST ( SPEC LIST FOR ED  )
  7    7D EMIT
  8    DECIMAL CR DUP SCR !
  9    ." SCR # " . 10 0 DO
 10    CR I 3 .R I SCR @ .LINE
 11    LOOP CR ;
 12 
 13 
 14                        -->
 15 

SCR # 36 
  0 ( ATARI ED OS ACCESS WORDS ) HEX
  1 
  2  : ONCUR 0 02F0 C! ;
  3 
  4  : OFCUR 1 02F0 C! ;
  5 
  6   DECIMAL -->
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 37 
  0  ( SMOVE )     DECIMAL
  1 
  2  : SMOVE ( SOURCE DEST # TOMV )
  3     CR   FLUSH EMPTY-BUFFERS
  4    ." CAUTION !!! " CR
  5      >R 2DUP SWAP
  6   ." MOVE " DUP . ." THRU " R +
  7   1 - . ." -->" DUP . ." THRU "
  8   R + 1 - . SPACE ." Y OR N" CR
  9   R>   KEY 89 = IF
 10   0 DO OVER I + OVER I +
 11   COPY    LOOP DROP DROP
 12   ELSE QUIT ENDIF ;
 13  DECIMAL  -->
 14 
 15 

SCR # 38 
  0  ( LFCUR RTCUR ) HEX
  1  : (LFCUR) 1E EMIT ;
  2  : (RTCUR) 1F EMIT ;
  3  DECIMAL
  4  : RTCUR OFCUR COL @ 31 =
  5        IF 31 0 DO (LFCUR) LOOP
  6        0 COL ! ELSE (RTCUR)
  7      1 COL +! ENDIF ONCUR ;
  8 
  9 
 10   : LFCUR OFCUR COL @
 11      IF (LFCUR) -1 COL +!
 12      ELSE 31 0 DO (RTCUR) LOOP
 13      31 COL ! ENDIF ONCUR ;
 14 
 15  DECIMAL           -->

SCR # 39 
  0 ( UPCUR DNCUR )  HEX
  1 : (DNCUR) 1D EMIT ;
  2 : (UPCUR) 1C EMIT ;
  3 
  4 : DNCUR OFCUR LIN @
  5       F = IF F 0 DO (UPCUR)
  6              LOOP 0 LIN !
  7       ELSE (DNCUR) 1 LIN +!
  8       ENDIF ONCUR ;
  9 
 10 : UPCUR OFCUR LIN @
 11    IF (UPCUR) -1 LIN +!
 12     ELSE F 0 DO (DNCUR)
 13     LOOP F LIN ! ENDIF
 14     ONCUR ;
 15  DECIMAL -->

SCR # 40 
  0   ( HOME CURSOR ) HEX
  1 
  2  : LINCLEAR ( CURSOR->LIN 0 )
  3     LIN @ DUP IF 0 DO UPCUR
  4     LOOP ELSE DROP ENDIF ;
  5  : COLCLEAR ( CURSOR->COL 0 )
  6     COL @ DUP IF 0 DO LFCUR
  7     LOOP ELSE DROP ENDIF ;
  8 
  9  : HOMECUR ( CURSOR->HOME )
 10   LINCLEAR COLCLEAR ;
 11 
 12 
 13  : CURSHOW (RTCUR) (LFCUR) ;
 14 
 15    -->

SCR # 41 
  0 ( ED CONT EDCR...TAB ) DECIMAL
  1 
  2  : BUFF-> ( BUFFER CHAR ADR )
  3           LIN @ SCR @ (LINE)
  4           DROP COL @ + ;
  5 
  6  : EDCR ( SPECIAL CR FOR ED )
  7       COL @ IF COLCLEAR ENDIF
  8                 DNCUR ;
  9 
 10  5 VARIABLE (TAB)
 11  : TAB 31  COL @ - (TAB) @ <
 12       IF COLCLEAR ELSE
 13    (TAB) @ COL @ OVER MOD -
 14       0 DO RTCUR LOOP ENDIF ;
 15     DECIMAL -->

SCR # 42 
  0  ( ED CONT EDMIT )   HEX
  1 
  2  : ((EDEMIT))
  3      EMIT (LFCUR) RTCUR
  4      COL @ 0= IF DNCUR ENDIF ;
  5 
  6  : TOBUFF ( SENDS CHAR TO LINE )
  7      DUP ( CHAR )
  8       BUFF-> C! ;
  9 
 10  : EDMIT DUP 20 < IF BELL DROP
 11    ELSE TOBUFF ((EDEMIT))
 12    ENDIF  UPDATE 0 ;
 13       DECIMAL -->
 14 
 15 

SCR # 43 
  0  ( LIN PRINT WORDS )  DECIMAL
  1  0 VARIABLE TEMP1
  2  0 VARIABLE TEMP2
  3 
  4  : PTRSAV COL @ TEMP1 !
  5           LIN @ TEMP2 ! ;
  6 
  7 
  8  : LINOUT
  9        COLCLEAR BUFF-> 32
 10    TYPE  32 COL ! COLCLEAR ;
 11 
 12   : CURREST  COLCLEAR TEMP1 @
 13     -DUP IF 0 DO RTCUR LOOP
 14          ENDIF ;
 15                        -->

SCR # 44 
  0   HEX
  1 
  2 : REFRESH ( OUTPUT ALL LINS)
  3                     PTRSAV
  4        10 LIN @ DO  LINOUT
  5           DNCUR LOOP TEMP2 @
  6       -DUP IF 0 DO DNCUR LOOP
  7            ENDIF  ;
  8 
  9  DECIMAL -->
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 45 
  0  ( CHAR INSERT WORDS )
  1 
  2  : MOVRT DUP OVER 1 - C@
  3         SWAP C! 1 - ;
  4 
  5  : XPAND ( SPREAD LIN AT CUR )
  6      PTRSAV ( SAVE POINTERS )
  7             31  COL @ -
  8      DUP BUFF-> + SWAP 0
  9      DO MOVRT LOOP
 10      BL SWAP C!
 11      LINOUT CURREST UPDATE ;
 12 
 13      DECIMAL -->
 14 
 15 

SCR # 46 
  0  ( CHAR INSERT WORDS )
  1 
  2  : MOVLF DUP OVER 1+  C@
  3         SWAP C! 1+  ;
  4 
  5  : CPAND ( SHRINK LIN AT CUR )
  6      PTRSAV ( SAVE POINTERS )
  7      BUFF-> 31  COL @ -  0
  8      DO MOVLF LOOP
  9      BL SWAP C! ONCUR
 10      LINOUT CURREST UPDATE ;
 11 
 12      DECIMAL -->
 13 
 14 
 15 

SCR # 47 
  0  HEX
  1 
  2  : BKSP COL @ IF LFCUR ENDIF 20
  3      EDMIT LFCUR DROP ;
  4  : FINI ( WRAP-UP ON ESC )
  5      HOMECUR UPCUR (DNCUR)
  6      CR (UPCUR) ;
  7 
  8  :  INSL ( SPREAD AT LIN # )
  9       LIN @ S REFRESH ;
 10 
 11  : DELL ( DELETE LINE )
 12       LIN @ D REFRESH ;
 13               DECIMAL   -->
 14 
 15 

SCR # 48 
  0  ( EDITOR LOOK UP TABLE ) HEX
  1  EDITOR DEFINITIONS
  2  10 VARIABLE  XTABLE
  3  1C C, ( UP ) 1D C, ( DN )
  4  1E C, ( LF ) 1F C, ( RT )
  5  7D C, ( HM ) 7E C, ( BS )
  6  0D C, ( CR ) 9D C, ( IL )
  7  9C C, ( DL ) FF C, ( XL )
  8  FE C, ( CL ) 7F C, ( TB )
  9  9F C, ( ST ) 9E C, ( CT )
 10  FD C, ( BL )  DECIMAL
 11  : KEYLIT  0 XTABLE @ 0
 12       DO DROP DUP I XTABLE 2
 13     + +   C@ = IF LEAVE ENDIF
 14             I LOOP ;
 15  DECIMAL  -->

SCR # 49 
  0   ( CONTROL WORDS )
  1 
  2  CASE: CONTROL
  3      UPCUR DNCUR LFCUR RTCUR
  4      HOMECUR BKSP  EDCR INSL
  5      DELL XPAND CPAND TAB
  6      BELL BELL  BELL EDMIT ;
  7 
  8  : +KEY ( LIST BACK ONE )
  9      SCR @ DUP 1 >
 10      IF 1 - ENDIF EDLIST ;
 11 
 12  : *KEY SCR @ 1+ EDLIST ;
 13 
 14                     -->
 15 

SCR # 50 
  0  ( ED MODE CONTROL ) HEX
  1 
  2 : ED (UPCUR) (RTCUR) (RTCUR)
  3   (RTCUR) (RTCUR)
  4    INVON
  5    1 COL ! F LIN ! HOMECUR
  6    CURSHOW BEGIN KEY
  7    DUP 1B XOR WHILE
  8    KEYLIT CONTROL  DROP
  9    CURSHOW REPEAT FINI
 10    INVOF
 11                  DROP ;
 12       DECIMAL  -->
 13 
 14 
 15 

SCR # 51 
  0  ( ED MODE CONTROL ) DECIMAL
  1 : 0-> DROP 0 ;
  2 : L        ( LIST SCREEN,WAIT )
  3     INVON        EDLIST
  4                  BEGIN KEY
  5   DUP 27 XOR WHILE
  6   DUP 43 = IF +KEY 0-> ENDIF
  7   DUP 42 = IF *KEY 0-> ENDIF
  8   DUP 45 = IF ED 0-> ENDIF
  9   IF BELL ENDIF REPEAT
 10   DROP  INVOF ;
 11 
 12   FORTH DEFINITIONS
 13   : KL ~[COMPILE] EDITOR  EDITOR
 14     SCR @ L ; DECIMAL -->
 15 

SCR # 52 
  0  ( INVERSE ADDR, CNT ) HEX
  1   EDITOR DEFINITIONS
  2   : INTYPE INVON 0 DO I OVER +
  3       C@ 80 OR EMIT LOOP
  4        DROP INVOF ;
  5 
  6   : <L> ( T IF BETWEEN L#'S )
  7       DUP SBLK @ < 0= SWAP
  8       EBLK @ > 0= AND ;
  9 
 10   : IN.LINE  (LINE) INTYPE ;
 11 
 12          DECIMAL -->
 13 
 14 
 15 

SCR # 53 
  0  ( ATARI FORTH EDITOR ) HEX
  1 
  2  : INVLIST 7D EMIT
  3    DECIMAL CR DUP SCR !
  4    ." SCR # " . 10 0 DO
  5    CR I 3 .R I SCR @
  6    OVER <L> IF IN.LINE ELSE
  7    .LINE ENDIF  LOOP CR ;
  8 
  9  0 VARIABLE STBLK
 10  0 VARIABLE SBBLK
 11  0 VARIABLE SSCR
 12  0 VARIABLE DTBLK
 13  0 VARIABLE DBBLK
 14  0 VARIABLE DSCR
 15         DECIMAL -->

SCR # 54 
  0 
  1  : FROM ( SCR LO HI L# )
  2    15 MIN
  3    DUP STBLK ! EBLK !
  4    DUP SBBLK ! SBLK ! DUP
  5    SSCR ! INVLIST ;
  6 
  7  : /H LINE PAD 1+ C/L DUP PAD
  8        C! CMOVE ;
  9 
 10  : SS->DD
 11    STBLK @ 1+ SBBLK @ - 0
 12    DO SSCR @ SCR ! I SBBLK @ +
 13   /H  DSCR @ SCR ! I DBBLK @ +
 14   /R  LOOP ;
 15               DECIMAL -->

SCR # 55 
  0 
  1 
  2 
  3 
  4  : INTO DUP SBLK ! DBBLK !
  5    DSCR ! STBLK @ SBBLK @ -
  6    DBBLK @ + DUP EBLK ! DTBLK !
  7     SS->DD   DSCR @ INVLIST
  8     CR ." OK? Y/N " KEY
  9     89 = IF KL ELSE
 10     EMPTY-BUFFERS ENDIF ;
 11 
 12 
 13         ;S
 14 
 15 

SCR # 58 
  0  ( ATARI ASSMBLER  9/19/80 )
  1  FORTH DEFINITIONS
  2  VOCABULARY ASSEMBLER IMMEDIATE
  3  ' ASSEMBLER CFA
  4  ' ;CODE  8 + !
  5  10 VARIABLE ADRMD
  6  : CODE: ?EXEC    !CSP
  7      10 ADRMD !    CREATE
  8     ~[COMPILE] ASSEMBLER  ;
  9    IMMEDIATE
 10 
 11  : C; CURRENT @ CONTEXT !
 12       ?EXEC ?CSP SMUDGE ;
 13    IMMEDIATE
 14  CR ." ASSEMBLER LOADING..."
 15                     -->

SCR # 59 
  0  ( MSC LABELS TO FIG CODE )
  1 
  2  ASSEMBLER DEFINITIONS
  3 
  4  HEX
  5  47  +ORIGIN CONSTANT NEXT
  6  3DF +ORIGIN CONSTANT PUSH0A
  7  B5  CONSTANT XSAVE
  8 
  9  0 VARIABLE INCLS
 10  DECIMAL -->
 11 
 12 
 13 
 14 
 15 

SCR # 60 
  0  -->
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 61 
  0  ( OPCODE TABLE )   HEX
  1  0 VARIABLE OPTBL ( FF ILLEGAL )
  2 ( A:)   FF C, FF C, FF C, FF C,
  3         08 C, FF C, FF C, FF C,
  4 ( 16)   0C C, 08 C, 08 C, 08 C,
  5         0C C, 0C C, 0C C, 0C C,
  6 ( 8A)   04 C, 00 C, 00 C, 00 C,
  7         04 C, 04 C, 04 C, 04 C,
  8 ( # )   08 C, FF C, FF C, FF C,
  9         FF C, 00 C, 00 C, 00 C,
 10 ( 16,X) 1C C, 18 C, FF C, FF C,
 11         1C C, FF C, FF C, 1C C,
 12 ( 16,Y) 18 C, FF C, FF C, FF C,
 13         FF C, FF C, 1C C, FF C,
 14 
 15                DECIMAL   -->

SCR # 62 
  0 ( '8,X' )      HEX
  1      00 C, FF C, FF C, FF C,
  2      FF C, FF C, FF C, FF C,
  3 ( '8',Y)
  4      10 C, FF C, FF C, FF C,
  5      FF C, FF C, FF C, FF C,
  6 ( 8,X )
  7      14 C, 10 C, FF C, 10 C,
  8      14 C, FF C, FF C, 14 C,
  9 ( 8,Y )
 10      FF C, FF C, 10 C, FF C,
 11      FF C, FF C, 14 C, FF C,
 12 
 13 
 14 
 15           DECIMAL   -->

SCR # 63 
  0  ( TABLE FETCH WORDS )   DECIMAL
  1 
  2  : ?TABLE
  3      ADRMD @ 8 *
  4      INCLS @ +
  5      OPTBL 2 + + C@ ;
  6 
  7  HEX
  8  : AMDCK  ?TABLE
  9       DUP FF = 1C ?ERROR ;
 10  ( ADR MODE ERROR )
 11                     DECIMAL -->
 12 
 13 
 14 
 15 

SCR # 64 
  0   HEX
  1  : ?HI DUP FF00 AND ;
  2 
  3  DECIMAL
  4  : ADRMD! ADRMD ! ;
  5 
  6  : 16/8     ?HI
  7       IF   ( LONG  ADR )
  8           1
  9       ELSE ( SHORT ADR )
 10           2 ENDIF ADRMD ! ;
 11 
 12  : #: ?HI 26 ?ERROR
 13                3 ADRMD! ;
 14 
 15   : A: 0 ADRMD! ; DECIMAL   -->

SCR # 65 
  0 
  1  : ,X  ?HI ( TEST FOR 16/8 )
  2            IF  ( 16 )
  3               4
  4            ELSE  8
  5            ENDIF ADRMD! ;
  6 
  7 
  8 
  9                     -->
 10 
 11 
 12 
 13 
 14 
 15 

SCR # 66 
  0 
  1  : ,Y ?HI
  2           IF ( 16 OR 8 )
  3               5
  4                 ELSE
  5               9
  6           ENDIF ADRMD! ;
  7 
  8 
  9 
 10                     -->
 11 
 12 
 13 
 14 
 15 

SCR # 67 
  0  : ,X)
  1       ?HI  27 ?ERROR
  2              6 ADRMD! ;
  3 
  4  : ),Y ?HI 27 ?ERROR
  5              7 ADRMD! ;
  6 
  7                     -->
  8 
  9 
 10  ( 1B IS Z-PAGE ERROR MSG )
 11 
 12 
 13 
 14 
 15 

SCR # 68 
  0    ( CODE BUILDERS AAA CLASS )
  1 
  2  : BLDCD INCLS ! ( CLASS )
  3        10 ADRMD @ =
  4    IF SWAP 16/8 SWAP  ENDIF
  5       AMDCK OR C, ( TEST MODE )
  6       ADRMD @ IF  ( NOT A: )
  7       ?HI IF , ELSE C, ENDIF
  8             ENDIF 10 ADRMD ! ;
  9 
 10   : T3A <BUILDS SWAP  C, C,
 11           DOES>
 12           DUP C@ SWAP 1+ C@
 13           BLDCD ;
 14      -->
 15 

SCR # 69 
  0  ( OPCODE FOLLIES ) HEX
  1  ( AAA CLASS INCLS 0 )
  2 
  3  61 0 T3A ADC, 21 0 T3A AND,
  4  C1 0 T3A CMP, A1 0 T3A LDA,
  5  01 0 T3A ORA, E1 0 T3A SBC,
  6  81 0 T3A STA, 41 0 T3A EOR,
  7 
  8  ( BB1 CLASS INCLS 1 )
  9 
 10  C6 1 T3A DEC, E6 1 T3A INC,
 11 
 12  ( BBX CLASS INCLS 2 )
 13 
 14  86 2 T3A STX,
 15              DECIMAL -->

SCR # 70 
  0  ( BBY CLASS 3 INCLS )   HEX
  1 
  2  84 3 T3A STY,
  3 
  4  ( BBB CLASS 4 INCLS )
  5 
  6  02 4 T3A ASL,  42 4 T3A LSR,
  7  22 4 T3A ROL,  62 4 T3A ROR,
  8 
  9  ( CC CLASS 5 INCLS )
 10 
 11  E0 5 T3A CPX,  C0 5 T3A CPY,
 12 
 13 
 14 
 15                DECIMAL -->

SCR # 71 
  0  ( DDDX CLASS 6 INCLS )  HEX
  1 
  2  A2 6 T3A LDX,
  3 
  4  ( DDDY CLASS 7 INCLS )
  5 
  6  A0 7 T3A LDY,
  7 
  8 
  9 
 10 
 11 
 12 
 13                DECIMAL -->
 14 
 15 

SCR # 72 
  0  : IMPL <BUILDS C, ( IMPLIED )
  1      DOES> C@ C,      ; HEX
  2 
  3   00 IMPL BRK, 18 IMPL CLC,
  4   D8 IMPL CLD, 58 IMPL CLI,
  5   B8 IMPL CLV, CA IMPL DEX,
  6   88 IMPL DEY, E8 IMPL INX,
  7   C8 IMPL INY, EA IMPL NOP,
  8   48 IMPL PHA, 8A IMPL TXA,
  9   98 IMPL TYA, 08 IMPL PHP,
 10   68 IMPL PLA, 28 IMPL PLP,
 11   40 IMPL RTI, 60 IMPL RTS,
 12   38 IMPL SEC, F8 IMPL SED,
 13   78 IMPL SEI, AA IMPL TAX,
 14   A8 IMPL TAY, BA IMPL TSX,
 15   9A IMPL TXS,  DECIMAL -->

SCR # 73 
  0  ( REL BRANCH )     DECIMAL
  1 
  2  HEX
  3  : RBR <BUILDS C,
  4          DOES> C@ C, 3 C, ;
  5 
  6  ( BRANCH AROUND JMP )
  7 
  8  90 RBR BCC, B0 RBR BCS,
  9  F0 RBR BEQ, 30 RBR BMI,
 10  D0 RBR BNE, 10 RBR BPL,
 11  50 RBR BVC, 70 RBR BVS,
 12                DECIMAL -->
 13 
 14 
 15 

SCR # 74 
  0  ( JMP & BIT )      HEX
  1 
  2  : JMP, 4C C, , ;
  3 
  4  : (JMP), 6C C, , ;
  5 
  6  : JSR, 20 C, , ;
  7 
  8  : BIT, ?HI  IF 2C C, ,
  9             ELSE 24 C, C,
 10        ENDIF   ;
 11 
 12 
 13 
 14 
 15                DECIMAL   -->