ANTIC FORTH#
The data "
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 ." 0x1F0x1F0x1F0x1F0x1F0x1F0x1C" 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 ." 0x1C}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 ." 0x1C0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1F0x1FH
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
" is not legal for a JDOM character content: 0x001f is not a legal XML character.