ANTIC FORTH#

'Screens Disk one'

  oK

SCR # 0
  0 ( SCREEN INDEX REV H   1/1 ) ;S
  1    >> INTERNAL USE ONLY <<
  2  SCREENS 10 TO 24 CONTAIN EDITOR
  3  SCREEN 30 GIVES FULL LOAD
  4 00/00 SCREEN INDEX
  5 01/01 SOURCE CREDITS
  6 02/06 ERROR MESSAGES
  7 07/0A SYSTEM SETUP / BOOTMAKER
  8 0B/0E SUPERCLONE
  9 0F/0F DECOMP DISSEMBLER DATA
  A       THE EDITOR PACKAGE
  B 10/10 EDITOR LOADER
  C 11/14 SCREEN EDITOR
  D 15/17 LINE EDITOR
  E 18/1A EDITOR ADDITIONS
  F 1B/22 DECOMP/STACKDSP/CDMP/PATCH
 10 23/24 COPIES/DUPLICATE
 11 25/26 FIND
 12 27/27 1.4S KERNEL MODS
 13 28/2E ASSEMBLER
 14 2F/2F DECUS MODS
 15 30/30  FULL LOAD
 16 31/35 HARDWARE/GRAPHICS/SOUND
 17 36/36 PON/POFF
 18 37/38 RS232C SUPPORT
 19 39/39 DISPLAY LIST STUFF
 1A 3A/3A PLAYER/MISSILE
 1B 3B/3B LINK/SETPHYS
 1C 3D/3E LPWORDS
 1D 40/44 FORMATTED LIST PROGRAM
 1E 45/4A CHARSETS/CASE
 1F 4B/4F FORTH79/VAR/SETSYS/BDUMP
 oK

SCR # 1
  0 ******  fig-FORTH  MODEL  ******
  1
  2
  3      Through the courtesy of
  4
  5
  6       FORTH INTEREST GROUP
  7          P. O. BOX 1105
  8       SAN CARLOS, CA. 94070
  9
  A        Implemented on the
  B          ATARI  800/400
  C                by
  D           Steve Calfee
  E              1/26/81
  F              4/01/82
 10    PETER LIPSON/ROBIN ZIEGLER
 11              4/10/82
 12          HARALD  STRIEPE
 13         5/5/82 - 10/16/82
 14  XL Mods - John Stanley 18Jun85
 15      RELEASE 1.4S     REV.H
 16      WITH COMPILER SECURITY
 17      VARIABLE  LENGTH NAMES
 18  SWITCHABLE TOP OF STACK DISPLAY
 19      DECOMPILER/DISSASSEMBLER
 1A   ENHANCED SCREEN EDITOR & FAST
 1B  EDIT WORDS, BASE BORDER DISPLAY
 1C  ENHANCED SYSTEM SET UP/BOOTMKR
 1D        DRIVE 2 LINK/UNLINK
 1E      Further distribution must
 1F      include the above notice.

SCR # 2
  0 BREAK Abort.
  1
  2 IOCB already open.
  3
  4 Non-existant device.
  5
  6 IOCB is write-only.
  7
  8 Invalid command (for this device
  9 )
  A Device or file not open.
  B
  C Bad IOCB #
  D
  E IOCB is read-only
  F
 10 End Of File
 11
 12 Truncated Record
 13
 14 Device Timeout
 15
 16 Device NAK (Negative AcKnowledge
 17 )
 18 Serial Bus input framing error
 19
 1A Cursor out of range
 1B
 1C Serial Bus data-frame overrun
 1D
 1E Serial Bus data-frame checksum e
 1F rror.

SCR # 3
  0 Device-done error
  1
  2 Read-after-write compare error
  3
  4 Function not implemented in hand
  5 ler
  6 Insufficient RAM
  7
  8
  9
  A
  B
  C
  D
  E
  F
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 4
  0 (  ERROR MESSAGES  )   135  159
  1  9  8  7  10  ;S
  2 empty stack
  3
  4 dictionary full
  5
  6 has incorrect address mode
  7
  8 isn't unique
  9
  A
  B
  C disc range ??
  D
  E full stack !
  F
 10 disc error !
 11
 12
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C THIS IS IT
 1D
 1E HELP ME!
 1F

SCR # 5
  0 (  ERROR MESSAGES  )
  1
  2 compilation only, use in definit
  3 ion
  4 execution only
  5
  6 conditionals not paired
  7
  8 definition not finished
  9
  A in protected dictionary
  B
  C use only when loading
  D
  E off current editing screen
  F
 10 declare vocabulary
 11
 12 outside allocated file space
 13
 14 writing off current line
 15
 16
 17
 18
 19
 1A string stack empty !!
 1B
 1C
 1D
 1E
 1F

SCR # 6
  0 (  TARGET COMPILER ERROR MESSAGE
  1 S                 WFR-79JUN02 )
  2
  3
  4 below lower bound of virtual mem
  5 ory
  6 disc compiler assembly error in
  7 mode of
  8 can't find in TARGET
  9
  A target redef.
  B
  C T: error, is it paired with T;
  D ?
  E above virtual memory bounds
  F
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 7
  0  ( SYS/BOOTMKR 82AUG22 1/4 )
  1    FORTH DEFINITIONS   HEX
  2    SAVENFAs
  3  HERE 1C +ORIGIN !  ( FENCE )
  4
  5  HERE 1E +ORIGIN !  ( DP )
  6
  7  HERE DUP FENCE  ! 0 +ORIGIN -
  8
  9  80 / 1+  CONSTANT  #SECT
  A
  B   CODE CALLDK XSAVE STX, E453
  C    JSR, TYA, PHA, ( STATUS )
  D   XSAVE LDX, PUSH JMP, C;
  E
  F
 10 : DKIO 301 ! ( CMD, DRIVE # )
 11   30A ! ( SECT. # ) 304 !
 12   ( RAM BUFFER ) CALLDK ( DKHND)
 13   DUP 0< IF ." ERROR " 0FF AND
 14   BASE @ SWAP DECIMAL
 15   . BASE ! QUIT ENDIF DROP ;
 16 : WTSEC SWAP 304 ! 130 300 !
 17 ( verif $57->) 50 302 C! SECIO ;
 18  : RDSEC SWAP 304 ! 130 300 !
 19          52 302 C! SECIO   ;
 1A : FORMAT ." FORMAT DRIVE " DUP .
 1B   ." -ARE YOU SURE?" 0 PAD ! PAD
 1C  1      EXPECT PAD C@ 59 ( Y) =
 1D   IF 2100 OR PAD 0 ROT DKIO ELSE
 1E         DROP THEN ;
 1F  0 VARIABLE BOOT ( ->CODE ) -->

SCR # 8
  0 ( SYS SET UP/BOOTMKR   2/4 )
  1 : MAKEBOOT FLUSH  EMPTY-BUFFERS
  2  ." INSERT NEW DISK, TYPE Y" CR
  3 0 PAD ! ( DEFAULT ) PAD 3 EXPECT
  4  PAD C@ 59 = IF 1  52  C! CR
  5  ." Writing sectors:" CR CR BOOT
  6  @   1 DUP .  WTSEC #SECT 0 DO I
  7  80 * +ORIGIN I 2 + WTSEC I 2 +
  8  . LOOP 0 52 C! CR ." BOOT COMPL
  9 ETED" CR THEN ; ( BOOT CODE:)
  A  HERE BOOT ! ( PT TO US )
  B  ASSEMBLER 1FF , 480 , ' V1.4S ,
  C  #SECT # LDA, 0= IF, 0 +ORIGIN ,
  D  1 , ENDIF, N STA,    2C8 C@
  E  # LDA, 2C8 STA,  D01A STA,
  F     2C6  C@   # LDA, 2C6 STA,
 10   D018 STA,
 11  52 # LDA, 302 STA, 48C LDA, 30A
 12  STA, 48D LDA, 30B STA, ( SCT1 )
 13  1 # LDA, 301 STA, 48A LDA, 304
 14 STA, 48B LDA, 305 STA, ( ORIGIN)
 15  BEGIN, 30A INC, 0= IF, 30B INC,
 16        ENDIF, E453 JSR, 303 LDA,
 17  .A ASL, CS IF, RTS, ( FRETURN )
 18        ENDIF, 304 LDA, 80 # EOR,
 19  304 STA, 0< NOT IF, 305 INC,
 1A  ENDIF, ( BUMP PTR.) N DEC, 0=
 1B UNTIL, 48A LDA, 0A STA, 48B LDA,
 1C  0B STA,  E C@ # LDA, 2E7 STA,
 1D  F C@ # LDA, 2E8 STA, CLC, RTS,
 1E    FORTH
 1F   -->

SCR # 9
  0 ( BACKUP HES 82AUG15   3/4 ) (
  1 35F ARRAY BUCD BLK @ BLOCK A0 +
  2 BUCD 35F CMOVE CODE bg E474 JMP,
  3  C; : BACKUP  BUCD 480 35F CMOVE
  4  480 C ! STOF bg ; )       -->
 15 Fig-FORTH 1.4S FAST BACKUP
 14 Vers.1.2   BY H.E.STRIEPE 1982

 15  START   - commence I/O  SELECT
 16   - write with verify    OPTION
 17 - REBOOT               Insert source disk and
 18 press START,   or select OPTION
 19 to REBOOT              Reading SOURCE disk...
 1A Insert destination disk, press
 1B START, or SELECT Writing DESTINA
 1C TION disk...     }****** DUPLICATION
 1D  SUCCESSFUL ****** }***** DISK I
 1E /O ERROR!TRY AGAIN ***** }******
 1F   BREAK KEY INTERRUPT!  ******
 

