QS-Forth Screens#
SCR # 1
0 FORTH DEFINITIONS HEX
1
2 : L-ON 0780 ' CREATE ! ;
3 : L-OFF ' FIRST CFA
4 ' CREATE ! ; DECIMAL
5 : LOCATE ~[COMPILE] ' DUP
6 ~[ FENCE @ ] LITERAL >
7 IF NFA 2 - @ DUP 0=
8 IF 25 MESSAGE
9 ELSE DUP 0 <
10 IF 5 MESSAGE QUIT ELSE LIST
11 ENDIF ENDIF
12 ELSE 9 MESSAGE ENDIF ;
13
14 DECIMAL -->
15
SCR # 2
0 HEX
1
2 : CASE: <BUILDS ] SMUDGE
3 DOES> SWAP 2 * +
4 @ EXECUTE ;
5
6 6 USER S0 ( COMP STK ORG )
7 8 USER R0 ( RET STK ORG )
8
9 : UPDATE PREV @ @ 8000 OR PREV
10 @ ! ;
11
12 : DCX DECIMAL ;
13
14 DECIMAL -->
15
SCR # 3
0 ( STACK WORDS )
1
2 : .S ( PEEK AT STACK )
3 S0 @ SP@ - 2 / 1 -
4 IF SP@ 2 - S0 @ 2 -
5 DO I @ . -2 +LOOP
6 ELSE ." STACK EMPTY "
7 CR ENDIF ;
8
9 : 2DUP OVER OVER ;
10
11 : LOAD-ED 30 LOAD ;
12 : LOAD-ASM 58 LOAD ;
13 : LOAD-IO 6 LOAD ;
14 DECIMAL -->
15
SCR # 4
0 ( TEXT LINE ) HEX
1
2 : TEXT ( TEXT --> PAD )
3 HERE C/L 1+ BLANKS WORD HERE
4 PAD C/L 1+ CMOVE ;
5
6 : LINE ( ADR OF LINE-->STK )
7 DUP FFF0 AND 17 ?ERROR
8 SCR @ (LINE) DROP ;
9 : INVON FF 0668 C!
10 FF 06BE C! ;
11 : INVOF 7F 0668 C!
12 7F 06BE C! ;
13 : BELL 06BE C@ FF 06BE C!
14 FD EMIT 06BE C! ;
15 INVOF DECIMAL -->
SCR # 5
0 ( HDUMPER ) HEX
1 : HXOT <# # # #> TYPE ;
2 : HPRT C@ 7F AND DUP
3 20 < IF DROP 2E THEN
4 SPACE 1B EMIT EMIT SPACE ;
5 : ADDR <# # # # # #> TYPE ;
6 : DUMP ( ADDR CNT ) CR
7 HEX 1 - 08 / 1+
8 0 DO DUP 0 ADDR SPACE
9 8 0 DO DUP I + C@ 0
10 HXOT SPACE LOOP CR
11 4 SPACES
12 8 0 DO DUP I + HPRT LOOP
13 08 + CR LOOP DROP ;
14 : U. 0 <# #S #> TYPE SPACE ;
15 DECIMAL ;S
SCR # 6
0 FORTH DEFINITIONS
1 ( CIO CALL CHEATER ) HEX
2 ." I/O MODULE LOADING..." CR
3 CREATE JSRCIO ( CALL TO )
4 ( CH #6 )
5 B5 C, 00 C, ( LDA TOS )
6 86 C, B5 C, ( STX XSAVE )
7 A2 C, 60 C, ( LDX #$60 )
8 20 C, C4 C, E4 C, ( JSR )
9 A6 C, B5 C, ( LDX XSAVE )
10 E8 C, E8 C, ( CLR STK )
11 4C C, DF C, 0A C, ( 0A )
12
13 SMUDGE
14
15 DECIMAL -->
SCR # 7
0 ( IOCB CONTSTANTS ) HEX
1
2 60 VARIABLE IO#
3
4 : IO#@ IO# @ + ;
5
6 : CHANID 340 IO#@ ;
7 : CDEV# 341 IO#@ ;
8 : CCMD 342 IO#@ ;
9 : CSTAT 343 IO#@ ;
10 : BUFADR 344 IO#@ ;
11 : BUFLEN 348 IO#@ ;
12 : CAUX1 34A IO#@ ;
13 : CAUX2 34B IO#@ ;
14
15 DECIMAL -->
SCR # 8
0 ( IOCB COMMANDS ) HEX
1
2 04 CONSTANT INOP
3 08 CONSTANT OUTOP
4
5 : #-> ( ASSIGNS I0CB # )
6 10 * DUP IO# !
7 ' JSRCIO 5 + C! ;
8
9 0 VARIABLE "K" -2 ALLOT
10 4B C, 3A C, 9B C,
11
12 0 VARIABLE "S" -2 ALLOT
13 53 C, 3A C, 9B C,
14
15 DECIMAL -->
SCR # 9
0 ( IOCB CONT )
1 HEX
2 0 VARIABLE "P" -2 ALLOT
3 50 C, 3A C, 9B C,
4
5 0 VARIABLE "C" -2 ALLOT
6 43 C, 3A C, 9B C,
7
8 0 VARIABLE "E" -2 ALLOT
9 45 C, 3A C, 9B C,
10
11 : CKSTAT CSTAT C@ DUP 80 AND
12 IF 7F AND 21 + DUP ?ERROR
13 ELSE DROP ENDIF ;
14 DECIMAL -->
15
SCR # 10
0 ( OPEN IOCB )
1 HEX
2 ( "K" INOP 0 I0CB# OPEN )
3
4 : OPEN #-> ( IOCB# )
5 03 CCMD C! ( OPEN CMD)
6 CAUX2 C! ( 0 USUAL )
7 CAUX1 C! ( IN/OUT )
8 BUFADR ! ( -> K: )
9 JSRCIO ( SET TO 6)
10 CKSTAT ; ( ERROR? )
11
12
13 DECIMAL -->
14
15
SCR # 11
0 ( GET A CHAR TO STACK ) HEX
1 ( GET ... ASCII TO STACK )
2
3 : GET #-> 0 ( DUMMY )
4 07 CCMD C! ( GET CHAR )
5 0 BUFADR ! ( 0 -> A )
6 JSRCIO CKSTAT ;
7
8 : PUT #->
9 0B CCMD C! ( PUT CHAR )
10 0 BUFADR ! ( 0-> A )
11 JSRCIO CKSTAT DROP ;
12 HEX
13 : CLOSE #->
14 0C CCMD C! JSRCIO
15 CKSTAT ; DECIMAL -->
SCR # 12
0 ( PRINTER WORDS )
1
2 : PRON 4 CLOSE
3 "P" OUTOP 0 4 OPEN ;
4
5 : PROF 4 CLOSE
6 "E" OUTOP 0 4 OPEN ;
7
8 -->
9
10
11
12
13
14
15
SCR # 13
0 ( VOL,DIST,FREQ,VOICE, SND )
1 HEX
2 : SOUND 0232 C@ 07 AND
3 D20F C! 0 D208 C!
4 DUP 3 > IF
5 ." ILLEGAL CHAN" ABORT ENDIF
6 2 * D200 + >R >R 10 * OR
7 EF AND
8 100 * R> OR R> ! ;
9
10
11 : XSND D208 D200 DO
12 0 I C! LOOP ;
13 DECIMAL
14 -->
15
SCR # 14
0 ." GRAPHICS LOADING..." CR
1 ( ALL USE CH # 6 )
2 : GRN 6 OPEN ;
3 : GR. ( MODE 7 SPLIT )
4 6 CLOSE >R
5 "S" OUTOP 16 OR R> GRN ;
6
7 : GR.16 6 CLOSE >R "S"
8 OUTOP R> GRN ; HEX
9
10 : SETCOLOR DUP 4 > IF
11 ." ILLEGAL COLOR"
12 . . . ELSE
13 02C4 + >R 10 * OR
14 R> C! ENDIF ;
15 DECIMAL -->
SCR # 15
0 ( PLOT DRAWTO ) HEX
1 : CKER CSTAT C@ 8D = IF
2 ." RANGE ERROR "
3 QUIT ELSE CKSTAT ENDIF ;
4
5 : DRAWTO ( Y,X,C ) 02FB C!
6 54 C! 55 ! 6 #->
7 11 CCMD C! ( DRAW)
8 0 BUFADR ! JSRCIO CKER ;
9
10 : PLOT >R OVER OVER OVER
11 OVER DUP 0= IF 2+ ENDIF 1 -
12 5A C! 5B ! I DRAWTO R>
13 DRAWTO ;
14 DECIMAL -->
15
SCR # 16
0 ( POS. GR." ) HEX
1 : POS. 54 C! 55 ! ;
2
3 : GRTYPE -DUP IF OVER +
4 SWAP DO I C@ 6 #-> 0B
5 CCMD C! 0 BUFADR ! JSRCIO
6 CKER DROP LOOP ELSE
7 DROP ENDIF ;
8 : GR(.") R COUNT DUP 1+ R>
9 + >R GRTYPE ;
10
11 : GR." 22 STATE @ IF COMPILE
12 GR(.") WORD HERE C@ 1+
13 ALLOT ELSE WORD HERE COUNT
14 GRTYPE ENDIF ; IMMEDIATE
15 DECIMAL ;S
SCR # 19
0 (ERROR MESSAGES )
1 EMPTY STACK
2 DICTIONARY FULL
3 INCORRECT ADDRESS MODE
4 NAME NOT UNIQUE
5 LOCATE OUT OF RANGE
6 DISK OUT OF RANGE
7 FULL STACK
8 DISK ERROR !!
9 IN BOOT
10
11
12
13
14
15 QS FORTH VER 1.0 3/27/81
SCR # 20
0 ( ERROR MESSAGES )
1 COMPILATION ONLY, USE IN DEF
2 EXECUTION ONLY
3 CONDITIONALS NOT PAIRED
4 INCOMPLETE DEFINITION
5 IN PROTECTED DICTIONARY
6 USE ONLY WHEN LOADING
7 OFF CURRENT EDIT SCREEN
8
9 NOT COMPILED FROM DISK
10 # OPERAND > $FF
11 ILLEGAL USE OF Z-PAGE
12 ILLEGAL ADDR MODE
13
14
15
SCR # 21
0 ( IOCB ERRORS )
1 BREAK ABORT
2 IOCB OPEN
3 NONEXISTENT DEVICE
4 IOCB WRITE ONLY
5 INVALID COMMAND
6 DEVICE NOT OPEN
7 BAD IOCB #
8 IOCB READ ONLY ERROR
9 EOF
10 TRUNCATED RECORD
11 DEVICE TIMEOUT
12 DEVICE NOT ACKNOWLEDGE CMD
13 SERIAL BUS FRAMING ERROR
14 CURSOR OUT OF RANGE
15 SERIAL BUS FRAME OVERRUN
SCR # 22
0 SERIAL CHECKSUM ERROR
1 DEVICE ERROR
2 BAD SCREEN MODE #
3 FUNCTION NOT SUPPORTED
4 SCREEN MODE EXCEEDED MEMORY
5
6
7
8
9
10
11
12
13
14
15
SCR # 23
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SCR # 24
0 ( SET COLD START )
1
2 FORTH DEFINITIONS
3
4
5 HEX
6 ' FORTH 4 + @ C +ORIGIN !
7 HERE 1E +ORIGIN !
8 VOC-LINK @ 20 +ORIGIN !
9 HERE 1C +ORIGIN ! ( FENCE)
10 HERE 600 - 80 / 2+
11 601 C! ( BOOT CNT )
12 DECIMAL ;S
13
14
15
SCR # 25
0 ( BOOTMAKER )
1 HEX
2 0 VARIABLE BOOTSTART
3
4 : MAKEBOOT
5 600 BOOTSTART !
6 HERE BOOTSTART @ - 80 / 2+
7 1 DO
8 BOOTSTART @ I 0 R/W
9 80 BOOTSTART +! LOOP ;
10
11
12
13 DECIMAL ;S
14
15
SCR # 26
0 ( MEMORY REF POINTER SET )
1 HEX
2
3 : MEMSET
4 02E5 @ ( FETCH HI LIMIT )
5 DUP
6 ' LIMIT !
7 420 -
8 DUP ' FIRST !
9 DUP USE ! PREV !
10 COLD ; ;S
11
12
13
14
15
SCR # 30
0 FORTH DEFINITIONS
1 VOCABULARY EDITOR IMMEDIATE
2 ( EDITOR CONT ) HEX
3 : WHERE ( PRINT ERROR )
4 DUP B/SCR / DUP SCR !
5 ." SCR # " DECIMAL . SWAP
6 C/L /MOD C/L * ROT BLOCK +
7 CR C/L TYPE CR HERE C@ -
8 SPACES 5E EMIT ~[COMPILE]
9 EDITOR QUIT ;
10
11 EDITOR DEFINITIONS
12 CR ." EDITOR LOADING..."
13
14 -->
15
SCR # 31
0 ( EDITOR CONT ) HEX
1 : -MOVE ( BLOCK ADR->LINE )
2 LINE C/L CMOVE UPDATE ;
3
4
5 : E ( ERASE LINE )
6 LINE C/L BLANKS UPDATE ;
7
8 : S DUP 1 - 0E DO I LINE I
9 1+ -MOVE -1 +LOOP E ;
10 : /R PAD 1+ SWAP -MOVE ;
11 -->
12
13
14
15
SCR # 32
0 ( EDITOR CONT )
1 : CLEAR SCR ! 10 0 DO FORTH
2 I EDITOR E LOOP ;
3
4 : COPY B/SCR * OFFSET @ +
5 SWAP B/SCR * B/SCR OVER
6 + SWAP DO DUP FORTH
7 I BLOCK 2 - ! 1+ UPDATE
8 LOOP DROP FLUSH ;
9
10 : D 0F DUP ROT DO I 1+ LINE
11 I -MOVE LOOP E ;
12
13
14 : P 1 TEXT /R ;
15 -->
SCR # 33
0 ( DUPLICATE )
1 0 VARIABLE EBLK ( ENDING BLK )
2 0 VARIABLE SBLK ( STARTIN BLK )
3 0 VARIABLE PSBLK
4 : DISP ( ->DEST ADR IN FRE RAM )
5 PSBLK @ B/BUF * HERE + ;
6
7 : GTPAR ( SET UP DO AND PSBLK )
8 EBLK @ SBLK @ 0 PSBLK ! ;
9
10 : MVIN ( MOVE BLKS INTO RAM )
11 GTPAR DO I BLOCK DISP
12 B/BUF CMOVE 1 PSBLK +!
13 LOOP ;
14 DECIMAL -->
15
SCR # 34
0 : MOVOT ( WRITE RAM TO DISC )
1 GTPAR OFFSET @ + SWAP OFFSET
2 @ + SWAP DO I BUFFER DISP
3 SWAP B/BUF CMOVE 1 PSBLK +!
4 UPDATE FLUSH LOOP ;
5
6 : DUPLICATE ( STARTSCR ENDSCR )
7 1+ B/SCR * EBLK ! B/SCR *
8 SBLK ! EBLK @ SBLK @ -
9 ' FIRST 1+ C@ DP 1+ C@ -
10 2 * 2 - > IF ." TOO MANY "
11 QUIT ENDIF CR MVIN
12 ." INSERT DESTINATION DISK
13 " CR ." RETURN TO CONTINUE "
14 KEY DROP CR MOVOT ;
15 DECIMAL -->
SCR # 35
0 ( ATARI FORTH EDITOR ) HEX
1
2 0 VARIABLE COL ( USR COL PTR )
3 0 VARIABLE LIN ( USR LIN PTR )
4
5
6 : EDLIST ( SPEC LIST FOR ED )
7 7D EMIT
8 DECIMAL CR DUP SCR !
9 ." SCR # " . 10 0 DO
10 CR I 3 .R I SCR @ .LINE
11 LOOP CR ;
12
13
14 -->
15
SCR # 36
0 ( ATARI ED OS ACCESS WORDS ) HEX
1
2 : ONCUR 0 02F0 C! ;
3
4 : OFCUR 1 02F0 C! ;
5
6 DECIMAL -->
7
8
9
10
11
12
13
14
15
SCR # 37
0 ( SMOVE ) DECIMAL
1
2 : SMOVE ( SOURCE DEST # TOMV )
3 CR FLUSH EMPTY-BUFFERS
4 ." CAUTION !!! " CR
5 >R 2DUP SWAP
6 ." MOVE " DUP . ." THRU " R +
7 1 - . ." -->" DUP . ." THRU "
8 R + 1 - . SPACE ." Y OR N" CR
9 R> KEY 89 = IF
10 0 DO OVER I + OVER I +
11 COPY LOOP DROP DROP
12 ELSE QUIT ENDIF ;
13 DECIMAL -->
14
15
SCR # 38
0 ( LFCUR RTCUR ) HEX
1 : (LFCUR) 1E EMIT ;
2 : (RTCUR) 1F EMIT ;
3 DECIMAL
4 : RTCUR OFCUR COL @ 31 =
5 IF 31 0 DO (LFCUR) LOOP
6 0 COL ! ELSE (RTCUR)
7 1 COL +! ENDIF ONCUR ;
8
9
10 : LFCUR OFCUR COL @
11 IF (LFCUR) -1 COL +!
12 ELSE 31 0 DO (RTCUR) LOOP
13 31 COL ! ENDIF ONCUR ;
14
15 DECIMAL -->
SCR # 39
0 ( UPCUR DNCUR ) HEX
1 : (DNCUR) 1D EMIT ;
2 : (UPCUR) 1C EMIT ;
3
4 : DNCUR OFCUR LIN @
5 F = IF F 0 DO (UPCUR)
6 LOOP 0 LIN !
7 ELSE (DNCUR) 1 LIN +!
8 ENDIF ONCUR ;
9
10 : UPCUR OFCUR LIN @
11 IF (UPCUR) -1 LIN +!
12 ELSE F 0 DO (DNCUR)
13 LOOP F LIN ! ENDIF
14 ONCUR ;
15 DECIMAL -->
SCR # 40
0 ( HOME CURSOR ) HEX
1
2 : LINCLEAR ( CURSOR->LIN 0 )
3 LIN @ DUP IF 0 DO UPCUR
4 LOOP ELSE DROP ENDIF ;
5 : COLCLEAR ( CURSOR->COL 0 )
6 COL @ DUP IF 0 DO LFCUR
7 LOOP ELSE DROP ENDIF ;
8
9 : HOMECUR ( CURSOR->HOME )
10 LINCLEAR COLCLEAR ;
11
12
13 : CURSHOW (RTCUR) (LFCUR) ;
14
15 -->
SCR # 41
0 ( ED CONT EDCR...TAB ) DECIMAL
1
2 : BUFF-> ( BUFFER CHAR ADR )
3 LIN @ SCR @ (LINE)
4 DROP COL @ + ;
5
6 : EDCR ( SPECIAL CR FOR ED )
7 COL @ IF COLCLEAR ENDIF
8 DNCUR ;
9
10 5 VARIABLE (TAB)
11 : TAB 31 COL @ - (TAB) @ <
12 IF COLCLEAR ELSE
13 (TAB) @ COL @ OVER MOD -
14 0 DO RTCUR LOOP ENDIF ;
15 DECIMAL -->
SCR # 42
0 ( ED CONT EDMIT ) HEX
1
2 : ((EDEMIT))
3 EMIT (LFCUR) RTCUR
4 COL @ 0= IF DNCUR ENDIF ;
5
6 : TOBUFF ( SENDS CHAR TO LINE )
7 DUP ( CHAR )
8 BUFF-> C! ;
9
10 : EDMIT DUP 20 < IF BELL DROP
11 ELSE TOBUFF ((EDEMIT))
12 ENDIF UPDATE 0 ;
13 DECIMAL -->
14
15
SCR # 43
0 ( LIN PRINT WORDS ) DECIMAL
1 0 VARIABLE TEMP1
2 0 VARIABLE TEMP2
3
4 : PTRSAV COL @ TEMP1 !
5 LIN @ TEMP2 ! ;
6
7
8 : LINOUT
9 COLCLEAR BUFF-> 32
10 TYPE 32 COL ! COLCLEAR ;
11
12 : CURREST COLCLEAR TEMP1 @
13 -DUP IF 0 DO RTCUR LOOP
14 ENDIF ;
15 -->
SCR # 44
0 HEX
1
2 : REFRESH ( OUTPUT ALL LINS)
3 PTRSAV
4 10 LIN @ DO LINOUT
5 DNCUR LOOP TEMP2 @
6 -DUP IF 0 DO DNCUR LOOP
7 ENDIF ;
8
9 DECIMAL -->
10
11
12
13
14
15
SCR # 45
0 ( CHAR INSERT WORDS )
1
2 : MOVRT DUP OVER 1 - C@
3 SWAP C! 1 - ;
4
5 : XPAND ( SPREAD LIN AT CUR )
6 PTRSAV ( SAVE POINTERS )
7 31 COL @ -
8 DUP BUFF-> + SWAP 0
9 DO MOVRT LOOP
10 BL SWAP C!
11 LINOUT CURREST UPDATE ;
12
13 DECIMAL -->
14
15
SCR # 46
0 ( CHAR INSERT WORDS )
1
2 : MOVLF DUP OVER 1+ C@
3 SWAP C! 1+ ;
4
5 : CPAND ( SHRINK LIN AT CUR )
6 PTRSAV ( SAVE POINTERS )
7 BUFF-> 31 COL @ - 0
8 DO MOVLF LOOP
9 BL SWAP C! ONCUR
10 LINOUT CURREST UPDATE ;
11
12 DECIMAL -->
13
14
15
SCR # 47
0 HEX
1
2 : BKSP COL @ IF LFCUR ENDIF 20
3 EDMIT LFCUR DROP ;
4 : FINI ( WRAP-UP ON ESC )
5 HOMECUR UPCUR (DNCUR)
6 CR (UPCUR) ;
7
8 : INSL ( SPREAD AT LIN # )
9 LIN @ S REFRESH ;
10
11 : DELL ( DELETE LINE )
12 LIN @ D REFRESH ;
13 DECIMAL -->
14
15
SCR # 48
0 ( EDITOR LOOK UP TABLE ) HEX
1 EDITOR DEFINITIONS
2 10 VARIABLE XTABLE
3 1C C, ( UP ) 1D C, ( DN )
4 1E C, ( LF ) 1F C, ( RT )
5 7D C, ( HM ) 7E C, ( BS )
6 0D C, ( CR ) 9D C, ( IL )
7 9C C, ( DL ) FF C, ( XL )
8 FE C, ( CL ) 7F C, ( TB )
9 9F C, ( ST ) 9E C, ( CT )
10 FD C, ( BL ) DECIMAL
11 : KEYLIT 0 XTABLE @ 0
12 DO DROP DUP I XTABLE 2
13 + + C@ = IF LEAVE ENDIF
14 I LOOP ;
15 DECIMAL -->
SCR # 49
0 ( CONTROL WORDS )
1
2 CASE: CONTROL
3 UPCUR DNCUR LFCUR RTCUR
4 HOMECUR BKSP EDCR INSL
5 DELL XPAND CPAND TAB
6 BELL BELL BELL EDMIT ;
7
8 : +KEY ( LIST BACK ONE )
9 SCR @ DUP 1 >
10 IF 1 - ENDIF EDLIST ;
11
12 : *KEY SCR @ 1+ EDLIST ;
13
14 -->
15
SCR # 50
0 ( ED MODE CONTROL ) HEX
1
2 : ED (UPCUR) (RTCUR) (RTCUR)
3 (RTCUR) (RTCUR)
4 INVON
5 1 COL ! F LIN ! HOMECUR
6 CURSHOW BEGIN KEY
7 DUP 1B XOR WHILE
8 KEYLIT CONTROL DROP
9 CURSHOW REPEAT FINI
10 INVOF
11 DROP ;
12 DECIMAL -->
13
14
15
SCR # 51
0 ( ED MODE CONTROL ) DECIMAL
1 : 0-> DROP 0 ;
2 : L ( LIST SCREEN,WAIT )
3 INVON EDLIST
4 BEGIN KEY
5 DUP 27 XOR WHILE
6 DUP 43 = IF +KEY 0-> ENDIF
7 DUP 42 = IF *KEY 0-> ENDIF
8 DUP 45 = IF ED 0-> ENDIF
9 IF BELL ENDIF REPEAT
10 DROP INVOF ;
11
12 FORTH DEFINITIONS
13 : KL ~[COMPILE] EDITOR EDITOR
14 SCR @ L ; DECIMAL -->
15
SCR # 52
0 ( INVERSE ADDR, CNT ) HEX
1 EDITOR DEFINITIONS
2 : INTYPE INVON 0 DO I OVER +
3 C@ 80 OR EMIT LOOP
4 DROP INVOF ;
5
6 : <L> ( T IF BETWEEN L#'S )
7 DUP SBLK @ < 0= SWAP
8 EBLK @ > 0= AND ;
9
10 : IN.LINE (LINE) INTYPE ;
11
12 DECIMAL -->
13
14
15
SCR # 53
0 ( ATARI FORTH EDITOR ) HEX
1
2 : INVLIST 7D EMIT
3 DECIMAL CR DUP SCR !
4 ." SCR # " . 10 0 DO
5 CR I 3 .R I SCR @
6 OVER <L> IF IN.LINE ELSE
7 .LINE ENDIF LOOP CR ;
8
9 0 VARIABLE STBLK
10 0 VARIABLE SBBLK
11 0 VARIABLE SSCR
12 0 VARIABLE DTBLK
13 0 VARIABLE DBBLK
14 0 VARIABLE DSCR
15 DECIMAL -->
SCR # 54
0
1 : FROM ( SCR LO HI L# )
2 15 MIN
3 DUP STBLK ! EBLK !
4 DUP SBBLK ! SBLK ! DUP
5 SSCR ! INVLIST ;
6
7 : /H LINE PAD 1+ C/L DUP PAD
8 C! CMOVE ;
9
10 : SS->DD
11 STBLK @ 1+ SBBLK @ - 0
12 DO SSCR @ SCR ! I SBBLK @ +
13 /H DSCR @ SCR ! I DBBLK @ +
14 /R LOOP ;
15 DECIMAL -->
SCR # 55
0
1
2
3
4 : INTO DUP SBLK ! DBBLK !
5 DSCR ! STBLK @ SBBLK @ -
6 DBBLK @ + DUP EBLK ! DTBLK !
7 SS->DD DSCR @ INVLIST
8 CR ." OK? Y/N " KEY
9 89 = IF KL ELSE
10 EMPTY-BUFFERS ENDIF ;
11
12
13 ;S
14
15
SCR # 58
0 ( ATARI ASSMBLER 9/19/80 )
1 FORTH DEFINITIONS
2 VOCABULARY ASSEMBLER IMMEDIATE
3 ' ASSEMBLER CFA
4 ' ;CODE 8 + !
5 10 VARIABLE ADRMD
6 : CODE: ?EXEC !CSP
7 10 ADRMD ! CREATE
8 ~[COMPILE] ASSEMBLER ;
9 IMMEDIATE
10
11 : C; CURRENT @ CONTEXT !
12 ?EXEC ?CSP SMUDGE ;
13 IMMEDIATE
14 CR ." ASSEMBLER LOADING..."
15 -->
SCR # 59
0 ( MSC LABELS TO FIG CODE )
1
2 ASSEMBLER DEFINITIONS
3
4 HEX
5 47 +ORIGIN CONSTANT NEXT
6 3DF +ORIGIN CONSTANT PUSH0A
7 B5 CONSTANT XSAVE
8
9 0 VARIABLE INCLS
10 DECIMAL -->
11
12
13
14
15
SCR # 60
0 -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SCR # 61
0 ( OPCODE TABLE ) HEX
1 0 VARIABLE OPTBL ( FF ILLEGAL )
2 ( A:) FF C, FF C, FF C, FF C,
3 08 C, FF C, FF C, FF C,
4 ( 16) 0C C, 08 C, 08 C, 08 C,
5 0C C, 0C C, 0C C, 0C C,
6 ( 8A) 04 C, 00 C, 00 C, 00 C,
7 04 C, 04 C, 04 C, 04 C,
8 ( # ) 08 C, FF C, FF C, FF C,
9 FF C, 00 C, 00 C, 00 C,
10 ( 16,X) 1C C, 18 C, FF C, FF C,
11 1C C, FF C, FF C, 1C C,
12 ( 16,Y) 18 C, FF C, FF C, FF C,
13 FF C, FF C, 1C C, FF C,
14
15 DECIMAL -->
SCR # 62
0 ( '8,X' ) HEX
1 00 C, FF C, FF C, FF C,
2 FF C, FF C, FF C, FF C,
3 ( '8',Y)
4 10 C, FF C, FF C, FF C,
5 FF C, FF C, FF C, FF C,
6 ( 8,X )
7 14 C, 10 C, FF C, 10 C,
8 14 C, FF C, FF C, 14 C,
9 ( 8,Y )
10 FF C, FF C, 10 C, FF C,
11 FF C, FF C, 14 C, FF C,
12
13
14
15 DECIMAL -->
SCR # 63
0 ( TABLE FETCH WORDS ) DECIMAL
1
2 : ?TABLE
3 ADRMD @ 8 *
4 INCLS @ +
5 OPTBL 2 + + C@ ;
6
7 HEX
8 : AMDCK ?TABLE
9 DUP FF = 1C ?ERROR ;
10 ( ADR MODE ERROR )
11 DECIMAL -->
12
13
14
15
SCR # 64
0 HEX
1 : ?HI DUP FF00 AND ;
2
3 DECIMAL
4 : ADRMD! ADRMD ! ;
5
6 : 16/8 ?HI
7 IF ( LONG ADR )
8 1
9 ELSE ( SHORT ADR )
10 2 ENDIF ADRMD ! ;
11
12 : #: ?HI 26 ?ERROR
13 3 ADRMD! ;
14
15 : A: 0 ADRMD! ; DECIMAL -->
SCR # 65
0
1 : ,X ?HI ( TEST FOR 16/8 )
2 IF ( 16 )
3 4
4 ELSE 8
5 ENDIF ADRMD! ;
6
7
8
9 -->
10
11
12
13
14
15
SCR # 66
0
1 : ,Y ?HI
2 IF ( 16 OR 8 )
3 5
4 ELSE
5 9
6 ENDIF ADRMD! ;
7
8
9
10 -->
11
12
13
14
15
SCR # 67
0 : ,X)
1 ?HI 27 ?ERROR
2 6 ADRMD! ;
3
4 : ),Y ?HI 27 ?ERROR
5 7 ADRMD! ;
6
7 -->
8
9
10 ( 1B IS Z-PAGE ERROR MSG )
11
12
13
14
15
SCR # 68
0 ( CODE BUILDERS AAA CLASS )
1
2 : BLDCD INCLS ! ( CLASS )
3 10 ADRMD @ =
4 IF SWAP 16/8 SWAP ENDIF
5 AMDCK OR C, ( TEST MODE )
6 ADRMD @ IF ( NOT A: )
7 ?HI IF , ELSE C, ENDIF
8 ENDIF 10 ADRMD ! ;
9
10 : T3A <BUILDS SWAP C, C,
11 DOES>
12 DUP C@ SWAP 1+ C@
13 BLDCD ;
14 -->
15
SCR # 69
0 ( OPCODE FOLLIES ) HEX
1 ( AAA CLASS INCLS 0 )
2
3 61 0 T3A ADC, 21 0 T3A AND,
4 C1 0 T3A CMP, A1 0 T3A LDA,
5 01 0 T3A ORA, E1 0 T3A SBC,
6 81 0 T3A STA, 41 0 T3A EOR,
7
8 ( BB1 CLASS INCLS 1 )
9
10 C6 1 T3A DEC, E6 1 T3A INC,
11
12 ( BBX CLASS INCLS 2 )
13
14 86 2 T3A STX,
15 DECIMAL -->
SCR # 70
0 ( BBY CLASS 3 INCLS ) HEX
1
2 84 3 T3A STY,
3
4 ( BBB CLASS 4 INCLS )
5
6 02 4 T3A ASL, 42 4 T3A LSR,
7 22 4 T3A ROL, 62 4 T3A ROR,
8
9 ( CC CLASS 5 INCLS )
10
11 E0 5 T3A CPX, C0 5 T3A CPY,
12
13
14
15 DECIMAL -->
SCR # 71
0 ( DDDX CLASS 6 INCLS ) HEX
1
2 A2 6 T3A LDX,
3
4 ( DDDY CLASS 7 INCLS )
5
6 A0 7 T3A LDY,
7
8
9
10
11
12
13 DECIMAL -->
14
15
SCR # 72
0 : IMPL <BUILDS C, ( IMPLIED )
1 DOES> C@ C, ; HEX
2
3 00 IMPL BRK, 18 IMPL CLC,
4 D8 IMPL CLD, 58 IMPL CLI,
5 B8 IMPL CLV, CA IMPL DEX,
6 88 IMPL DEY, E8 IMPL INX,
7 C8 IMPL INY, EA IMPL NOP,
8 48 IMPL PHA, 8A IMPL TXA,
9 98 IMPL TYA, 08 IMPL PHP,
10 68 IMPL PLA, 28 IMPL PLP,
11 40 IMPL RTI, 60 IMPL RTS,
12 38 IMPL SEC, F8 IMPL SED,
13 78 IMPL SEI, AA IMPL TAX,
14 A8 IMPL TAY, BA IMPL TSX,
15 9A IMPL TXS, DECIMAL -->
SCR # 73
0 ( REL BRANCH ) DECIMAL
1
2 HEX
3 : RBR <BUILDS C,
4 DOES> C@ C, 3 C, ;
5
6 ( BRANCH AROUND JMP )
7
8 90 RBR BCC, B0 RBR BCS,
9 F0 RBR BEQ, 30 RBR BMI,
10 D0 RBR BNE, 10 RBR BPL,
11 50 RBR BVC, 70 RBR BVS,
12 DECIMAL -->
13
14
15
SCR # 74
0 ( JMP & BIT ) HEX
1
2 : JMP, 4C C, , ;
3
4 : (JMP), 6C C, , ;
5
6 : JSR, 20 C, , ;
7
8 : BIT, ?HI IF 2C C, ,
9 ELSE 24 C, C,
10 ENDIF ;
11
12
13
14
15 DECIMAL -->