SCR # A
  0 ( scr# A   BOOTMKR/SYS 4/4 )
  1
  2  : DoFORget ( forgets below )
  3       ' TEXT NFA      ( FENCE )
  4         FENCE ! 0 FORGET TEXT ;
  5
  6  : SETSYS   ( SETS RESET PARAM )
  7       LMARGN @ DUP ( MARGINS )
  8       LSB ' V1.4S  4 + C!
  9       MSB ' V1.4S  8 + C!
  A       COL1   @ DUP ( COLORS  )
  B       LSB ' V1.4S  C + C!
  C       MSB ' V1.4S 11 + C!
  D       COL4  C@     ( BORDER  )
  E       LSB ' V1.4S 16 + C!   ;
  F
 10
 11  : HOOK  ( hooks your assembly )
 12        ( routine into WARMSTRT )
 13        ( ->use HOOK word       )
 14     ~[COMPILE] ' ' V1.4S 1+ ! ;
 15
 16  : UNHOOK     ( restore vector )
 17        E4C0 ' V1.4S 1+ ! ;
 18
 19
 1A
 1B   CR ." system words now availab
 1C le" CR
 1D
 1E  ;S
 1F

SCR # B
  0 ( SIO DISK HNDLR 1/2 )
  1   HX   0 DMACTL C!
  2 : CLNDSP  ." }" C 4 POS.
  3       ."  SUPER  CLONE " ;
  4
  5 CODE SIO XSAVE STX, BOT LDA,
  6          E459 JSR, XSAVE LDX,
  7          BOT STY, BOT 1+ STA,
  8      NEXT JMP, C;
  9 : SERR DUP 0< IF 0 100 U/ BASE @
  A        DECIMAL ." ERROR " SWAP
  B        . BASE ! THEN DROP ;
  C  246 CONSTANT DSKTIM
  D : DSIO ( DISK HNDLR VIA SIO )
  E ( BADDR AUXS UNIT-CMD DATFLG )
  F    303 C! ( SET DATA-FLAG )
 10    301 ! ( DUNIT,CMD) 31 300 C!
 11    ( DEVICE) 30A ! ( AUXES )
 12    304 ! ( BUFER-ADDR ) 0 SIO ;
 13
 14  : DIO DSKTIM @ 306 C! 80 308 !
 15          ( BUFLEN) DSIO ;
 16  : RDSEC 5200 OR 40 DIO ;
 17  : WTSEC 5700 OR 80 DIO ;
 18  : PTSEC 5000 OR 80 DIO ;
 19  : FORMAT PAD 0 ROT 2100 OR 40
 1A    DIO       ;
 1B  : STATUS 4 308 ! 1 306 ! 2EA 0
 1C    ROT 5300 OR 40 DSIO SERR ;
 1D  : BAILOUT CONSOL C@ 2 AND 0= ;
 1E
 1F -->

SCR # C
  0 ( BADSEC WORDS )
  1 TBL GRBGSECT 38A0 , B9 C, 8C ,
  2  99 C, 180 , 88 C, F710 , 60 C,
  3  20 C, D76 , 390 , 4C C, 924 ,
  4  20 C, E85 , 20 C, F32 , 20 C,
  5  E0A , 20 C, E8A , 20 C, FCD ,
  6  20 C, CCF , 57A9 , 85 , 3FA2 ,
  7  1370 , 2C C, 380 , F910 ,
  8  DAA9 , 385 , CA C, F410 ,
  9  2FA9 , 85 , 4C C, B7D , 4C C,
  A  B87 ,
  B 40 ARRAY ZERO-SECT ZERO-SECT
  C 80 ERASE
  D  CODE SIO XSAVE STX,
  E  E459 JSR, 0< IF, 1 # LDA,
  F  ELSE, 0 # LDA, ENDIF, PHA,
 10  0 # LDA, XSAVE LDX, PUSH
 11    JMP, C;
 12 : 1ERR? IF ." CAN'T DOWNLOAD"
 13   CR ABORT THEN ;
 14 : 2ERR? IF ." CAN'T WRITE BAD"
 15   ."  SECTOR" CR ABORT THEN ;
 16 : BINIT 2001 301 ! ( DOWNLOAD TO
 17  D1: )   GRBGSECT 304 !
 18  80 DUP 303 C! 308 ! 7 306 C!
 19  31 300 C! SIO 1ERR? ;
 1A   BINIT
 1B : BADSEC 30A ! FF01 301 !
 1C   ZERO-SECT 304 ! 80 DUP 303
 1D   C! 308 ! 7 306 C! 31 300 C!
 1E   SIO 2ERR? ;
 1F  -->

SCR # D
  0 ( SUPER-CLONE WORDS )
  1  180 ARRAY BDSECTS
  2  : WSTRT ." PRESS START " CR
  3   BEGIN CONSOL C@ 1 AND END
  4   BEGIN CONSOL C@ 1 AND 0= END
  5   0 4D C! 5 A  POS. ." DOING IT.
  6 .." ; : GSRC  0 GR. 2 C 4 SE.
  7    10  8 POS. ." READING" ;
  8  : GDST  0 GR. 2 3 4 SE.
  9    10  8 POS. ." WRITING" ;
  A  : RSOME ( START SECT., CNT )
  B    0 DO     I 80 *  PAD + OVER
  C    2 RDSEC FE AND BDSECTS I +
  D    C! BAILOUT IF LEAVE ENDIF
  E    1+ LOOP DROP ;
  F : WSOME ( START SECT., CNT )
 10    0 DO DUP I BDSECTS + C@ IF
 11   BADSEC ELSE I 80 *  PAD + SWAP
 12   1 PTSEC 1 = 0= IF 8 ERROR THEN
 13   THEN 1+ LOOP DROP ;
 14  : COPY-SOME ( START, CNT ) OVER
 15    OVER GSRC RSOME GDST WSOME ;
 16    0 VARIABLE ROOM
 17  : SUPER-CLONE2  ." SOURCE DISK
 18  IN DRIVE #2" CR ." DESTINATION
 19  IN DRIVE #1" CR WSTRT
 1A    HIMEM @  PAD - 80 / ROOM ! 1
 1B    2D0 BEGIN DUP 0 > WHILE OVER
 1C    OVER ROOM @ MIN COPY-SOME
 1D    ROOM @ - SWAP ROOM @ + SWAP
 1E    REPEAT DROP DROP 0 GR. ;
 1F     -->

SCR # E
  0 ( SUPER-CLONE WORDS    3/3 )
  1
  2      180 ARRAY BDSECTS
  3  : WSTRT ." PRESS RETURN " KEY
  4   CR DROP ." Doing it " ;
  5
  6  : CLNMSG   CR
  7    ." Source disk in Dr 2," CR
  8    ." Destin disk in Dr.1," CR ;
  9
  A  : RSOME ( START SECT., CNT )
  B    0 DO     I 80 *  PAD + OVER
  C    2 RDSEC FE AND BDSECTS I +
  D    C! BAILOUT IF LEAVE ENDIF
  E    1+ LOOP DROP ;
  F : WSOME ( START SECT., CNT )
 10    0 DO DUP I BDSECTS + C@ IF
 11   BADSEC ELSE I 80 *  PAD + SWAP
 12   1 WTSEC 1 = 0= IF 8 ERROR THEN
 13   THEN 1+ LOOP DROP ;
 14  : COPY-SOME ( START, CNT ) OVER
 15    OVER SPACE RSOME SPACE WSOME
 16    ;    0 VARIABLE ROOM
 17  : CLONE        CLNMSG   WSTRT
 18    HIMEM @  PAD - 80 / ROOM ! 1
 19    2D0 BEGIN DUP 0 > WHILE OVER
 1A    OVER ROOM @ MIN COPY-SOME
 1B    ROOM @ - SWAP ROOM @ + SWAP
 1C    REPEAT DROP DROP CR BELL ;
 1D  : BADM WSTRT
 1E       2D1 1 DO I  BADSEC LOOP ;
 1F   0 GR. GS DMACTL C! BASE ! ;S

SCR # F
 10 ???ADCANDASLBCCBCSBEQBITBMIBNEBP
 11 LBRKBVCBVSCLCCLDCLICLVCMPCPXCPYD
 12 ECDEXDEYEORINCINXINYJMPJSRLDALDX
 13 LDYLSRNOPORAPHAPHPPLAPLPROLROR
 14 RTIRTSSBCSECSEDSEISTASTXSTYTAXTA
 15 YTSXTXATXSTYA
 16
 17
 18    #X))Y,X,YN).A
 19
 1A
 1B
 1C
 1D >> DECOMP DISASSEMBLER STUFF <<
 1E  DO NOT MOVE FROM THIS SCREEN !
 1F

SCR # 10
  0 ( SCREEN ED. LOAD 1.4S 1/1 )
  1 (              HES  82aug4 )
  2    HEX FORTH DEFINITIONS
  3
  4 VOCABULARY EDITOR IMMEDIATE
  5
  6   ' EDITOR 2 + DUP
  7     VOC-LINK ! 20 +ORIGIN !
  8    FORTH DEFINITIONS
  9
  A  : EDIT    SCR ! POFF
  B         ~[COMPILE] EDITOR ;
  C  HEX 15 LOAD    ( LINE EDITOR )
  D  HEX 1B LOAD    ( DECOMPILER  )
  E  HEX 20 LOAD    ( STACKDISPLAY)
  F  HEX 11 LOAD    ( SCREEN EDIT )
 10     18 LOAD ( ENHANCEMENTS   )
 11     23 LOAD ( copies/backup  )
 12     25 LOAD ( FIND WORD      )
 13     3D LOAD ( PRINTER WORDS  )
 14     4D LOAD ( SYS WORDS      )
 15     3F LOAD ( PNS STUFF      )
 16   : VERIFY  57 245E C! ;
 17   : NOVERIFY 50 245E C! ;
 18   : SYS 0 DMACTL C! 7 LOAD 22
 19     DMACTL C! ; : CLONE B LOAD ;
 1A  CODE  GOBOOT  E477 JMP, C;
 1B   : GO STACKON GS ;
 1C   : ZV VLIST ;
 1D   : WARNON  1 WARNING ! ;
 1E   : WARNOFF 0 WARNING ! ;
 1F ;S

SCR # 11
  0 ( SCREEN EDITOR DLI    1/4 )
  1 (              HEH  2jul82 )
  2 HEX   EDITOR DEFINITIONS
  3 ( DLI for command window   )
  4      0 VARIABLE COL1T
  5      0 VARIABLE COL2T
  6  CODE EDLI    PHA, TXA, PHA,
  7    COL1T LDA, COLRSH  EOR,
  8    DRKMSK AND, TAX, COL2T LDA,
  9    COLRSH EOR, DRKMSK AND,
  A    WSYNC STA,
  B    D017 STX, D018 STA, PLA,
  C    TAX, PLA, RTI,     C;
  D  : COLSET   COL2 C@ DUP F AND
  E       COL1T C! F0 AND COL1 C@
  F       F AND + COL2T C!    ;
 10 ( Sound words for beeps    )
 11  0 VARIABLE TOPFLAG
 12  1 VAR       L#FLG
 13  0 VAR      SPTCH
 14  1 VAR      SFLG
 15  0 VAR      EDVEC
 16
 17 : SOUNDON  1 TO SFLG ;
 18 : SOUNDOFF 0 TO SFLG ;
 19  FORTH DEFINITIONS
 1A : SNDOFF 0 0 0 SOUND ;
 1B  EDITOR DEFINITIONS
 1C : PN  10 * TO SPTCH SFLG IF
 1D       28 0 DO 0      SPTCH A 8
 1E  SOUND LOOP 0 SNDOFF THEN ;
 1F  -->

SCR # 12
  0 ( SCREEN ED. DLSETMOD  2/4 )
  1 (               JDS 18JUN85 )
  2    EDITOR DEFINITIONS
  3    28 ARRAY EDBF C ARRAY DLSTMP
  4    TBL EDLST 82 C, 40 C, 202 ,
  5        202 , 02 C, 40 C, 47 C,
  6       EDBF , 41 C, DLST @ ,
  7 0 GR. DLST @ 14 + DLSTMP C CMOVE
  8  : DLSET 200 @ TO EDVEC ' EDLI 2
  9 00 ! EDBF TOPFLAG @ 0= IF " UPP"
  A  ELSE " LOW" THEN SYPE " ER HALF
  B  SCR # " SYPE SCR @ 0 <# #S #>
  C  SYPE   "     " SYPE DROP
  D  DLST @ EDLST C + !
  E  EDLST DLST @ 14 + E CMOVE
  F  FF D40E C!    ." }" ;
 10   208 @  VARIABLE KBDVC
 11  CODE KCHK    54 LDA, 10 # CMP,
 12       0< IF, D209 LDA, C # CMP,
 13       0= IF, PLA, RTI, THEN,
 14       THEN,  KBDVC ) JMP, C;
 15  CODE EDKIS  SEI, 209 LDA, C4 #
 16      CMP, >= IF, KBDVC 1+ STA,
 17      208 LDA, KBDVC STA,   THEN,
 18      ' KCHK LSB  # LDA, 208 STA,
 19      ' KCHK MSB  # LDA, 209 STA,
 1A               CLI, NEXT JMP, C;
 1B  CODE EDKIQ  SEI,
 1C        KBDVC       LDA, 208 STA,
 1D        KBDVC 1 +   LDA, 209 STA,
 1E               CLI, NEXT JMP, C;
 1F    -->

SCR # 13
  0 ( SCREEN ED. MOD 1.4S  3/4 )
  1            ( HES 82AUG18   )
  2  EDITOR DEFINITIONS
  3  : EDCLR   COL1 @ COL3 @ 0 GR.
  4        COL3 ! COL1 ! CHRST C@
  5        CHBAS C!  ;
  6  : EDLS           EDCLR COLSET
  7   0 DMACTL C! DLSET 22 DMACTL C!
  8           EDKIS 2203 LMARGN !
  9         COL4 C@ DUP F0 AND SWAP
  A        8 +  F AND + COL0 C! ;
  B  : EDLQ   8F D40E C! EDVEC 200 !
  C  EDKIQ ' V1.4S 4 + C@ 52 C! '
  D   V1.4S 8 + C@ 53 C! 0 DMACTL C!
  E    DLSTMP DLST @ 14 + C CMOVE 22
  F    DMACTL C! FF D40E C!  CR ;
 10
 11
 12  : .L# L#FLG IF 10 0 DO DUP 0 I
 13     POS. I + . LOOP THEN DROP 3
 14     12 POS. ;
 15  : ULL      DUP TOPFLAG ! SCR @
 16      EDLS  EDLQ    BLOCK EDLS
 17                 3 0 POS. + 200
 18       1 DUP 2F0 C! 2FE C! TYPE
 19      CR ." DOIT"  AAAA 2B2 ! ;
 1A  : UL   0 ULL 0 .L#
 1B    0 DUP 2FE C! 2F0 C! 6 PN ;
 1C  : LL   200 ULL 10 .L#
 1D    0 DUP 2FE C! 2F0 C! 7 PN ;
 1E        -->
 1F

SCR # 14
  0 ( SCREEN EDITOR 1.4S   4/4 )
  1   EDITOR DEFINITIONS
  2 : DOIT
  3     10 0 DO -1 2B2 ! 3 I POS.
  4     SCR @ BLOCK I 20 * +
  5     TOPFLAG @ + ICBAL ! 20
  6     ICBLL ! GET DROP LOOP
  7          UPDATE
  8     TOPFLAG @ 0= IF UL ELSE LL
  9     ENDIF ;
  A : FORTH   EDLQ ~[COMPILE] FORTH ;
  B
  C   EDITOR DEFINITIONS
  D : COPY    FORTH  COPY  ;
  E : FLUSH   FORTH  FLUSH ;
  F : FH   FLUSH ;
 10
 11 : L#ON 1 TO L#FLG BASE @ > 8 IF
 12             HEX THEN DOIT ;
 13
 14 : L#OFF  0 TO  L#FLG DOIT ;
 15
 16  FORTH DEFINITIONS
 17 ;S
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 15
  0 ( LINE EDITOR          1/3 )
  1 (  TEXT,  LINE, WHERE USED IN
  2  EDITOR    7/7/80-SRC )
  3 FORTH  DEFINITIONS   HEX
  4
  5
  6 : TEXT                  ( ACCEPT
  7  FOLLOWING TEXT TO PAD *)
  8     HERE  C/L  1+   BLANKS  WORD
  9   HERE  PAD  C/L  1+  CMOVE  ;
  A : #OFLINES B/BUF B/SCR * C/L / ;
  B
  C : LINE             ( RELATIVE TO
  D  SCR, LEAVE ADDRESS OF LINE *)
  E  DUP  #OFLINES            MINUS
  F AND IF ." NOT ON SCREEN" ABORT
 10 ENDIF  ( KEEP ON THIS SCREEN )
 11       SCR  @  (LINE)  DROP  ;
 12
 13
 14 : WHERE                  ( PRINT
 15  SCREEN # AND IMAGE OF ERROR *)
 16     DUP  B/SCR  /  DUP  SCR  !
 17  ." SCR # "   .
 18     SWAP  C/L  /MOD  C/L  *  ROT
 19   BLOCK  +  CR  C/L  TYPE
 1A     CR  HERE  C@  -  SPACES  5E
 1B  EMIT  ~[COMPILE] EDITOR  QUIT  ;
 1C
 1D
 1E -->
 1F

SCR # 16
  0 ( LINE EDITING COMNDS  2/3 )
  1   EDITOR DEFINITIONS
  2 : -MOVE   ( MOVE IN BLOCK BUFFER
  3  ADDR FROM-2,  LINE TO-1 *)
  4      LINE  C/L  CMOVE  UPDATE  ;
  5
  6 : HL                      ( HOLD
  7  NUMBERED LINE AT PAD *)
  8     LINE  PAD  1+  C/L  DUP  PAD
  9   C!  CMOVE  ;
  A : BL                     ( ERASE
  B  LINE-1 WITH BLANKS *)
  C LINE  C/L  BLANKS  UPDATE ;
  D
  E : SL                    ( SPREAD
  F  MAKING LINE # BLANK *)
 10       DUP  1  -  ( LIMIT )
 11 #OFLINES 2 -  ( FIRST TO MOVE )
 12       DO  I  LINE  I  1+  -MOVE
 13   -1  +LOOP  BL ;
 14 : DL            ( DELETE LINE-1,
 15  BUT HOLD IN PAD *)
 16    DUP  HL  #OFLINES   1   -
 17    DUP  ROT
 18       DO  I  1+  LINE  I  -MOVE
 19  LOOP  BL ;
 1A : CL  ( COPY LINE-2 OF SCREEN-1
 1B  TO PAD )
 1C SCR @ >R SCR ! HL R> SCR ! ;
 1D
 1E -->
 1F

SCR # 17
  0 ( LINE EDITING COMNDS  3/3 )
  1 (                 WFR-790105 )
  2 : RL
  3  ( REPLACE ON LINE-1, FROM PAD )
  4       PAD  1+  SWAP  -MOVE  ;
  5
  6
  7
  8 : $                        ( PUT
  9  FOLLOWING TEXT ON LINE-1 )
  A       1  TEXT  RL  ;
  B
  C
  D
  E : %                ( INSERT TEXT
  F  FOLLOWING AFTER LINE-1 *)
 10     1   TEXT  1+  DUP  SL  RL  ;
 11
 12 : IL       (  INSERT  PAD  AFTER
 13  LINE-1 ) 1+  DUP  SL  RL  ;
 14
 15 : TL   ( TYPE LINE BY #-1,  SAVE
 16  ALSO IN PAD *)
 17     DUP . ." $ "
 18     DUP C/L *  R#  !       HL
 19      PAD  1+  C/L  TYPE  CR ;
 1A
 1B    FORTH DEFINITIONS
 1C
 1D : COPY SWAP BLOCK SWAP BLOCK 400
 1E      CMOVE UPDATE FLUSH ;
 1F ;S

SCR # 18
  0 ( VERS 1.4S MODS  HES  1/3 )
  1    FORTH DEFINITIONS    HEX
  2  : HX HEX 93 2C8 C! ;   DECIMAL
  3  : DX DECIMAL  68  712  C! ;
  4  : BX BINARY  248 712 C! ; HEX
  5  : BS  0006 2C5 ! ;
  6  : WS  0A00 2C5 ! ;
  7  : GS  D006 2C5 ! ;
  8  : NS  94CA 2C5 ! ;
  9    EDITOR DEFINITIONS
  A  : LE  EDIT LL ;
  B  : UE  EDIT UL ;
  C  : N 8 PN SCR @ 1+ EDIT UL ;
  D  : P 4 PN SCR @ 1- EDIT UL ;
  E  : L   SCR @     EDIT UL ;
  F : T 4 PN 9 PN ALT @ @ EDIT UL ;
 10 : SL DUP SL 10 < IF UL ELSE
 11             LL THEN ;
 12
 13    FORTH DEFINITIONS
 14 : EDT ~[COMPILE] EDITOR ;
 15 : UE ~[COMPILE] EDITOR
 16      EDITOR UE ;
 17    FORTH DEFINITIONS
 18 : LE ~[COMPILE] EDITOR
 19      EDITOR LE ;
 1A    FORTH DEFINITIONS
 1B : L&  HEX   ( fast load )
 1C      0 DUP WARNING ! DMACTL C!
 1D      LOAD  22 DMACTL C! ;
 1E
 1F  -->

SCR # 19
  0 ( FAST EDIT WORDS      2/3 )
  1 ( ZIEGLER/STRIEPE STUFF )
  2   FORTH DEFINITIONS   HEX
  3 : L. LIST ; : L SCR @ LIST ;
  4 : N SCR @ 1+ LIST ;
  5 : P SCR @ 1- LIST ;
  6 : NL EMPTY-BUFFERS LIST ;
  7 : SHOW 1+ SWAP DO I LIST LOOP ;
  8 : LS ~[COMPILE] EDITOR 1 + SWAP
  9  27 53 C! DO I EDITOR TL LOOP ;
  A : SAVE-BUFFERS  FLUSH ;
  B : ERASE-CORE  EMPTY-BUFFERS ;
  C : TRC NFA ID. ;
  D : T  ALT @ @ LIST ;
  E CODE K  XSAVE STX, TSX, 109 ,X
  F   LDA, PHA, 10A ,X LDA, XSAVE
 10   LDX, PUSH JMP,            C;
 11  : EMPTY  0 8 C! COLD ;
 12    D  ARRAY CDAT
 13    22 TEXT ... ......."
 14    PAD 1+ CDAT C  CMOVE
 15  : DATE 1+ SWAP DO I BLOCK
 16      11 + CDAT SWAP  C CMOVE
 17       UPDATE FLUSH  LOOP ;
 18  : NEWDATE CR ." DATE: " CDAT C
 19     TYPE ." " QUIT ;
 1A  : DATE: 9B TEXT PAD 1+ CDAT C
 1B    CMOVE ; EDITOR DEFINITIONS
 1C  : DATE SCR @ BLOCK 11 + CDAT
 1D     SWAP C CMOVE UPDATE UL ;
 1E  : LIST EDLQ LIST ; : L. LIST ;
 1F   -->

SCR # 1A
  0 ( ZIEGLER/STRIEPE V1.4S 3/3 )
  1   FORTH DEFINITIONS
  2 : N->T  SCR C@ S->D
  3    <# #S #>      ;
  4 : ZERO-BLOCK
  5   SCR @ BLOCK DUP DUP
  6   400 20 FILL                 "
  7 \ scr#     empty block       1/1
  8  ;S "    ROT SWAP CMOVE
  9   7 + N->T ROT SWAP CMOVE
  A   UPDATE FLUSH ;
  B : LZERO  1+ SWAP DO I SCR !
  C          ZERO-BLOCK LOOP ;
  D   EDITOR DEFINITIONS
  E : ZERO-BLOCK
  F    EDLQ ZERO-BLOCK EDT UL ;
 10 : NUL EMPTY-BUFFERS UL ;
 11 : NLL EMPTY-BUFFERS LL ;
 12 : LOAD  FLUSH DEPTH 0= IF SCR @
 13         THEN LOAD ;
 14 : T. 9 PN 4 PN ALT @ @ EDIT LL ;
 15  : N. 9 PN SCR @ 1 + EDIT LL ;
 16 : P. 5 PN SCR @ 1 - EDIT LL ;
 17 : WIPE  ZERO-BLOCK ;
 18 : DRAIN EMPTY-BUFFERS ;
 19 : W    ." }RETURN to wipe, N to
 1A  abort "         KEY 4E NOT = IF
 1B              WIPE THEN ;
 1C   FORTH DEFINITIONS
 1D : DRAIN EMPTY-BUFFERS ;
 1E : WIPE  ZERO-BLOCK ;
 1F   ;S

SCR # 1B
  0 ( HIGH-LEVEL DISSASSEMBLER )
  1   FORTH DEFINITIONS
  2                        TASK DOG
  3 ' (;CODE)    CFA CN .;CODE
  4 ' ;S         CFA CN .;S
  5 ' BRANCH     CFA CN .BR
  6 ' 0BRANCH    CFA CN .0BR
  7 ' (DO)       CFA CN .DO
  8 ' (LOOP)     CFA CN .LOOP
  9 ' (+LOOP)    CFA CN .+LOOP
  A ' LIT        CFA CN .LIT
  B   0D6B           CN .CLIT
  C ' (.")       CFA CN .(.")
  D ' TASK CFA   @   CN .:
  E ' DOG CFA    @   CN .DOES>
  F ' COMPILE    CFA CN .COMP
 10
 11   0 VARIABLE .IP
 12
 13 ' BLK CFA    @   CN .USR
 14 ' .;S CFA    @   CN .CON
 15 ' .IP CFA    @   CN .VAR
 16    60            CN RTS,
 17    40            CN RTI,
 18
 19  -->
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 1C
  0 ( HIGH-LEVEL DISSASSEMBLER )
  1
  2 : PRNAME 2+ NFA ID. ;
  3
  4 : STRNG ( cfa--cfa   prnt strng)
  5   DUP .(.") = IF PRNAME .IP @
  6   DUP COUNT ROT OVER + 1+ .IP !
  7   TYPE CR R> DROP ENDIF ;
  8
  9 : LIT? ( cfa--cfa    prints lit)
  A   DUP .LIT = IF PRNAME .IP @ @ .
  B   CR 2 .IP +! R> DROP ELSE DUP
  C   .CLIT = IF ." CLIT " DROP .IP
  D   @ C@ . CR 1 .IP +! R> DROP
  E   ENDIF ENDIF ;
  F
 10 : COMP? DUP .COMP = IF PRNAME
 11   .IP @ @ PRNAME CR 2 .IP +! R>
 12   DROP ENDIF ;
 13
 14 : PROMPT 0 2FE ! ." ok " CR ;
 15
 16 : ENDEF ( cfa--cfa  aborts@end)
 17   DUP .;CODE = OVER .;S = OR IF
 18   PRNAME CR PROMPT QUIT ENDIF ;
 19
 1A : BRNCH ( cfa--cfa   prnts dst)
 1B   DUP .BR = OVER .0BR = OR OVER
 1C   .LOOP = OR OVER .+LOOP = OR
 1D   IF PRNAME ." to " .IP @ DUP @
 1E   + .  CR 2 .IP +! R> DROP ENDIF
 1F  ;    -->

SCR # 1D
  0 ( DECOMP DISSASSEMBLER  PBL 82)
  1
  2      F CN OPTAB  ( STD. $F )
  3    200 CN OPOFF  300 CN MODOFF
  4
  5 : 1OP .IP @ DUP HH ." : " C@ 1
  6  .IP +! DUP CHH  SPACE ; ( --op)
  7
  8 : INDX ( off base--addr) + B/BUF
  9  /MOD ~[ OPTAB B/SCR * ] LITERAL
  A  + BLOCK  + ;
  B
  C : OPLUK  ( op--opind modind #op)
  D  DUP + 0 INDX DUP C@ SWAP 1+ C@
  E  40 /MOD ;
  F
 10 : OPANDP ( #bytes--) DUP -DUP IF
 11  .IP @ C@ CHH  SPACE 1 - IF .IP
 12  @ 1+ C@ CHH  ELSE 2 SPACES
 13  ENDIF ELSE 5 SPACES ENDIF
 14  ."  - " -DUP IF 1 - IF .IP @ @
 15  2 ELSE .IP @ C@ 1 ENDIF .IP +!
 16  HH SPACE ELSE 5 SPACES ENDIF ;
 17
 18 : MODP ( modind--) MODOFF INDX 2
 19  TYPE SPACE ;
 1A
 1B : OPP ( opind--) OPOFF INDX 3
 1C  TYPE ." , " CR ;
 1D
 1E -->
 1F

SCR # 1E
  0 ( DECOMP DISSASSEMBLER  PBL 82)
  1 : BR? ( mode #op--mode) OVER 10
  2  = IF .IP @ DUP C@ CHH
  3  ."     - " DUP C@ DUP 80 AND IF
  4  FF00 OR ENDIF 1+ + HH   .IP +!
  5  SPACE ELSE OPANDP ENDIF ;
  6 : 1LINE 1OP OPLUK BR? MODP OPP ;
  7
  8 : JMPEX ( --f  test endef jmps)
  9  .IP @ C@ 4C = IF .IP @ 1+ @ DUP
  A  ASSEMBLER NEXT = OVER W 1 - =
  B  OR OVER               POP = OR
  C  OVER PUSH = OR OVER PUT = OR
  D  SWAP POPTWO FORTH = OR DUP IF
  E  ENDIF ELSE 0 ENDIF ;
  F
 10 : ;CEND .IP @ C@ DUP RTS, = SWAP
 11   RTI, = OR JMPEX OR ;
 12
 13 : 1WRD BEGIN 1LINE ;CEND UNTIL
 14   1LINE ; : CSEE 1WRD ;
 15
 16 : DIS .IP ! 1WRD ; : NDIS .IP !
 17   0 DO 1LINE LOOP ;
 18
 19 : ISCODE .IP @ DUP 2 - @ = IF
 1A   ." primitive " CR 1WRD ELSE
 1B   .IP @ CFA @ DUP 2 - @ SWAP
 1C   .IP ! .;CODE = IF
 1D   ." ;CODE word" CR      ELSE
 1E   ." odd entry point" CR ENDIF
 1F   1WRD  ENDIF ; -->

SCR # 1F
  0 ( HIGH-LEVEL DISSASSEMBLER )
  1
  2 : ISCOL ( -- <ff> or <pfa tf> )
  3   .IP @ DUP CFA @ .: - IF DUP
  4   CFA @ DUP .DOES> = IF .IP @ @
  5   .IP ! ." DOES> word" CR DROP 1
  6   ELSE SWAP DROP DUP .CON  = IF
  7   ." CONSTANT : " .IP @ @ HH
  8   CR DROP ELSE DUP .USR = IF
  9   ." USER variable " DROP CR
  A   ELSE .VAR = IF ." VARIABLE : "
  B   .IP @ DUP HH @ ."  = " HH CR
  C   ELSE ISCODE ENDIF ENDIF ENDIF
  D   0 ENDIF ELSE 1 ENDIF ;
  E
  F
 10 : NXTW 2 SPACES .IP @ DUP HH
 11   ."  : " @ 2 .IP +! 2 SPACES
 12   LIT? BRNCH COMP? STRNG ENDEF
 13    PRNAME CR    ;
 14
 15 : FETCHW ~[COMPILE] ' .IP !
 16   ISCOL  IF NFA C@ 40 AND IF
 17   ." immediate" CR ENDIF ELSE
 18            PROMPT QUIT ENDIF ;
 19
 1A : DECOMP  1 2FE C! FETCHW BEGIN
 1B   NXTW ?TERMINAL IF
 1C   PROMPT QUIT ENDIF AGAIN ;
 1D
 1E : ZZ DECOMP ;
 1F  ;S

SCR # 20
  0 ( CONSTANT INFO DISPLAY 1/3 )
  1   FORTH DEFINITIONS
  2
  3 HEX  4E LOAD
  4
  5 TBL XTRN 40 C, 0 C, 20 C, 60 C,
  6
  7 CODE ASCINT BOT LDA,
  8  .A ROL, .A ROL, .A ROL, .A ROL,
  9  03 # AND, TAY, BOT LDA,
  A  9F # AND, XTRN ,Y ORA,
  B  BOT STA,  NEXT JMP, C;
  C
  D : SYPE ( addr, straddr, cnt )
  E   OVER + SWAP DO I C@
  F   ASCINT OVER C! 1+ LOOP ;
 10
 11
 12
 13
 14 HERE DUP 3F + FFC0 AND
 15 SWAP -  ALLOT
 16
 17 28 ARRAY BUF
 18
 19 TBL DLIST
 1A 5070 , 42 C, BUF , 1 C, 0 ,
 1B
 1C HERE 2 - CN DLPTCH
 1D
 1E -->
 1F

SCR # 21
  0 ( CONSTANT INFO DISPLAY  2/3  )
  1  ' ABORT 6 + @  VARIABLE ABORT1
  2  ' QUIT  A + @  VARIABLE QUIT1
  3  : INIT 0 DMACTL C!
  4   DLST @ DUP C@ 1 -
  5   IF DUP 3 + DLPTCH !
  6   1 OVER C! DLIST SWAP 1+ !
  7   ELSE DROP THEN 22 DMACTL C! ;
  8 : DSPLY BUF " TOS->" SYPE >R
  9  ASSEMBLER UP FORTH @ 6 + @ SP@
  A  10 + MIN SP@ BEGIN 2+ OVER OVER
  B  > WHILE R> OVER @
  C   0 <# # # # # #>
  D  SYPE 1+ >R REPEAT DROP DROP R>
  E  "                      fig-FORT
  F H 1.4S"    SYPE  DROP ;
 10
 11 : SSK    DSPLY INIT CR
 12    BASE @ DUP A = IF 44 2C8 C! E
 13 LSE DUP 10 = IF 93 2C8 C! ELSE D
 14 UP 2 = IF F8 2C8 C! ELSE DUP 4 2
 15 C8 C! ENDIF ENDIF ENDIF DROP
 16 CHRST C@ CHBAS C! ;
 17
 18 : STACKON   (  HES MOD 12jun82 )
 19   ' SSK      CFA ' ABORT 6 + !
 1A   ' SSK      CFA ' QUIT  A + !
 1B   ' FIX~ CFA '  ~  40 + ! ;
 1C
 1D -->
 1E
 1F

SCR # 22
  0 ( CONST. INFO. / CDUMP 3/3 )
  1 : STACKOFF
  2     ABORT1 @ ' ABORT 6 + !
  3     QUIT1  @ ' QUIT  A + !
  4     2C5 @ 2C8 C@ 0 GR.
  5     2C8 C! 2C5 ! ;
  6
  7 : STON  STACKON ;
  8 : STOF  STACKOFF ;
  9
  A ( HES V.2.0 82SEP9          )
  B :     (  FETCHES LETTERS AND ! )
  C     7E TEXT 10 0 DO DUP
  D     PAD 1+ I + C@ SWAP I + C!
  E     LOOP DROP PAD FIX~ QUIT ;
  F
 10 : CDUMP   ( adr1 adr2 --- )
 11        1 2FE C! 1+ SWAP DO
 12     I HH ."          " I 10 0 DO
 13     DUP I + C@ EMIT LOOP
 14     DROP SPACE 7E EMIT CR
 15     10 +LOOP 0 2FE C! ;
 16 : PATCH \ new  old --- JAP AUG82
 17     ~[COMPILE] ' CFA ~[COMPILE] '
 18     DUP >R ! ' ;S CFA R> 2+ ! ;
 19 \ Debugging ML rout  HES17OCT82
 1A CODE JMP \ INDIRECT JMP/ML DEBUG
 1B     BOT LDA, N STA, BOT 1+ LDA,
 1C     N 1+ STA,  N ) JMP,  C;
 1D CODE JSR \ INDIRECT JSR/ML DEBUG
 1E     XSAVE STX, ' JMP JSR, XSAVE
 1F     LDX, POP JMP,   C;   ;S

SCR # 23
  0 ( ONE DRIVE.DUPSCR/COPS1/2 )
  1 (   by anonymous/HES 23jun82 )
  2  0 VARIABLE EBLK ( ENDING BLK )
  3  0 VARIABLE SBLK ( START. BLK )
  4  0 VARIABLE PSBLK
  5 : DISP ( -> DEST ADR INFRE RAM )
  6  PSBLK @ B/BUF * HERE 20 + + ;
  7 : GTPAR ( SET UP DO AND PSBLK )
  8 EBLK @ SBLK @ 0 PSBLK ! ;
  9 : MVIN ( MOVE BLOCKS INTO RAM )
  A GTPAR DO I BLOCK DISP B/BUF
  B CMOVE 1 PSBLK +! LOOP ;
  C : MOVOT ( WRITE RAM TO DISK )
  D GTPAR OFFSET @ + SWAP OFFSET @ +
  E
  F SWAP DO I BUFFER DISP SWAP B/BUF
 10  CMOVE 1 PSBLK +! UPDATE FLUSH
 11 LOOP ;
 12 : DUPLICATE  ( STARTSCR--ENDSCR)
 13  1+ B/SCR * EBLK ! B/SCR *
 14 SBLK ! EBLK @ SBLK @ -
 15  FREE 20 - 400 /
 16     > IF ." TOO MANY " QUIT
 17 ENDIF CR MVIN
 18 ." INSERT DESTINATION DISK " CR
 19  ." RETURN TO CONTINUE " KEY
 1A DROP CR MOVOT ;
 1B
 1C
 1D
 1E
 1F  -->

SCR # 24
  0 ( COPIES          HES  2/2 )
  1 (        82JUN18 / 82AUG14 )
  2   FORTH DEFINITIONS
  3
  4
  5
  6 : CPST     CR ." ? Incorrect scr
  7 een range" CR QUIT ;
  8 : CPNT CR ." scr# " SWAP DUP .
  9      ."  --> " SWAP DUP . ;
  A : CPMP EBLK @ SBLK @ - DUP PSBLK
  B      @ + PSBLK ! 1+ 0  DO
  C      EBLK @ I - PSBLK @ I - CPNT
  D      COPY LOOP ;
  E : CPMD  EBLK @ SBLK @ - 1+ 0 DO
  F      SBLK @ I + PSBLK @ I + CPNT
 10       COPY LOOP  ;
 11 : COPIES PSBLK ! EBLK ! SBLK !
 12       EBLK @ SBLK @ < IF CPST
 13       THEN PSBLK @ SBLK @ > IF
 14       CPMP ELSE CPMD
 15       ENDIF CR  ; IMMEDIATE
 16
 17
 18
 19
 1A
 1B  ;S
 1C
 1D
 1E
 1F

SCR # 25
  0 ( FIND  V.1.1          1/2 )
  1 ( by R.Mansfield/COMPUTE!  )
  2 ( adapt.&enhanced HES 82aug7 )
  3   FORTH DEFINITIONS   HEX
  4
  5   0 VARIABLE 1STCHAR
  6
  7 : ?CONSOL   -2FE1 C@ 7 XOR ;
  8 : MATCH  ( addr1 addr2 N --- F )
  9  -DUP IF OVER + SWAP
  A        DO DUP C@ I C@ -
  B         IF 0= LEAVE ELSE 1+ THEN
  C        LOOP
  D       ELSE DROP 0= THEN ;
  E : CHECKIT ( addr --- F )
  F        PAD 1+ PAD C@ MATCH ;
 10  : HEADER
 11       CR ." Searching for "
 12       22 EMIT SPACE PAD 1+ PAD
 13       C@ TYPE 22 EMIT CR CR
 14       ." on scr #"     ;
 15 : MARKSTRING
 16        ( scr# addr --- scr# )
 17      OVER BLOCK - C/L / CR DUP
 18      CR CR ." Found on LINE#"
 19      CR CR . SPACE OVER .LINE
 1A      CR CR CR ." scr#" ;
 1B : ?STCK    DEPTH 2 < IF
 1C      0 59 PHYSOFF @ -
 1D      ENDIF      ;
 1E   -->
 1F

SCR # 26
  0 ( FIND                 2/2 )
  1
  2  CODE ?CHAR  ( addr --- addr F )
  3    1 # LDA, SETUP JSR,
  4    N )Y LDA, 1STCHAR CMP, 0=
  5    IF, 1 # LDA, PHA, 0 # LDA,
  6    PUSH JMP, THEN,
  7    0 # LDA, PHA, PUSH JMP, C;
  8
  9  : ONEBLK     ( scr# addr --- )
  A     DUP 400 + SWAP
  B       DO I ?CHAR
  C         IF I CHECKIT
  D           IF I MARKSTRING ENDIF
  E         ENDIF
  F       LOOP DROP ;
 10
 11  : GTWRD  22 WORD HERE DUP C@ 1+
 12          PAD SWAP CMOVE ;
 13  : FIND ( scr#1 scr#2 text --- )
 14      ?STCK GTWRD
 15      0 SCR ! PAD 1+ C@ 1STCHAR !
 16      HEADER 1+ SWAP
 17       DO I DUP DUP SPACE
 18          . BLOCK  ONEBLK
 19          ?CONSOL IF CR
 1A          LEAVE ENDIF
 1B       LOOP CR CR
 1C      ." Search ended" CR ;
 1D   ;S
 1E
 1F

SCR # 27
  0 ( VERS1.4S KERNEL ADD  1/1 )
  1 (        REZ / HES 15sep82 )
  2 ( Already in kernel, doc.only)
  3   FORTH DEFINITIONS  HEX
  4   4F LOAD
  5 : NOT 0= ;
  6 : U. 0  D. ;
  7 : CN CONSTANT ;
  8
  9 : (") R> DUP COUNT + >R COUNT ;
  A : " COMPILE (") 22 WORD HERE C@
  B     1+ ALLOT ; IMMEDIATE
  C : DEPTH EA SP@ - 2 / ;
  D : .S CR DEPTH IF EA EA DEPTH 2 -
  E      2* - SWAP DO I ? -2 +LOOP
  F      ELSE 1 MESSAGE
 10     ENDIF ;
 11 : SAVENFAs  #LINKS  0 DO
 12     1CFC 4 + I 4 * + @ 22 I 2*
 13     + +ORIGIN !     LOOP ;
 14  (              HES 82AUG21  )
 15  CODE V1.4S  ( DOSINI VECTOR )
 16     E4C0 JSR, ( APPL.HOOK   )
 17     0 # LDA, 52 STA, ( MARGN )
 18    27 # LDA, 53 STA, (   "   )
 19     6 # LDA, 2C5 STA, D0 # LDA,
 1A     2C6 STA, 93 # LDA, 2C8 STA,
 1B               ( SCREEN COLORS )
 1C                  RTS,  C;
 1D
 1E
 1F    ;S

SCR # 28
  0 (  FORTH-65 ASSEMBLER  1/6 )
  1              ( WFR-79JUN03 )
  2 HEX
  3
  4 VOCABULARY  ASSEMBLER  IMMEDIATE
  5 ' ASSEMBLER 2 + DUP 20 +ORIGIN !
  6                     VOC-LINK !
  7      ASSEMBLER  DEFINITIONS
  8  ( LOCATE EXISTING REGISTERS )
  9
  A FF CONSTANT  XSAVE     0FB  CONS
  B TANT  W    0FD  CONSTANT  UP
  C F8  CONSTANT  IP          F0  CO
  D NSTANT  N
  E
  F
 10 (  LOCATE EXISTING CODE PROCEEDU
 11 RES )
 12 '  (DO)  0E  +    CONSTANT  POP
 13    ( FROM COMPUTATION STACK *)
 14 '  (DO)  0C  +    CONSTANT  POPT
 15 WO
 16 '  LIT  13  +  CONSTANT  PUT
 17
 18 '  LIT  11  +  CONSTANT  PUSH
 19
 1A '  LIT  18  +  CONSTANT  NEXT
 1B
 1C '  EXECUTE  NFA  11  -  CONSTANT
 1D   SETUP
 1E     -->
 1F

SCR # 29
  0 (  FORTH-65 ASSEMBLER  2/6 )
  1              ( WFR-78OCT03 )
  2    0 VARIABLE INDEX -2 ALLOT
  3
  4 0909 , 1505 , 0115 , 8011 , 8009
  5  , 1D0D , 8019 , 8080 , 0080 , 1
  6 404 , 8014 , 8080 , 8080 , 1C0C
  7 , 801C , 2C80 ,
  8
  9    2 VARIABLE MODE
  A
  B  : .A 0 MODE ! ; : # 1 MODE ! ;
  C  : MEM 2 MODE ! ;
  D  : ,X 3 MODE ! ; : ,Y 4 MODE ! ;
  E  : X) 5 MODE ! ; : )Y 6 MODE ! ;
  F  : )  F MODE ! ;
 10  : BOT   ,X 0 ; ( ADDRESS BOTTOM
 11                    OF STACK    )
 12
 13  : SEC   ,X 2 ; ( ADDRESS SECOND
 14                 ITEM ON STACK  )
 15
 16  : RP)   ,X 101 ;
 17                 ( ADDRESS BOTTOM
 18                OF RETURN STACK )
 19
 1A
 1B
 1C
 1D    -->
 1E
 1F

SCR # 2A
  0 (  UPMODE,  CPU        3/6 )
  1              ( WFR-78OCT23 )
  2
  3
  4 : UPMODE   IF  MODE  C@  8  AND
  5  0=  IF  8  MODE +! ENDIF ENDIF
  6      1 MODE C@  0F AND  -DUP  IF
  7   0  DO  DUP + LOOP  ENDIF
  8      OVER  1+  @  AND  0=  ;
  9
  A
  B
  C : CPU   <BUILDS  C,  DOES>  C@
  D  C,  MEM  ;
  E      00 CPU BRK,   18 CPU CLC,
  F  D8 CPU CLD,  58 CPU CLI,
 10      B8 CPU CLV,   CA CPU DEX,
 11  88 CPU DEY,  E8 CPU INX,
 12      C8 CPU INY,   EA CPU NOP,
 13  48 CPU PHA,  08 CPU PHP,
 14      68 CPU PLA,   28 CPU PLP,
 15  40 CPU RTI,  60 CPU RTS,
 16      38 CPU SEC,   F8 CPU SED,
 17  78 CPU SEI,  AA CPU TAX,
 18      A8 CPU TAY,   BA CPU TSX,
 19  8A CPU TXA,  9A CPU TXS,
 1A      98 CPU TYA,
 1B
 1C -->
 1D
 1E
 1F

SCR # 2B
  0 (  M/CPU,   MULTI-MODE 4/6 )
  1 (     OP-CODES    WFR-79MAR26 )
  2 : M/CPU   <BUILDS  C,  ,  DOES>
  3
  4        DUP  1+  C@  80  AND  IF
  5  10  MODE  +!  ENDIF  OVER
  6        FF00  AND  UPMODE  UPMODE
  7   IF  MEM  CR  LATEST  ID.
  8        3  ERROR  ENDIF  C@  MODE
  9   C@
  A        INDEX  +  C@  +  C,  MODE
  B   C@  7  AND  IF  MODE  C@
  C        0F  AND  7  <  IF  C,  EL
  D SE  ,  ENDIF  ENDIF  MEM  ;
  E
  F
 10    1C6E 60 M/CPU ADC,  1C6E 20 M
 11 /CPU AND,  1C6E C0 M/CPU CMP,
 12    1C6E 40 M/CPU EOR,  1C6E A0 M
 13 /CPU LDA,  1C6E 00 M/CPU ORA,
 14    1C6E E0 M/CPU SBC,  1C6C 80 M
 15 /CPU STA,  0D0D 01 M/CPU ASL,
 16    0C0C C1 M/CPU DEC,  0C0C E1 M
 17 /CPU INC,  0D0D 41 M/CPU LSR,
 18    0D0D 21 M/CPU ROL,  0D0D 61 M
 19 /CPU ROR,  0414 81 M/CPU STX,
 1A    0486 E0 M/CPU CPX,  0486 C0 M
 1B /CPU CPY,  1496 A2 M/CPU LDX,
 1C    0C8E A0 M/CPU LDY,  048C 80 M
 1D /CPU STY,  0480 14 M/CPU JSR,
 1E    8480 40 M/CPU JMP,  0484 20 M
 1F /CPU BIT,       -->

SCR # 2C
  0 ( ASSEMBLER CONDITIONALS 5/6)
  1               ( WFR-79MAR26 )
  2 : BEGIN,     HERE  1  ;
  3         IMMEDIATE
  4 : UNTIL,    ?EXEC >R 1 ?PAIRS R>
  5  C, HERE 1+ - C, ; IMMEDIATE
  6 : IF,       C,  HERE  0  C,  2
  7 ;       IMMEDIATE
  8 : ENDIF,   ?EXEC  2  ?PAIRS  HER
  9 E  OVER  C@
  A  IF  SWAP  !  ELSE  OVER  1+  -
  B  SWAP  C!  ENDIF  ; IMMEDIATE
  C : ELSE,    2  ?PAIRS  HERE  1+
  D 1  JMP,
  E       SWAP  HERE  OVER  1+  -  S
  F WAP  C!  2  ;  IMMEDIATE
 10 : NOT    20  +  ;
 11      ( REVERSE ASSEMBLY TEST )
 12 90  CONSTANT  CS               (
 13  ASSEMBLE TEST FOR CARRY SET )
 14 D0  CONSTANT  0=             ( A
 15 SSEMBLER TEST FOR EQUAL ZERO )
 16 10  CONSTANT  0<          ( ASSE
 17 MBLE TEST FOR LESS THAN ZERO )
 18 90  CONSTANT  >=   ( ASSEMBLE TE
 19 ST FOR GREATER OR EQUAL ZERO )
 1A                     ( >= IS ONLY
 1B  CORRECT AFTER SUB, OR CMP,  )
 1C CR   -->
 1D
 1E
 1F

SCR # 2D
  0 (  USE OF ASSEMBLER    6/6 )
  1              ( WFR-79APR28 )
  2 : C;
  3     ( END OF CODE DEFINITION *)
  4    CURRENT  @  CONTEXT  !  ?EXEC
  5   ?CSP  SMUDGE  ; IMMEDIATE
  6
  7
  8 FORTH  DEFINITIONS
  9
  A : CODE      ( CREATE WORD AT ASS
  B EMBLY CODE LEVEL *)
  C       ?EXEC  CREATE  ~[COMPILE]
  D ASSEMBLER
  E       ASSEMBLER  MEM  !CSP  ;
  F    IMMEDIATE
 10 DECIMAL   ;S    ( TILL figFORTH
 11 IS UP )
 12 '  ASSEMBLER  CFA    '  ;CODE  8
 13   +  !  ( OVER-WRITE SMUDGE )
 14 FORTH  DEFINITIONS  DECIMAL
 15 ;S
 16 LATEST  12  +ORIGIN  !  ( TOP NF
 17 A )
 18 HERE    28  +ORIGIN  !  ( FENCE
 19 )
 1A HERE    30  +ORIGIN  !  ( DP )
 1B
 1C '  ASSEMBLER  6  +    32  +ORIGI
 1D N  !  ( VOC-LINK )
 1E HERE  FENCE  !   ;S
 1F

SCR # 2E
  0 (  compile assembler   1/1 )
  1    and editor  SRC 7/6/80   )
  2 BASE  @  ( PRESERVE THE RADIX )
  3
  4 DECIMAL  31  WIDTH  !
  5
  6 HEX 28 LOAD ( ASSEMBLER )
  7
  8 HEX 2F LOAD ( DECUS FORTH ADDS)
  9
  A HEX 27 LOAD ( VERS 1.4S KERNEL )
  B
  C HEX 30 LOAD   ( EDITOR & OTHER
  D                     WORDS  )
  E FORTH  DEFINITIONS
  F
 10 25 CONSTANT LPWORDS
 11
 12 27 CONSTANT FORMAT DECIMAL
 13
 14 LATEST 12 +ORIGIN ! ( TOP NFA )
 15
 16 HERE  28 +ORIGIN ! ( FENCE )
 17
 18 HERE    30  +ORIGIN  !  ( DP )
 19
 1A HERE  FENCE  !
 1B
 1C 1 WARNING ! ( DISK WARNINGS )
 1D
 1E : TASK  ;  BASE !    ;S
 1F

SCR # 2F
  0 (  DECUS/FORTH MODS    1/1 )
  1
  2 : 1+! 1 SWAP +! ; : 1- 1 - ;
  3
  4 : 0SET 0 SWAP ! ;
  5
  6 : HD DUP 0A < IF 30 ELSE 37
  7   ENDIF + EMIT ;
  8 : CHH DUP 0F0 AND 10 / HD 0F AND
  9   HD ;
  A : CH? C@ CHH ;
  B
  C : HH DUP 0FF00 AND 100 / 0FF AND
  D   CHH  CHH  ;
  E : H? @ HH ;
  F
 10
 11 : BDUMP 1+ SWAP DO I HH ." : " I
 12   8 0 DO DUP I + CH? SPACE
 13   LOOP  DROP ." \" CR 8 +LOOP ;
 14
 15 : TBL <BUILDS DOES> ;
 16 : ALLOC DUP + ALLOT ; ( FOR RAM
 17 BASED SYSTEMS,)
 18 : ARRAY <BUILDS ALLOC DOES> ;
 19
 1A  ;S
 1B
 1C
 1D
 1E
 1F

SCR # 30
  0 ( FULL UTILITY LOAD REV H HES )
  1     FORTH DEFINITIONS  HEX
  2 ( VLIST patches   HES17OCT82  )
  3   : v1  ( patch beginning )
  4       1 2FE C! ;
  5   : v2  ( patch SPACE after ID.)
  6       55 @ D < IF D 55 ! ELSE 55
  7       @ 1A <  IF 1A 55 ! ELSE CR
  8       THEN THEN ;
  9   : v3  ( patch last CR )
  A       CR 0 2FE C! ;
  B  ' v1  CFA ' VLIST 6 + !
  C  ' DUP CFA ' VLIST 55 + !
  D  ' v2  CFA ' VLIST 95 + !
  E  ' v3  CFA ' VLIST 9B + !
  F  800 ' DR1 2 + ! ( FX DR1 - 810)
 10    HEX 4C LOAD ( VAR/VALUE )
 11    HEX 4A LOAD ( PICK/ROLL )
 12    HEX 45 LOAD ( CASE      )
 13    HEX 46 LOAD ( CHRSET    )
 14    HEX 4B LOAD ( FIG 79    )
 15    HEX 31 LOAD ( CIO/GRAPH )
 16    HEX 36 LOAD ( PON/POFF  )
 17    HEX 37 LOAD ( RS 232C   )
 18    HEX 39 LOAD ( DISPLLST  )
 19    HEX 3B LOAD ( DRIVE LINK)
 1A    HEX 10 LOAD ( EDITOR    )
 1B      FORTH DEFINITIONS
 1C   NOVERIFY GO 1 CHR       ;S
 1D
 1E
 1F

SCR # 31
  0 ( fig-FORTH 1.4S MODS  1/1 )
  1 (             HES 82JUN17  )
  2    FORTH DEFINITIONS  HEX
  3 : BELL C0 0 DO 8 D01F C! 6 0 DO
  4           LOOP 0 D01F C! 6 0 DO
  5           LOOP LOOP ;
  6   : BINARY  2 BASE ! ;
  7   : BIN   BINARY ;   HEX
  8   : OCTAL 8 BASE ! ;
  9   : OCT OCTAL ;  HEX
  A
  B   : TASK  <BUILDS DOES> ;
  C
  D   : MSBYTE 0 100 U/ SWAP DROP ;
  E   : LSBYTE FF AND ;
  F   : MSB MSBYTE ; : LSB LSBYTE ;
 10   : ><    DUP LSBYTE 100 * SWAP
 11           MSBYTE + ;
 12 CR ." CIO CALLS" CR    32 LOAD
 13 CR ." OS/HARDWARE" CR  33 LOAD
 14 CR ." GRAPH/SOUND" CR  34 LOAD
 15
 16   FORTH DEFINITIONS
 17 : THERE  MEMTOP @ ;
 18 : FREE THERE HERE - ;
 19
 1A ;S
 1B
 1C
 1D
 1E
 1F

SCR # 32
  0 ( CIO CALL ROUTINES )
  1
  2 340 VARIABLE IOC 0 VARIABLE IOB
  3
  4 : IOCB 7 MIN 0 MAX 10 * DUP IOB
  5 ! 340 + IOC ! ;
  6 : .IOC <BUILDS , DOES> @ IOC @ +
  7  ;
  8 1 .IOC ICDNO 2 .IOC ICCOM 3 .IOC
  9  ICSTA
  A 4 .IOC ICBAL 6 .IOC ICPTL
  B
  C 8 .IOC ICBLL A .IOC I1CAX B .IOC
  D  I2CAX
  E CODE CIO TXA, PHA, IOB LDX, E456
  F  JSR, PLA, TAX, NEXT JMP, C;
 10 CODE Get XSAVE STX, IOB LDX, E45
 11 6 JSR,
 12 XSAVE LDX, PHA, 0 # LDA, PUSH JM
 13 P, C;
 14 : GET 7 ICCOM C! Get ;
 15
 16 : CLOSE 0C ICCOM C! CIO ;
 17
 18 : OPEN 3 ICCOM C! ICBAL ! I1CAX
 19 C! I2CAX C! CIO ;
 1A CODE ACIO XSAVE STX, BOT LDA, IO
 1B B LDX, E456 JSR,
 1C XSAVE LDX, POP JMP, C;
 1D
 1E ;S
 1F

SCR # 33
  0 ( OS & HDW CONSTANTS   1/1 )
  1   FORTH DEFINITIONS    HEX
  2 D200 CN F1AUD D201 CN C1AUD
  3
  4 D202 CN F2AUD D203 CN C2AUD
  5
  6 D204 CN F3AUD D205 CN C3AUD
  7
  8 D206 CN F4AUD D207 CN C4AUD
  9
  A D20F CN SKCTL D208 CN AUDCTL
  B
  C  230 CN DLST   22F CN DMACTL
  D
  E   14 CN RTCLK  2F0 CN CRSINH
  F
 10  2F4 CN CHBAS  2C4 CN COL0
 11
 12  2C5 CN COL1   2C6 CN COL2
 13
 14  2C7 CN COL3   2C8 CN COL4
 15
 16 D01F CN CONSOL 2FC CN CH
 17
 18  2BF CN BOTSC   52 CN LMARGN
 19
 1A 2FB CN ATACHR  2E5 CN MEMTOP
 1B
 1C  4D CN ATRACT   4E CN DRKMSK
 1D
 1E  4F CN COLRSH D40A CN WSYNC
 1F   ;S

SCR # 34
  0 ( COLLEEN GRAPHICS     1/2 )
  1
  2 3A53 VARIABLE S: 1 VARIABLE COLO
  3 RC 0 VARIABLE Qbase
  4 : PBASE Qbase @ ;
  5 : GR. 1 IOCB CLOSE 0 ICBLL ! DUP
  6  F AND SWAP
  7 30 AND 10 XOR 0C + S: OPEN MEMTO
  8 P @ 1 + F800 AND 800 -
  9 DUP Qbase ! 17F + MEMTOP ! ; : P
  A OS. 54 C! 55 ! ;
  B 0 GR. : LOC. POS. GET ;
  C : C. DUP COLORC ! ATACHR C! ;
  D : SPB  HIMEM @ F800 AND 800 -
  E    DUP Qbase ! 17F + HIMEM ! ;
  F
 10 : PUT 0B ICCOM C! ACIO ;
 11
 12 : PL. POS. COLORC @ PUT ;
 13   2FD CN FILDAT
 14 : SE. SWAP 10 * + SWAP 2C4 + C!
 15 ; : DR.  POS. 11 ICCOM C! COLORC
 16          C@ DUP ATACHR C! FILDAT
 17          C! CIO ;
 18 : GRAPHICS GR. ; : PLOT PL. ;
 19 : LOCATE LOC. ;
 1A : SETCOLOR SE. ; : COLOR C. ;
 1B : POSITION POS. ; : DRAWTO DR. ;
 1C  : CLEAR 0 0 POS. 7D PUT ;
 1D  : XIO18 DUP FILDAT C! ATACHR C!
 1E          12 ICCOM C! CIO ;
 1F  -->

SCR # 35
  0 ( SOUND CONTROL / P/M  2/2 )
  1
  2 : SOUND 3 D20F C! 0 D208 C! SWAP
  3
  4 10 * + 100 * + SWAP 2 * D200 + !
  5  ;
  6 : PADDLE 270 + C@ ;
  7       : PTRIG 27C + C@ ;
  8 : STICK 278 + C@ ;
  9       : STRIG 284 + C@ ;
  A : RND D20A C@ ;
  B    (   22F CONSTANT DMACTL )
  C D01D CONSTANT GRACTL
  D       D407 CONSTANT PMBASE
  E D01B CONSTANT PRIOR
  F       D016 CONSTANT VDELAY
 10  2C0 CONSTANT COLPM
 11        26F CONSTANT GPRIOR
 12 PBASE 1 - HIMEM !
 13
 14 : PLAYER Qbase 1+ C@ PMBASE C! 3
 15         GRACTL C! 2 - IF 1C
 16   ELSE 0C ENDIF DMACTL @ E3 AND
 17 OR      DMACTL C! ;
 18 : HPOS! D000 + C! ;
 19         ( H-posn plyr# -> )
 1A : SIZE! D008 + C! ;
 1B         ( size-code plyr# -> )
 1C : COLPM! COLPM + C! ;
 1D         ( color plyr# -> )
 1E : NOPLY GRACTL 0SET D000 11 0 FI
 1F LL      ; ;S

SCR # 36
  0 ( PON/POFF             1/1 )
  1 (              JDS 18jun85 )
  2   FORTH DEFINITIONS
  3    E406 @ 1+ VARIABLE EOUTC
  4    E436 @ 1+ VARIABLE POUTC
  5         0 VARIABLE ECHR
  6         0 VARIABLE EVTBL F ALLOT
  7
  8 ( routine to send character )
  9 ( to both P: & E:           )
  A  CODE PPUTC POUTC ) JMP, RTS,
  B      C;
  C  CODE EPUTC
  D    ECHR STA, PHA, TXA, PHA,
  E    ECHR LDA, ' PPUTC JSR, PLA,
  F    TAX, PLA, EOUTC ) JMP, C;
 10  FORTH DEFINITIONS
 11
 12  : PON  E406 @ 1+ EOUTC !
 13         E436 @ 1+ POUTC !
 14       E400 ' EVTBL F CMOVE
 15       ' EPUTC 1- ' EVTBL 6 + !
 16       ' EVTBL 321 ! ;
 17  : POFF  E400 321 ! ;
 18
 19 ;S
 1A
 1B NOTE: the subroutine EPUTC will
 1C       drive decompiler crazy,
 1D       since it cannot find its
 1E       end.
 1F

SCR # 37
  0 ( RS232 SUPPORT        1/2 )
  1
  2 CODE SIO    XSAVE STX, BOT LDA,
  3 E459 JSR, ( SIOV) XSAVE LDX, BOT
  4   STA, BOT 1+ STY, NEXT JMP, C;
  5
  6 : SERR DUP 0< IF 0 100 U/ BASE @
  7         DECIMAL ." SIO ERROR "
  8   . BASE ! QUIT ELSE DROP THEN ;
  9
  A CODE DORL    XSAVE STX, 506 JSR,
  B         HERE 8 + JSR, XSAVE LDX,
  C         NEXT JMP, 0C ) JMP, C;
  D
  E : GETR: HERE 2E7 ! ( SET MEMLO )
  F             FLUSH EMPTY-BUFFERS
 10  150  300 !  ( DDEVIC,DUNIT)
 11  403F 302 !  ( ? CMD,EXPCT DATA)
 12  5    306 C! ( TIMEOUT)
 13  500  304 !  ( BUFFER ADDR)
 14  0C   308 !  ( LENGTH )
 15  0    30A !  ( AUXES )
 16  0 SIO SERR ( ERRORS?)
 17 500 300 0C CMOVE 0 SIO SERR DORL
 18  ( RUN RELOCATOR ) 2E7 @ HERE -
 19  ALLOT HERE FENCE ! ;
 1A
 1B  : R1: " R1: " DROP ;
 1C
 1D  ;S  ( other words not needed )
 1E
 1F   -->

SCR # 38
  0 ( RS232                2/2 )
  1
  2
  3
  4 : R1OPEN 0 8 R1: OPEN ICSTA CH?
  5 ;
  6 : RYPE -DUP IF 1 IOCB 0B ICCOM C
  7 !       ICBLL ! ICBAL ! CIO
  8   20 ICCOM C! 0 I1CAX ! CIO ELSE
  9         DROP THEN ;
  A : CRR 0A9B SP@ 2 RYPE DROP ;
  B       : REMIT SP@ 1 RYPE DROP ;
  C : SET9600 1 IOCB 0E I1CAX ! 24
  D         ICCOM C! R1: ICBAL !
  E   CIO ICSTA CH? ;
  F
 10 : LINER SCR @ (LINE) -TRAILING
 11         RYPE ;
 12 100 VARIABLE LSPD
 13
 14 : LISTR DUP SCR ! CRR " SCR#" RY
 15 PE      0 <# #S #> RYPE CRR 10 0
 16   DO I 0 <# # # #> RYPE I LINER
 17         CRR LOOP ;
 18  ;S
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 39
  0 ( DISPLAY LIST STUFF   1/1 )
  1   HEX
  2 0 VARIABLE 3BYT 0 VARIABLE DLADR
  3
  4 : DINST DLADR @ C@ DUP 0F AND IF
  5
  6 DUP 0F AND 1 = IF 40 AND IF ." J
  7 VB "
  8 ELSE ." JMP " ENDIF DLADR 1+! DL
  9 ADR  @
  A @ DUP DLADR ! HH 3BYT 0SET ELSE
  B DUP 0F AND
  C 8 OVER < IF ." MAP" ELSE ." CHR"
  D
  E ENDIF 7 AND . DUP 10 AND IF ." H
  F "
 10 THEN DUP 20 AND IF ." V" THEN DU
 11 P
 12 80 AND IF ." I" ENDIF DUP 0B0
 13
 14 AND IF DUP 40 AND IF ." ," ENDIF
 15
 16 ENDIF 40 AND IF 3 DLADR @ 1+ H?
 17 ELSE
 18 1 ENDIF 3BYT ! ENDIF ELSE ." BLK
 19 "
 1A DUP 80 AND IF ." I," ENDIF 70
 1B
 1C AND 10 / . 1 3BYT ! ENDIF CR
 1D
 1E 3BYT @ DLADR +! ; ;S
 1F

SCR # 3A
  0 ( PLAYER/MISS.STUFF-RZ 1/1 )
  1 HEX 0 VARIABLE 0VP 64 VARIABLE
  2 0HP 0 VARIABLE 0VPOLD
  3 ( : SPB  HIMEM @ 1+  F800 AND
  4     800 - DUP Qbase ! 17F +
  5               HIMEM ! ; )
  6 : GETPS  0VP  ! ROT BLOCK ROT +
  7     Qbase @ 400 + 0VP  @ + ROT
  8     CMOVE ;
  9 : SPLAY  0 0 HPOS! 7 GR. SPB
  A   Qbase 1+ C@  PMBASE C!
  B   2A 0 COLPM!
  C   0 0 SIZE!   3E D400 C!
  D   3E DMACTL C! 3 GRACTL C!
  E   1C 20 8 64 GETPS  ;
  F  : CLRPM  Qbase @ 800 ERASE ;
 10 : MOVEH   0 STICK F XOR C AND
 11    DUP IF 2 / 3 - ENDIF 0HP @
 12    + DUP 0HP ! 0 HPOS!  ;
 13 : VPOS!  0VPOLD @ 9C00 + DUP
 14   9800 8 CMOVE  8 ERASE  9C00 +
 15   9800 SWAP 8 CMOVE ;
 16 : MOVEV        0 STICK F XOR
 17   3 AND   DUP IF 2 * 3 - ENDIF
 18   -DUP IF 0VP @ DUP 0VPOLD ! +
 19   DUP 0VP !  VPOS! ENDIF ;
 1A : RUNIT BEGIN   MOVEH MOVEV
 1B     2FC C@ FF = NOT END ;
 1C : B/H DUP HEX ." H
 1D EX =" . DECIMAL ." DEC.=" . BIN
 1E QUIT ;          HEX     ;S
 1F

SCR # 3B
  0 \ 3B  DRIVE LINK             1/1
  1  : r/w
  2      301 C@ 1 = IF @ ELSE DROP
  3      0 ENDIF ;
  4
  5  : UNLINK   EMPTY-BUFFERS DR0
  6      ' r/w CFA ' R/W B1 + ! ;
  7
  8  : LINK     EMPTY-BUFFERS DR0
  9      ' @   CFA ' R/W B1 + ! ;
  A   1A VAR  TMPHYS
  B
  C \ SETS BOTH DRIVES
  D
  E : SETPHYS     1FB5 C@ 1FCE C@
  F      100 * + TO TMPHYS DUP
 10   LSB 1FB5 C! MSB 1FCE C! DR0 ;
 11  : RESPHYS     TMPHYS @ DUP LSB
 12      1FB5 C! MSB 1FCE C! DR0 ;
 13 ;S
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 3C
  0 \ scr# 3C  empty block       1/1
  1  ;S
  2
  3
  4
  5
  6
  7
  8
  9
  A
  B
  C
  D
  E
  F
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 3D
  0 ( LINE PRINTER WORDS   1/2 )
  1 ( 0181 SRC ) 3A50 VARIABLE P:
  2  CODE PCIO XSAVE STX, 70 # LDX,
  3 E456 JSR, XSAVE LDX,  TYA, PHA,
  4 PUSH JMP, C; 0 VARIABLE LPCNT
  5 : PERR? DUP 0< IF FF AND
  6 ." P: ERROR "   ERROR THEN
  7  DROP ;
  8 : LPOPEN 3 3B2 C! P: 3B4 ! 2 3B8
  9  ! 8 3BA ! PCIO PERR? ;
  A : LYP1 3B8 ! 3B4 ! 0B 3B2 C! PCI
  B O PERR? ; : LPEMIT SP@ 1 LYP1 DR
  C OP ; : LPCR 9B LPEMIT 1 LPCNT +!
  D  ; : LYPE DUP IF DUP 50 > IF
  E  1 LPCNT +! THEN LYP1 ELSE DROP
  F DROP THEN 20 SP@ 1 LYP1 DROP ;
 10 : CRLP LPCR LPCNT @ 3D > IF
 11 LPCR LPCR LPCR LPCR 0 LPCNT !
 12 THEN ;
 13 : FFLP CRLP BEGIN LPCNT @ WHILE
 14 CRLP REPEAT ;
 15 : SHRINK 1B LPEMIT 14 LPEMIT
 16  CRLP ; : EXPAND 1B LPEMIT 13
 17  LPEMIT CRLP ;
 18 : .CLP 0 <# # # #> LYPE ;
 19 : .LP 0 <# #S #>  LYPE ;
 1A : LINELP DUP .CLP SCR @ (LINE)
 1B  -TRAILING 1 MAX LYPE CRLP   ;
 1C 4353 VARIABLE SCR# 2052 , 2023 ,
 1D  : LISTLP DUP SCR ! SCR# 6 LYPE
 1E .LP LPCR B/SCR B/BUF * C/L /
 1F 0 DO I LINELP LOOP ; -->

SCR # 3E
  0 ( LINE PRINTER WORDS   2/2 )
  1 ( 1/27/81  SRC )
  2 : LPSPC 0 DO 20 LPEMIT LOOP ;
  3 : SHOWLP 1+ SWAP C/L 20 = IF
  4   DO CRLP
  5   SCR# 6 LYPE I .LP
  6   1F LPSPC SCR# 6 LYPE I 1+
  7   .LP CRLP
  8   I 20 0 DO DUP SCR ! I .CLP
  9   I SCR @ (LINE) LYPE
  A   5 LPSPC
  B   DUP 1+ SCR ! I LINELP LOOP
  C   DROP 2 +LOOP
  D   ELSE DO CRLP    I LISTLP LOOP
  E   ENDIF FFLP ;
  F
 10 : LPINDEX 1+ SWAP DO I .LP
 11 0 I (LINE) -TRAILING LYPE LPCR
 12 LOOP ;
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C                              ;S
 1D
 1E
 1F

SCR # 3F
  0 \ pns TRANSLATOR HES 16SEP82 1/1
  1 \ moves screens from drive 2 to
  2 \ same place on drive 1.
  3   FORTH DEFINITIONS  HEX
  4 \ Expects byte on TOS
  5  : translate    ( n --- n )
  6     DUP  0= IF 20 + \  
  7       ELSE
  8     DUP DUP     \ lwr case
  9      60 > SWAP 7B < AND IF
  A         20 - ENDIF ENDIF ;
  B
  C \ Expects buffer address on TOS
  D \
  E  : trnsblk     ( adr1 --- )
  F      3FF 0 DO DUP I + DUP C@
 10    translate SWAP C! LOOP DROP ;
 11
 12 \ Expexts source destin scr TOS
 13  : PNSCOPY      ( n1 n2 --- )
 14    SWAP BLOCK DUP trnsblk SWAP
 15   BLOCK 400 CMOVE UPDATE FLUSH ;
 16
 17
 18  EDITOR DEFINITIONS
 19
 1A  : PNS      EDLQ SCR @ BLOCK
 1B         trnsblk UPDATE EDT  UL ;
 1C
 1D  FORTH DEFINITIONS
 1E  : DR2  800 + ;
 1F    ;S

SCR # 40
  0 ( FORMATTED LIST PROG. 1/5 )
  1
  2  VOCABULARY FORMY   IMMEDIATE
  3  FORMY   DEFINITIONS
  4   BASE @ OCTAL 40 CN SPACBYT 54
  5 CN COMCHR : IARRAY 0 VARIABLE -2
  6  ALLOT ; : 0> DUP 0= IF DROP  0
  7 ELSE  0< 0= THEN ;
  8 0 VARIABLE INDENT 106 CN FCONS
  9 111 CN ICONS 0 VARIABLE TLFLG
  A 0 VARIABLE KERKNT 100 CN MAXLIN
  B : NXSPACE >R 1+ >R 0   R> R> DO
  C SPACBYT I C@ = IF DROP I LEAVE
  D THEN LOOP ; : NXNSPACE >R 1+ >R
  E 0 R> R> DO SPACBYT I C@ = 0= IF
  F
 10  DROP I LEAVE THEN LOOP ; : GTNX
 11 WD DUP IF + OVER SWAP NXSPACE
 12 ELSE DROP THEN DUP IF OVER SWAP
 13 NXNSPACE DUP IF OVER OVER
 14 NXSPACE DUP IF OVER - ELSE DROP
 15 OVER OVER - 1+ THEN ELSE DUP
 16 THEN ELSE DUP THEN ; : TORLCR TL
 17 FLG @ IF CRLP ELSE CR THEN KERKN
 18 T 0SET ; : TORLY DUP 1+ KERKNT +
 19 ! TLFLG @ IF LYPE ELSE TYPE SPAC
 1A E THEN ; : DOIND INDENT @ 0> IF
 1B INDENT @ 0 DO 0 0 TORLY LOOP THE
 1C N ; : PRWORD DUP 1+ KERKNT @ + M
 1D AXLIN > IF TORLCR THEN KERKNT @
 1E 0= IF DOIND THEN OVER OVER TORLY
 1F  ; : 1SET 1 SWAP ! ;  -->

SCR # 41
  0 ( FORMATTED LIST PROG. 2/5 )
  1 : ( 51 WORD 6 ALLOT ;
  2 : IA IARRAY ; IA L1G 10  , ( :)
  3 ( CODE) ( ,CODE) ( SUBROUTINE)
  4  ( IA) ( IARRAY) ( LABEL) ( TBL)
  5  IA L2G 2 , ( ;) ( C;)
  6  IA L3G 2 , ( NXT,) ( NEXT,) IA
  7 L4G 6 , ( IF) ( DO) ( IF,)
  8   ( CASE) ( BEGIN) ( BEGIN,) IA
  9 L5G 3 , ( ELSE,) ( ELSE)
  A   ( WHILE) IA L6G 16 , ( THEN,)
  B ( THEN) ( END,) ( END) ( SOB,)
  C ( BACK) ( UNTIL) ( AGAIN) ( REPE
  D AT) ( ENDIF,)
  E   ( UNTIL,) ( LOOP) ( +LOOP) ( E
  F NDIF) IA L7G 7 , ( CONSTANT)
 10 ( IR)   ( VARIABLE)       ( CN)
 11 ( ARRAY) ( INTEGER) ( ORCON)
 12    IA L8G 1 , ( () IA L9G 3 , (
 13 LD,) ( ST,) ( LOAD)
 14 IA LAG 1 , ( ;CODE)
 15
 16 : CMPWORD DUP >R C@ OVER = R>
 17 SWAP IF >R OVER
 18   R> SWAP OVER DUP C@ DUP 4 > IF
 19  DROP 4 THEN 0
 1A   DO I OVER + 1+ C@ >R OVER R>
 1B SWAP I + C@
 1C   = 0= IF 0 LEAVE THEN LOOP
 1D
 1E   0= IF DROP DROP 0 THEN ELSE 0
 1F THEN ;   -->

SCR # 42
  0 ( FORMATTED LIST PROG. 3/5 )
  1 : GSCAN DUP @ SWAP 2+ SWAP 0 DO
  2 CMPWORD IF LEAVE
  3   0 ELSE 6 + THEN LOOP IF 0 ELSE
  4  DROP 1 THEN ;
  5 : NEWCR KERKNT @ IF TORLCR THEN
  6 ;
  7 : DUPBC OVER >R >R OVER R> SWAP
  8 R> ;
  9 : FINDCHAR SWAP >R SWAP 1+ R>
  A DO DUP I C@ =
  B   IF DROP I LEAVE 0 THEN LOOP IF
  C  0 THEN ;
  D : PRNEWL PRWORD TORLCR ;
  E : >= OVER OVER = IF DROP DROP
  F 1 ELSE > THEN ;   -->
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F

SCR # 43
  0 ( FORMATTED LIST PROG. 4/5 )
  1 : EL1G NEWCR INDENT 0SET PRWORD
  2 GTNXWD PRNEWL
  3   10 INDENT ! ;
  4 : EL2G NEWCR PRNEWL INDENT 0SET
  5 ;
  6 : EL3G NEWCR PRNEWL ;
  7
  8 : EL4G NEWCR PRNEWL 2 INDENT +!
  9 ;
  A : EL5G NEWCR -2 INDENT +! PRNEWL
  B  2 INDENT +! ;
  C : EL6G NEWCR -2 INDENT +! PRNEWL
  D  ;
  E : EL7G PRWORD GTNXWD PRNEWL INDE
  F NT 0SET ;
 10 : EL8G DUPBC 51 FINDCHAR DUP
 11
 12   IF SWAP DROP OVER - 1+ PRNEWL
 13 ELSE DROP PRWORD THEN ;
 14 : EL9G PRNEWL ;
 15
 16 : ELAG NEWCR 10 INDENT ! PRNEWL
 17 ;
 18 : ASSWRD DUP 4 >= IF OVER OVER +
 19  1- C@ COMCHR = IF
 1A    OVER DUP C@ ICONS =  SWAP 1+
 1B C@ FCONS = AND
 1C   IF 2 ELSE 1 THEN ELSE 0 THEN E
 1D LSE 0 THEN ;
 1E -->
 1F

SCR # 44
  0 ( FORMATTED LIST PROG. 5/5 )
  1 : PRCWRD L1G GSCAN IF EL1G ELSE
  2 L2G GSCAN IF EL2G ELSE
  3   L3G GSCAN IF EL3G ELSE L4G GSC
  4 AN IF EL4G ELSE L5G GSCAN
  5   IF EL5G ELSE L6G GSCAN IF EL6G
  6  ELSE L7G GSCAN IF EL7G
  7   ELSE L8G GSCAN IF EL8G ELSE L9
  8 G GSCAN IF EL9G ELSE
  9   LAG GSCAN IF ELAG ELSE ASSWRD
  A IF ASSWRD 2 =
  B   IF EL4G ELSE PRNEWL THEN ELSE
  C PRWORD THEN THEN THEN THEN THEN
  D THEN THEN THEN THEN THEN THEN ;
  E : FORLST TORLCR DUP TLFLG @ IF L
  F ISTLP ELSE
 10  TORLCR LIST THEN TORLCR TORLCR
 11 DUP BLK !
 12   BLOCK DUP 1777 + SWAP KERKNT 0
 13 SET INDENT 0SET 0 BEGIN GTNXWD
 14   DUP IF PRCWRD THEN DUP 0= END
 15 DROP DROP DROP BLK 0SET ;
 16 : ASTER TORLCR 40 0 DO 52 SP@ 1
 17 TORLY DROP LOOP TORLCR ;
 18 : FORSHW 1+ OVER DO ASTER I FORL
 19 ST TORLCR LOOP DROP ;
 1A FORTH DEFINITIONS : FLST FORMY T
 1B LFLG 0SET FORLST ; : FLSTLP FORM
 1C Y TLFLG 1SET FORLST FFLP ; : FSH
 1D W FORMY TLFLG 0SET FORSHW ; : FS
 1E HWLP FORMY  TLFLG 1SET FORSHW
 1F FFLP  ;         ;S

SCR # 45
  0 ( CASE                 1/1 )
  1    FORTH DEFINITIONS   HEX
  2  : CASE  ?COMP CSP @ !CSP 4 ;
  3         IMMEDIATE
  4  : OF   4 ?PAIRS COMPILE OVER
  5     COMPILE = COMPILE 0BRANCH
  6     HERE 0 , COMPILE DROP 5 ;
  7         IMMEDIATE
  8  : ENDOF  5 ?PAIRS COMPILE
  9     BRANCH HERE 0 , SWAP 2
  A     ~[COMPILE] ENDIF 4 ;
  B         IMMEDIATE
  C  : ENDCASE 4 ?PAIRS COMPILE DROP
  D     BEGIN SP@ CSP @ = 0= WHILE
  E     2 ~[COMPILE] ENDIF REPEAT
  F     CSP ! ;   IMMEDIATE
 10
 11   ;S
 12
 13
 14
 15
 16
 17
 18
 19
 1A
 1B
 1C
 1D
 1E
 1F