2K 𩓍ЩЍЩR     S `I0ݭ  s4`D3BULL#2#2)@10V11p1(12Y(LI: HʕhiLm H `EXECUTŐ LBRANCȨ eHȱehLT 0BRANC iLR (LOOP  h[L (+LOOPHH}h}hL(DOOHHHH_LR % nHLK 4 [DIGIԇ80HLM  LLHLM H(FIND s Q)?/ȱQ %_ʀieeHLK ǠȱеHLK ENCLOS$ s 88LR LR D8Upǔ666uuuuLR CMOV s LR LU666ǐuuuLR U" *66866L]dAN_5H5LM OtHLM XOҊUHULM SPHLK SPLR jRPLR ;hhLR iLEAVLR >RHHLR RhhLR %HLK 0;ȔLR 60P*LR UbHLhHLh~PIHLhHLhuuLR zDuuuuL[]MINU8LR DMINU8LoOVE HLK DRO]SWA'HLM DU?HLK +NuuL[9TOGGLoUL[K~HLM ICLR YL[CL[!i%s|f?9HHieLR CONSTAN? 9HȱLK VARIABL 9iHeLK USE 9eHeLK zkB sC/ #LINK"FIRSfLIMI {B/BUB/SC[HIME+ORIGI8 TIJ WIDTJ WARNINJFENCJD VOC-LINJBLJcIJOUUSCJ?OFFSEJICONTEXJ ^CURRENJ"kSTATJ$.BASJ&DPJ( FLJ*xCSJ,RJ.HLJ07INPJ2PHYSOFJ41e2mHER|ALLOTGLmCe?+-9%|RO%%SPAC~"7-DU= = TRAVERSŏuuL]LATES]]Ms|fk |  ` % aCFm-CNFu-8 PFeuLFm-!CSR?ERRO%  1?COM~|9k 8L?EXE~|k 8c?PAIR-k 8x?CS|-k 8?LOADIN2|9k 8COMPILR=| ]~qk ~SMUDGǭk mHEk DECIMAk  (;CODE;COD9) >#EXPEC] %M"=9 f]f  QUER|k x?]:2| *e2L]:2|e-]9 i  FIL s LR 8ERAS]OBLANK~HOL8 L|PAk DWOR2|v  |:|%"k ":L -#97BITӋ s )LR ((NUMBER=| &|n]| eL NUMBE]]S=k -9=8 =~- =k .-]8]  HASe-]==m-FIN~>f|C=9 f|s|- s|C>(ABORT~cERRO|N # ? !2|v :|%NoID,k k _= -,%,k ]=,=k ]%#gCREAT|k `m8] i k !g=|Tk 9=k me-k ms| Cm-  |%m-m 8OMPILEi9]8 qLITERA~| 8 DLITERA~| %?STACk |%`e8k |`k 8INTERPREi ~||     |   CIMMEDIATk @mVOCABULARg)| )]Ms|fk m 8  wfFORTȃ@10T;12H2O322DEFINITIONf|sk )>QUI]2"uM~|9  oK IABORǭ"fig-FORTH 1.4S]8 .NCOLIJ# " #     ةlLGS->=N+N "D+N xAB=!DAB=%MI  E %PMA  | %h%ǂM  7%7%M F#7 #%%/MO%MO*/MO*%M/MO]# % <PTA1  ALLOT-V @PRE1G3AL1L"EMPTY-BUFFERl|k b|M]fk k ADR]Yk DR8 Yk BFN]%l|k b|M=f|9 fk  %f%k BUFFE==9 l|#|#|#k =b|- '=k - k k -=b|9  b|k b|=b| - 5b|k k ] b||b||]O$]b|k b|b|| BLOCY|=b||-b|k 9r 8& =b|k 9 b||eO$eb|k   b|m|](LINE Dž.LINd!e8 #]8 rMESSAG| Kv A=k E k -m k Y|-k @ k @# MSG # <(LOA2|:|]:2M:2!--]:2| -2LhICCBa"ICLHl"ICAD "TCIO֊" VHLK KE|"k f"eq"" ~=k 9 ]?"EMIe#"Ck "?TERMINA]"TYPv k f"q"|"" ~  #DECMAD#&*&   ee8 (iiǕLR "SIύ# YLR #SECI8 8 k ]m9 k @ k 8 k 8 k 18 ]#v k !;#DIk 8 #8 |k 8 #DDI8 8 #8 |8 8  R/ k R k W8 %8 ]8  =u]8 %k %=k ] E8 k r8 k ] ] 8 %k ]M=B#$  Dk ] mk ]M='$ "|k k ]M=$ !FLUSl|k b|Mfk k ] f|f|]O$efk k "UPDATk b|k "i9]8&%FORGEs|f|-k 8%=|`k 8)|# ` .|=) ]M=mfk =m|=l` % |v9 m-K$BAC- 6&BEGIRes%ENDIRm -%"$THE_&u&DMu&LOOu ;&#+LOOu;&Y&UNTIe ;&&EN&w"AGAIe ;&G&REPEAG&m-_&&I ] m&ELSm ] %m_&m%WHIL'&SPACE]lv ]Mg &<,7Y'#|, -'SIGSN k -'|(Sk | k k 0'#'  r9 z'D.% F}'''' -`'#'D]'g%.')(|k 9  ](I'|<((LIS"=MSCR # <(]M"fu,(gfM|! "'INDE"%M"fu,(g]f!#  e(TRIAuuu %M"fj( "k !"k ":(VLIS]M=f|fk |ff ]Mff| eM  ` % v 4]Mffǜ| 9 =|ff v g "(ASSEMBLE҃/../2///-XSAVUpI)PO]*POPTW["*PUM /*PUSK *NEXR SETUs *INDE1  tx} ǀ,)MOD1D*.]*O*e**MEm*,u**,8 *9*X8 *[*)8 **ǩ8 * BO*]*SE*m+RP*8 *UPMOD *8 ]9 8 *Le*8 ]v ]M= |]9+CPgw*++BRK++CLC++CLD+غ+CLI+X+CLV+*DEX++DEY+*INX++INY+Ȑ*NOP+*PHA+H,PHP+&,PLA+h2,PLP+(+RTI+@J,RTS+`+SEC+8b,SED+n,SEI+x+TAX+,TAY+,TSX+,TXA+,TXS+,TYA+;+M/CPg w=8 ] 8 *L 8 ]B+B+ *"u*a**8 ] *8 ]8 |   *,ADC,`nR-AND, nz,CMP,n,EORǬ,@n,LDA,n)ORA,nn-SBC,n-STA,l`-ASL, -DEC, -INC, -LSR,A V,ROL,ǃ,! -ROR,a -STX,.CPX,%.CPY,-LDX,A.LDY, 3.STY, .JSR,k.JMP,@y.BIT, .BEGINe|-UNTILie--IF]m.ENDIFim  % -%.ELSEme~.% -%mO.THEN. /END.,NO8 ].C>,0f/0M/>x/VP]/Cs|fi'CODi?)*%o/xe/hihiHHLR /xec/hhl@/EXEC8 /Gp. 8 / )1+e%L01e-]!0SE]%&2=/0H=8 | 8 0 8 7"/CH=8 ]I8 P08 ]P0r0CHv0M0H=8 ]8 8 ]v0v00H|0(TBgw"0ALLO=0ARRAg0w0:|:)NO9('U](0C 0("=@0D18 ">1DEPT8 -m1."v1 (8 8 v1m-C0-%Mf[(8  e!51SAVENFA]M8 8 f8 |8 "fC0 1DžV1.42 R'SЍ`1#SECK%2CALLD:2 SHLK p1DKI8 8 8 82=N !ERROR 8 ]|%R'SЍ`1r/8 e9 | ]92#SECL2CALLD2 SHLK 1DKI8 8 8 2=N1MSBYT]8  %2LSBYT8 ]2>=$38 % 31IO1PI3IO1S3IOC8 T]l8 =W38 @M303.IOg w|M3|]3ICDNσ33ICCO̓33ICST33ICBÃ33ICPT̃33ICBL̃33I1CA؃3 3I2CA؃3 92CI4HY3 VhLR Y(Ge,4Y3 VHLK &4GE8 3*44CLOS8 34>4OPEu333 4:( SCREEN INDEX REV H 1/1 ) ;S ̠Š٠AzӠϠΠҠΠӠ̠Ā00/00 SCREEN INDEX 401/01 SOURCE CREDITS@ T02/06 ERROR MESSAGES` 07/0A SYSTEM SETUP / BOOTMAKER 0B/0E SUPERCLONE <0F/0F DECOMP DISSEMBLER DATA@ @FXŠҠ`s10/10 EDITOR LOADER 11/14 SCREEN EDITOR 115/17 LINE EDITOR@ V18/1A EDITOR ADDITIONS` 1B/22 DECOMP/STACKDSP/CDMP/PATCH23/24 COPIES/DUPLICATE *25/26 FIND@ V27/27 1.4S KERNEL MODS` o28/2E ASSEMBLER 2F/2F DECUS MODS 130/30 ̠Ġ@ n31/35 HARDWARE/GRAPHICS/SOUND 36/36 PON/POFF 37/38 RS232C SUPPORT 839/39 DISPLAY LIST STUFF@ T3A/3A PLAYER/MISSILE` r3B/3B LINK/SETPHYS 3D/3E LPWORDS <40/44 FORMATTED LIST PROGRAM@ S45/4A CHARSETS/CASE` 4B/4F FORTH79/VAR/SETSYS/BDUMP * fig-FORTH MODEL * e |Through the courtesy of CF ZFORTH INTEREST GROUPi wP. O. BOX 1105 [ SAN CARLOS, CA. 94070G YImplemented on thei wATARI 800/400  by* 6Steve CalfeeM T1/26/81m t4/01/82  PETER LIPSON/ROBIN ZIEGLER- 44/10/82I XHARALD STRIEPEh y5/5/82 - 10/16/82  XL Mods - John Stanley 18Jun85% 1RELEASE 1.4S6 ;REV.HE [WITH COMPILER SECURITYe {VARIABLE LENGTH NAMES SWITCHABLE TOP OF STACK DISPLAY% =DECOMPILER/DISSASSEMBLERB ENHANCED SCREEN EDITOR & FAST EDIT WORDS, BASE BORDER DISPLAY ENHANCED SYSTEM SET UP/BOOTMKR' :DRIVE 2 LINK/UNLINKE ^Further distribution muste include the above notice. Abort.@ RIOCB already open. Non-existant device.@ SIOCB is write-only. !Invalid command (for this device)@ XDevice or file not open. Bad IOCB #@ QIOCB is read-only End Of File@ PTruncated Record Device Timeout@ aDevice NAK (Negative AcKnowledge) Serial Bus input framing error@ SCursor out of range Serial Bus data-frame overrun@ eSerial Bus data-frame checksum error. Device-done error@ ^Read-after-write compare error #Function not implemented in handler@ PInsufficient RAM Fm0( ERROR MESSAGES ) 135 159 9 8 7 10 ;S@ Kempty stack dictionary full@ Zhas incorrect address mode isn't unique disc range ??@ Lfull stack ! disc error ! THIS IS IT@ HHELP ME! ( ERROR MESSAGES )@ ccompilation only, use in definition execution only@ Wconditionals not paired definition not finished@ Win protected dictionary use only when loading@ Zoff current editing screen declare vocabulary@ \outside allocated file space Cwriting off current line @ Ustring stack empty !! !( TARGET COMPILER ERROR MESSAGES2 ?WFR-79JUN02 ) #below lower bound of virtual memory@ gdisc compiler assembly error in mode of can't find in TARGET@ Mtarget redef. !T: error, is it paired with T; ?@ [above virtual memory bounds  ( SYS/BOOTMKR 82AUG22 1/4 )# :FORTH DEFINITIONS HEXC KSAVENFAsa HERE 1C +ORIGIN ! ( FENCE ) ! :HERE 1E +ORIGIN ! ( DP )a HERE DUP FENCE ! 0 +ORIGIN - ! 980 / 1+ CONSTANT #SECTb CODE CALLDK XSAVE STX, E453  JSR, TYA, PHA, ( STATUS )" 9XSAVE LDX, PUSH JMP, C; : DKIO 301 ! ( CMD, DRIVE # )" 930A ! ( SECT. # ) 304 !B ( RAM BUFFER ) CALLDK ( DKHND) DUP 0< IF ." ERROR " 0FF AND  BASE @ SWAP DECIMAL" <. BASE ! QUIT ENDIF DROP ;@ \: WTSEC SWAP 304 ! 130 300 !` ( verif $57->) 50 302 C! SECIO ; : RDSEC SWAP 304 ! 130 300 !) <52 302 C! SECIO ;@ : FORMAT ." FORMAT DRIVE " DUP . ." -ARE YOU SURE?" 0 PAD ! PADC 1 @EXPECT PAD C@ 59 ( Y) = IF 2100 OR PAD 0 ROT DKIO ELSEH SDROP THEN ;a 0 VARIABLE BOOT ( ->CODE ) --> ( SYS SET UP/BOOTMKR 2/4 ) : MAKEBOOT FLUSH EMPTY-BUFFERS ." INSERT NEW DISK, TYPE Y" CR 0 PAD ! ( DEFAULT ) PAD 3 EXPECT PAD C@ 59 = IF 1 52 C! CR! ." Writing sectors:" CR CR BOOT @ 1 DUP . WTSEC #SECT 0 DO I 80 * +ORIGIN I 2 + WTSEC I 2 + = . LOOP 0 52 C! CR ." BOOT COMPLETED" CR THEN ; ( BOOT CODE:)A YHERE BOOT ! ( PT TO US )a ASSEMBLER 1FF , 480 , ' V1.4S ,2 #SECT # LDA, 0= IF, 0 +ORIGIN , 1 , ENDIF, N STA,6 <2C8 C@A [# LDA, 2C8 STA, D01A STA,d 2C6 C@ # LDA, 2C6 STA, D018 STA,! 52 # LDA, 302 STA, 48C LDA, 30A STA, 48D LDA, 30B STA, ( SCT1 ) 1 # LDA, 301 STA, 48A LDA, 304 @STA, 48B LDA, 305 STA, ( ORIGIN) BEGIN, 30A INC, 0= IF, 30B INC,G ENDIF, E453 JSR, 303 LDA, .A ASL, CS IF, RTS, ( FRETURN ) =ENDIF, 304 LDA, 80 # EOR, 304 STA, 0< NOT IF, 305 INC,A ENDIF, ( BUMP PTR.) N DEC, 0= UNTIL, 48A LDA, 0A STA, 48B LDA,? 0B STA, E C@ # LDA, 2E7 STA, F C@ # LDA, 2E8 STA, CLC, RTS,C HFORTHb e--> ( BACKUP HES 82AUG15 3/4 ) ( 35F ARRAY BUCD BLK @ BLOCK A0 + BUCD 35F CMOVE CODE bg E474 JMP, C; : BACKUP BUCD 480 35F CMOVE 480 C ! STOF bg ; ) --> j8iR'Sx867X /E /XB / / / /1    I  Lȍ /ɠ R    /  ` /! 8  /Q P  `詀R@ YLii    R `Я` /m L / / L  ` LwPpM`W7 ` / Lfig-FORTH 1.4S FAST BACKUP Vers.1.2 BY H.E.STRIEPE 1982 START - commence I/O SELECT - write with verify OPTION - REBOOTInsert source disk and press START, or select OPTION to REBOOTReading SOURCE disk...Insert destination disk, press START, or SELECTWriting DESTINATION disk...*, DUPLICATION SUCCESSFUL 2*49*S DISK I/O ERROR!TRY AGAIN X*Z`*x BREAK KEY INTERRUPT! ~*( scr# A BOOTMKR/SYS 4/4 )A ]: DoFORget ( forgets below )f p' TEXT NFAv ( FENCE ) C FENCE ! 0 FORGET TEXT ;A `: SETSYS ( SETS RESET PARAM )f LMARGN @ DUP ( MARGINS )  LSB ' V1.4S 4 + C!& 9MSB ' V1.4S 8 + C!F ^COL1 @ DUP ( COLORS )f yLSB ' V1.4S C + C!  MSB ' V1.4S 11 + C!& .COL4 C@3 >( BORDER )F ]LSB ' V1.4S 16 + C! ; ! @: HOOK ( hooks your assembly )G `( routine into WARMSTRT )g x( ->use HOOK word ) [COMPILE] ' ' V1.4S 1+ ! ;A I: UNHOOKN `( restore vector )g zE4C0 ' V1.4S 1+ ! ; b CR ." system words now available" CRA C;S ( SIO DISK HNDLR 1/2 )" 2HX 0 DMACTL C!@ X: CLNDSP ." }" C 4 POS.f z." ҠŠ" ; : FORMAT PAD 0 ROT 2100 OR 40C FDIOM N;a : STATUS 4 308 ! 1 306 ! 2EA 0  ROT 5300 OR 40 DSIO SERR ;! ?: BAILOUT CONSOL C@ 2 AND 0= ;` c--> ( BADSEC WORDS ) TBL GRBGSECT 38A0 , B9 C, 8C , 99 C, 180 , 88 C, F710 , 60 C, 20 C, D76 , 390 , 4C C, 924 , z 20 C, E85 , 20 C, F32 , 20 C, E0A , 20 C, E8A , 20 C, FCD , 20 C, CCF , 57A9 , 85 , 3FA2 , 1370 , 2C C, 380 , F910 ,  DAA9 , 385 , CA C, F410 ,! F2FA9 , 85 , 4C C, B7D , 4C C, B87 ,` |40 ARRAY ZERO-SECT ZERO-SECT C80 ERASE! 4CODE SIO XSAVE STX,A ZE459 JSR, 0< IF, 1 # LDA,a {ELSE, 0 # LDA, ENDIF, PHA,  0 # LDA, XSAVE LDX, PUSH# *JMP, C;@ ]: 1ERR? IF ." CAN'T DOWNLOAD"b qCR ABORT THEN ; : 2ERR? IF ." CAN'T WRITE BAD"" w." SECTOR" CR ABORT THEN ; : BINIT 2001 301 ! ( DOWNLOAD TO D1: ) GRBGSECT 304 !  80 DUP 303 C! 308 ! 7 306 C!! 631 300 C! SIO 1ERR? ;B GBINIT` y: BADSEC 30A ! FF01 301 !  ZERO-SECT 304 ! 80 DUP 303" =C! 308 ! 7 306 C! 31 300 C!B MSIO 2ERR? ;a d--> ( SUPER-CLONE WORDS )! 2180 ARRAY BDSECTSA \: WSTRT ." PRESS START " CRb {BEGIN CONSOL C@ 1 AND END  BEGIN CONSOL C@ 1 AND 0= END" ]0 4D C! 5 A POS. ." DOING IT..." ; : GSRC 0 GR. 2 C 4 SE.c {10 8 POS. ." READING" ;  : GDST 0 GR. 2 3 4 SE.# ;10 8 POS. ." WRITING" ;A ]: RSOME ( START SECT., CNT )c g0 DOl I 80 * PAD + OVER  2 RDSEC FE AND BDSECTS I +# WHILE OVER  OVER ROOM @ MIN COPY-SOME# >ROOM @ - SWAP ROOM @ + SWAPC [REPEAT DROP DROP 0 GR. ;d g--> ( SUPER-CLONE WORDS 3/3 )E V180 ARRAY BDSECTSa : WSTRT ." PRESS " KEY  CR DROP ." Doing it " ;A N: CLNMSG CRc ." Source disk in Dr 2," CR ." Destin disk in Dr.1," CR ;A ]: RSOME ( START SECT., CNT )c g0 DOl I 80 * PAD + OVER  2 RDSEC FE AND BDSECTS I +# WHILE OVERC \OVER ROOM @ MIN COPY-SOMEc ROOM @ - SWAP ROOM @ + SWAP  REPEAT DROP DROP CR BELL ;! -: BADM WSTRTF 2D1 1 DO I BADSEC LOOP ; 0 GR. GS DMACTL C! BASE ! ;S !iD i@ @oiB $i PiF*4iH H*i:Di WDHd@@x@uBxxPFjtHxHzxHD $H@c@lHBcTHc$PHF*4HHcH0H:DHcDJL@P\rB{T`d'PFjlHptz|D$@@@E PF(5HHJ:<@d`BZD]B`@Z@]@ZB`Z]PZFh`HZH]J3Z`Z]> DECOMP DISASSEMBLER STUFF << DO NOT MOVE FROM THIS SCREEN ! ( SCREEN ED. LOAD 1.4S 1/1 ) !(/ 23 LOAD ( copies/backup )D W25 LOAD ( FIND WORD] ^)d 3D LOAD ( PRINTER WORDS )  4D LOAD ( SYS WORDS )$ 73F LOAD ( PNS STUFF= >)B X: VERIFY 57 245E C! ;b y: NOVERIFY 50 245E C! ;  : SYS 0 DMACTL C! 7 LOAD 22$ [DMACTL C! ; : CLONE B LOAD ; CODE GOBOOT E477 JMP, C;b s: GO STACKON GS ; C : ZV VLIST ;" 9: WARNON 1 WARNING ! ;B Y: WARNOFF 0 WARNING ! ;` b;S ( SCREEN EDITOR DLI 1/4 ) !(/ ( SCREEN ED. DLSETMOD 2/4 ) !(0 =JDS 18JUN85 )C UEDITOR DEFINITIONSc 28 ARRAY EDBF C ARRAY DLSTMP  TBL EDLST 82 C, 40 C, 202 ,' >202 , 02 C, 40 C, 47 C,F [EDBF , 41 C, DLST @ ,` 0 GR. DLST @ 14 + DLSTMP C CMOVE : DLSET 200 @ TO EDVEC ' EDLI 200 ! EDBF TOPFLAG @ 0= IF " UPP" ELSE " LOW" THEN SYPE " ER HALF SCR # " SYPE SCR @ 0 <# #S #> SYPE " " SYPE DROP! 3DLST @ EDLST C + !A ZEDLST DLST @ 14 + E CMOVEa kFF D40E C!o v." }" ;  208 @ VARIABLE KBDVC! *CODE KCHK. ?54 LDA, 10 # CMP,F _0< IF, D209 LDA, C # CMP,f |0= IF, PLA, RTI, THEN,  THEN, KBDVC ) JMP, C;! ?CODE EDKIS SEI, 209 LDA, C4 #E ^CMP, >= IF, KBDVC 1+ STA,e 208 LDA, KBDVC STA, THEN, ' KCHK LSB # LDA, 208 STA,% @' KCHK MSB # LDA, 209 STA,N qCLI, NEXT JMP, C; CODE EDKIQ SEI,  KBDVC LDA, 208 STA,' @KBDVC 1 + LDA, 209 STA,N _CLI, NEXT JMP, C;c f--> ( SCREEN ED. MOD 1.4S 3/4 )+ <( HES 82AUG18 )A SEDITOR DEFINITIONSa : EDCLR COL1 @ COL3 @ 0 GR. C COL3 ! COL1 ! CHRST C@' 2CHBAS C! ;A G: EDLSR ^EDCLR COLSETb 0 DMACTL C! DLSET 22 DMACTL C! EDKIS 2203 LMARGN !( ?COL4 C@ DUP F0 AND SWAPG ]8 + F AND + COL0 C! ;a : EDLQ 8F D40E C! EDVEC 200 ! EDKIQ ' V1.4S 4 + C@ 52 C! '" V1.4S 8 + C@ 53 C! 0 DMACTL C! DLSTMP DLST @ 14 + C CMOVE 22 DMACTL C! FF D40E C! CR ; A _: .L# L#FLG IF 10 0 DO DUP 0 Id POS. I + . LOOP THEN DROP 3  12 POS. ;! &: ULL, ?DUP TOPFLAG ! SCR @E OEDLS EDLQS ]BLOCK EDLSp 3 0 POS. + 200  1 DUP 2F0 C! 2FE C! TYPE% 2CR ." DOIT" 6AS 2B2 ! ; : UL 0 ULL 0 .L#c 0 DUP 2FE C! 2F0 C! 6 PN ;  : LL 200 ULL 10 .L## =0 DUP 2FE C! 2F0 C! 7 PN ;G J--> ( SCREEN EDITOR 1.4S 4/4 )" 4EDITOR DEFINITIONS@ F: DOITd 10 0 DO -1 2B2 ! 3 I POS.  SCR @ BLOCK I 20 * +$ :TOPFLAG @ + ICBAL ! 20D YICBLL ! GET DROP LOOPi oUPDATE  TOPFLAG @ 0= IF UL ELSE LL$ +ENDIF ;@ `: FORTH EDLQ [COMPILE] FORTH ;  EDITOR DEFINITIONS &: COPY* 8FORTH COPY ;@ X: FLUSH FORTH FLUSH ;` n: FH FLUSH ; ?: L#ON 1 TO L#FLG BASE @ > 8 IFL [HEX THEN DOIT ; : L#OFF 0 TO L#FLG DOIT ;A RFORTH DEFINITIONS` b;S ( LINE EDITOR 1/3 ) =( TEXT, LINE, WHERE USED INA GEDITORK W7/7/80-SRC )` xFORTH DEFINITIONS HEX @ F: TEXTX y( ACCEPT FOLLOWING TEXT TO PAD *)  `HERE C/L 1+ BLANKS WORD HERE PAD C/L 1+ CMOVE ; : #OFLINES B/BUF B/SCR * C/L / ; C: LINE N( RELATIVE TO SCR, LEAVE ADDRESS OF LINE *) DUP #OFLINESZ MINUS AND IF ." NOT ON SCREEN" ABORT EEENDIF ( KEEP ON THIS SCREEN )& =SCR @ (LINE) DROP ; : WHERE ?( PRINT SCREEN # AND IMAGE OF ERROR *)D oDUP B/SCR / DUP SCR ! ." SCR # " .  9SWAP C/L /MOD C/L * ROT BLOCK + CR C/L TYPED CR HERE C@ - SPACES 5E EMIT [COMPILE] EDITOR QUIT ;@ C--> ( LINE EDITING COMNDS 2/3 )" 4EDITOR DEFINITIONS@ {: -MOVE ( MOVE IN BLOCK BUFFER ADDR FROM-2, LINE TO-1 *)  LINE C/L CMOVE UPDATE ;@ D: HLZ x( HOLD NUMBERED LINE AT PAD *)  .LINE PAD 1+ C/L DUP PAD C! CMOVE ;@ D: BLY v( ERASE LINE-1 WITH BLANKS *) LINE C/L BLANKS UPDATE ;@ D: SLX w( SPREAD MAKING LINE # BLANK *)  DUP 1 - ( LIMIT ) ?#OFLINES 2 - ( FIRST TO MOVE )F qDO I LINE I 1+ -MOVE -1 +LOOP BL ; : DL 3( DELETE LINE-1, BUT HOLD IN PAD *)C \DUP HL #OFLINES 1 -c kDUP ROT  +DO I 1+ LINE I -MOVE LOOP BL ;@ i: CL ( COPY LINE-2 OF SCREEN-1 TO PAD ) SCR @ >R SCR ! HL R> SCR ! ;@ C--> ( LINE EDITING COMNDS 3/3 ) !(2 DWFR-790105 ) : RLa ( REPLACE ON LINE-1, FROM PAD ) PAD 1+ SWAP -MOVE ; : $ ;( PUT FOLLOWING TEXT ON LINE-1 )F T1 TEXT RL ; @ C: %S z( INSERT TEXT FOLLOWING AFTER LINE-1 *)  1 TEXT 1+ DUP SL RL ;@ D: ILK |( INSERT PAD AFTER LINE-1 ) 1+ DUP SL RL ; C O: TL ( TYPE LINE BY #-1, SAVE ALSO IN PAD *)d pDUP . ." $ "  DUP C/L * R# ! HL% =PAD 1+ C/L TYPE CR ;c tFORTH DEFINITIONS @: COPY SWAP BLOCK SWAP BLOCK 400E YCMOVE UPDATE FLUSH ;` b;S ( VERS 1.4S MODS HES 1/3 )# 4FORTH DEFINITIONS8 ;HEXA |: HX HEX 93 2C8 C! ; DECIMAL : DX DECIMAL 68 712 C! ; 3 : BX BINARY 248 712 C! ; HEX : BS 0006 2C5 ! ;A S: WS 0A00 2C5 ! ;a s: GS D006 2C5 ! ;  : NS 94CA 2C5 ! ;# 5EDITOR DEFINITIONSA P: LE EDIT LL ;a p: UE EDIT UL ;  : N 8 PN SCR @ 1+ EDIT UL ;! <: P 4 PN SCR @ 1- EDIT UL ;A L: L SCR @Q ZEDIT UL ;` : T 4 PN 9 PN ALT @ @ EDIT UL ; : SL DUP SL 10 < IF UL ELSE, 5LL THEN ;c tFORTH DEFINITIONS : EDT [COMPILE] EDITOR ; 5: UE [COMPILE] EDITORE PEDITOR UE ;c tFORTH DEFINITIONS : LE [COMPILE] EDITOR% 0EDITOR LE ;C TFORTH DEFINITIONS` y: L& HEX ( fast load )  0 DUP WARNING ! DMACTL C!% 9LOAD 22 DMACTL C! ;a d--> ( FAST EDIT WORDS 2/3 ) 9( ZIEGLER/STRIEPE STUFF )B YFORTH DEFINITIONS HEX` |: L. LIST ; : L SCR @ LIST ; : N SCR @ 1+ LIST ; 3: P SCR @ 1- LIST ;@ Y: NL EMPTY-BUFFERS LIST ;` : SHOW 1+ SWAP DO I LIST LOOP ; W: LS [COMPILE] EDITOR 1 + SWAP 27 53 C! DO I EDITOR TL LOOP ; : SAVE-BUFFERS FLUSH ;` : ERASE-CORE EMPTY-BUFFERS ; : TRC NFA ID. ; 3: T ALT @ @ LIST ;@ ^CODE K XSAVE STX, TSX, 109 ,Xb LDA, PHA, 10A ,X LDA, XSAVE  LDX, PUSH JMP, 7C; : EMPTY 0 8 C! COLD ;C PD ARRAY CDATc o22 TEXT ... v.w"  PAD 1+ CDAT C CMOVE! :: DATE 1+ SWAP DO I BLOCKE \11 + CDAT SWAP C CMOVEf zUPDATE FLUSH LOOP ;  : NEWDATE CR ." DATE: " CDAT C$ ,TYPE ." 2;" QUIT ;A ^: DATE: 9B TEXT PAD 1+ CDAT Cc CMOVE ; EDITOR DEFINITIONS C : DATE SCR @ BLOCK 11 + CDAT$ !( ZIEGLER/STRIEPE V1.4S 3/3 )" 3FORTH DEFINITIONS@ S: N->T SCR C@ S->Dc k<# #S #>q r; : ZERO-BLOCK" 5SCR @ BLOCK DUP DUPB M400 20 FILL^ f" \ scr#k vempty block} 1/1 ;S " ROT SWAP CMOVE" 97 + N->T ROT SWAP CMOVEB PUPDATE FLUSH ;` {: LZERO 1+ SWAP DO I SCR ! ZERO-BLOCK LOOP ;" 4EDITOR DEFINITIONS@ L: ZERO-BLOCKc {EDLQ ZERO-BLOCK EDT UL ; : NUL EMPTY-BUFFERS UL ; 8: NLL EMPTY-BUFFERS LL ;@ _: LOAD FLUSH DEPTH 0= IF SCR @h sTHEN LOAD ; t: T. 9 PN 4 PN ALT @ @ EDIT LL ; : N. 9 PN SCR @ 1 + EDIT LL ; : P. 5 PN SCR @ 1 - EDIT LL ; : WIPE ZERO-BLOCK ; : DRAIN EMPTY-BUFFERS ; #: W' H."  to wipe, N to abort "Q `KEY 4E NOT = IFm xWIPE THEN ;  FORTH DEFINITIONS 7: DRAIN EMPTY-BUFFERS ;@ T: WIPE ZERO-BLOCK ;b d;S ( HIGH-LEVEL DISSASSEMBLER )" 3FORTH DEFINITIONSW iTASK DOG ' (;CODE)m zCFA CN .;CODE ' ;S CFA CN .;S (' BRANCH- 7CFA CN .BR@ I' 0BRANCHM XCFA CN .0BR` f' (DO)m wCFA CN .DO ' (LOOP) CFA CN .LOOP )' (+LOOP)- :CFA CN .+LOOP@ E' LITM XCFA CN .LITb f0D6Bq yCN .CLIT ' (.") CFA CN .(.") 6' TASK CFA @ CN .:@ I' DOG CFAM Z@ CN .DOES>` i' COMPILEm yCFA CN .COMP " 00 VARIABLE .IP` i' BLK CFAm x@ CN .USR ' .;S CFA @ CN .CON )' .IP CFA- 8@ CN .VARC E60Q XCN RTS,c e40q xCN RTI, ! $--> ( HIGH-LEVEL DISSASSEMBLER )@ U: PRNAME 2+ NFA ID. ; C=: STRNG ( cfa--cfa prnt strng) DUP .(.") = IF PRNAME .IP @B yDUP COUNT ROT OVER + 1+ .IP ! TYPE CR R> DROP ENDIF ; 3 1: LIT? ( cfa--cfa5 prints lit) DUP .LIT = IF PRNAME .IP @ @ . CR 2 .IP +! R> DROP ELSE DUP < .CLIT = IF ." CLIT " DROP .IP @ C@ . CR 1 .IP +! R> DROPB OENDIF ENDIF ; : COMP? DUP .COMP = IF PRNAME" N.IP @ @ PRNAME CR 2 .IP +! R> DROP ENDIF ; : PROMPT 0 2FE ! ." ok " CR ;@ : ENDEF ( cfa--cfa aborts@end) DUP .;CODE = OVER .;S = OR IF  PRNAME CR PROMPT QUIT ENDIF ;@ : BRNCH ( cfa--cfa prnts dst) DUP .BR = OVER .0BR = OR OVER  .LOOP = OR OVER .+LOOP = OR" bIF PRNAME ." to " .IP @ DUP @ + . CR 2 .IP +! R> DROP ENDIF ;f i--> ( DECOMP DISSASSEMBLER PBL 82)E \F CN OPTAB ( STD. $F )c 200 CN OPOFF 300 CN MODOFF `: 1OP .IP @ DUP HH ." : " C@ 1 .IP +! DUP CHH SPACE ; ( --op) M: INDX ( off base--addr) + B/BUF /MOD [ OPTAB B/SCR * ] LITERAL + BLOCK + ; J: OPLUK ( op--opind modind #op) DUP + 0 INDX DUP C@ SWAP 1+ C@ 40 /MOD ; [: OPANDP ( #bytes--) DUP -DUP IF .IP @ C@ CHH SPACE 1 - IF .IP @ 1+ C@ CHH ELSE 2 SPACESa zENDIF ELSE 5 SPACES ENDIF _ ." - " -DUP IF 1 - IF .IP @ @ 2 ELSE .IP @ C@ 1 ENDIF .IP +! HH SPACE ELSE 5 SPACES ENDIF ; -: MODP ( modind--) MODOFF INDX 2 TYPE SPACE ;` : OPP ( opind--) OPOFF INDX 3  TYPE ." , " CR ;@ C--> V( DECOMP DISSASSEMBLER PBL 82) : BR? ( mode #op--mode) OVER 10 = IF .IP @ DUP C@ CHHa c."h - " DUP C@ DUP 80 AND IF: FF00 OR ENDIF 1+ + HH .IP +! SPACE ELSE OPANDP ENDIF ;@ `: 1LINE 1OP OPLUK BR? MODP OPP ; h: JMPEX ( --f test endef jmps) .IP @ C@ 4C = IF .IP @ 1+ @ DUP ASSEMBLER NEXT = OVER W 1 - = OR OVERw POP = OR C OVER PUSH = OR OVER PUT = OR! USWAP POPTWO FORTH = OR DUP IF ENDIF ELSE 0 ENDIF ; E6: ;CEND .IP @ C@ DUP RTS, = SWAP RTI, = OR JMPEX OR ;` : 1WRD BEGIN 1LINE ;CEND UNTIL  1LINE ; : CSEE 1WRD ;@ s: DIS .IP ! 1WRD ; : NDIS .IP ! 0 DO 1LINE LOOP ; =: ISCODE .IP @ DUP 2 - @ = IFB ]." primitive " CR 1WRD ELSEb |.IP @ CFA @ DUP 2 - @ SWAP  .IP ! .;CODE = IF" 3." ;CODE word" CR9 =ELSEB ^." odd entry point" CR ENDIFb s1WRD ENDIF ; --> ( HIGH-LEVEL DISSASSEMBLER )@ : ISCOL ( -- or ) .IP @ DUP CFA @ .: - IF DUP | CFA @ DUP .DOES> = IF .IP @ @ .IP ! ." DOES> word" CR DROP 1 ELSE SWAP DROP DUP .CON = IF ." CONSTANT : " .IP @ @ HH  CR DROP ELSE DUP .USR = IF" <." USER variable " DROP CRB ELSE .VAR = IF ." VARIABLE : " .IP @ DUP HH @ ." = " HH CR 8 ELSE ISCODE ENDIF ENDIF ENDIF 0 ENDIF ELSE 1 ENDIF ; : NXTW 2 SPACES .IP @ DUP HH" =." : " @ 2 .IP +! 2 SPACESB ^LIT? BRNCH COMP? STRNG ENDEFc lPRNAME CRp q; :: FETCHW [COMPILE] ' .IP !B \ISCOL IF NFA C@ 40 AND IFb ." immediate" CR ENDIF ELSE PROMPT QUIT ENDIF ;@ s: DECOMP 1 2FE C! FETCHW BEGIN NXTW ?TERMINAL IF  PROMPT QUIT ENDIF AGAIN ;@ M: ZZ DECOMP ;a c;S ( CONSTANT INFO DISPLAY 1/3 )" 3FORTH DEFINITIONS` lHEX 4E LOAD ?TBL XTRN 40 C, 0 C, 20 C, 60 C,` tCODE ASCINT BOT LDA, 8 .A ROL, .A ROL, .A ROL, .A ROL, 03 # AND, TAY, BOT LDA,A W9F # AND, XTRN ,Y ORA,a wBOT STA, NEXT JMP, C; =: SYPE ( addr, straddr, cnt )B UOVER + SWAP DO I C@b zASCINT OVER C! 1+ LOOP ; CHERE DUP 3F + FFC0 AND -SWAP - ALLOT` l28 ARRAY BUF W )TBL DLIST@ [5070 , 42 C, BUF , 1 C, 0 , HERE 2 - CN DLPTCH@ C--> s( CONSTANT INFO DISPLAY 2/3 ) ' ABORT 6 + @ VARIABLE ABORT1 ' QUIT A + @ VARIABLE QUIT1 : INIT 0 DMACTL C!  DLST @ DUP C@ 1 -" 5IF DUP 3 + DLPTCH !B [1 OVER C! DLIST SWAP 1+ !b ELSE DROP THEN 22 DMACTL C! ; : DSPLY BUF " TOS->" SYPE >R! rASSEMBLER UP FORTH @ 6 + @ SP@ 10 + MIN SP@ BEGIN 2+ OVER OVER > WHILE R> OVER @  0 <# # # # # #>! BSYPE 1+ >R REPEAT DROP DROP R> "X gfig-FORTH 1.4S"k wSYPE DROP ; %: SSK) 6DSPLY INIT CRC BASE @ DUP A = IF 44 2C8 C! ELSE DUP 10 = IF 93 2C8 C! ELSE DCFA ' ABORT 6 + !B G' SSKM ^CFA ' QUIT A + !b {' FIX CFA ' 40 + ! ; #--> ( CONST. INFO. / CDUMP 3/3 ) *: STACKOFFD ZABORT1 @ ' ABORT 6 + !d zQUIT1 @ ' QUIT A + !  2C5 @ 2C8 C@ 0 GR.$ 22C8 C! 2C5 ! ;` q: STON STACKON ; : STOF STACKOFF ;@ R( HES V.2.0 82SEP9\ ) :  ( FETCHES LETTERS AND ! )  7E TEXT 10 0 DO DUP$ =PAD 1+ I + C@ SWAP I + C!D ]LOOP DROP PAD FIX QUIT ; : CDUMP ( adr1 adr2 --- )' :1 2FE C! 1+ SWAP DOD ZI HH ."  " I 10 0 DOd xDUP I + C@ EMIT LOOP  DROP SPACE 7E EMIT CR$ 710 +LOOP 0 2FE C! ;@ `: PATCH \ new old --- JAP AUG82d [COMPILE] ' CFA [COMPILE] '  `DUP >R ! ' ;S CFA R> 2+ ! ; \ Debugging ML rout HES17OCT82 CODE JMP \ INDIRECT JMP/ML DEBUGd BOT LDA, N STA, BOT 1+ LDA, C N 1+ STA, N ) JMP, C; @CODE JSR \ INDIRECT JSR/ML DEBUGD _XSAVE STX, ' JMP JSR, XSAVEd {LDX, POP JMP, C; ;S i( ONE DRIVE.DUPSCR/COPS1/2 ) ( by anonymous/HES 23jun82 ) 0 VARIABLE EBLK ( ENDING BLK ) 0 VARIABLE SBLK ( START. BLK )  0 VARIABLE PSBLK : DISP ( -> DEST ADR INFRE RAM ) PSBLK @ B/BUF * HERE 20 + + ; : GTPAR ( SET UP DO AND PSBLK ) EBLK @ SBLK @ 0 PSBLK ! ; [: MVIN ( MOVE BLOCKS INTO RAM ) GTPAR DO I BLOCK DISP B/BUF` wCMOVE 1 PSBLK +! LOOP ; @: MOVOT ( WRITE RAM TO DISK ) GTPAR OFFSET @ + SWAP OFFSET @ +` SWAP DO I BUFFER DISP SWAP B/BUF& CMOVE 1 PSBLK +! UPDATE FLUSH LOOP ;@ z: DUPLICATE ( STARTSCR--ENDSCR) 1+ B/SCR * EBLK ! B/SCR * SBLK ! EBLK @ SBLK @ -! 0FREE 20 - 400 /D [> IF ." TOO MANY " QUIT` mENDIF CR MVIN <." INSERT DESTINATION DISK " CR ." RETURN TO CONTINUE " KEY@ ODROP CR MOVOT ; a d--> ( COPIES HES 2/2 ) !() <82JUN18 / 82AUG14 )B SFORTH DEFINITIONS @ F: CPSTK tCR ." ? Incorrect screen range" CR QUIT ; : CPNT CR ." scr# " SWAP DUP .% ;." --> " SWAP DUP . ;@ `: CPMP EBLK @ SBLK @ - DUP PSBLKe y@ + PSBLK ! 1+ 0 DO  EBLK @ I - PSBLK @ I - CPNT% 0COPY LOOP ;@ _: CPMD EBLK @ SBLK @ - 1+ 0 DOe SBLK @ I + PSBLK @ I + CPNT COPY LOOP ; >: COPIES PSBLK ! EBLK ! SBLK !F ]EBLK @ SBLK @ < IF CPSTf THEN PSBLK @ SBLK @ > IF  CPMP ELSE CPMD& ;ENDIF CR ; IMMEDIATE a c;S a ( FIND V.1.1 1/2 ) <( by R.Mansfield/COMPUTE! )@ ^( adapt.&enhanced HES 82aug7 )b yFORTH DEFINITIONS HEX C" 40 VARIABLE 1STCHAR` |: ?CONSOL -2FE1 C@ 7 XOR ; {4: MATCH ( addr1 addr2 N --- F ) -DUP IF OVER + SWAPG WDO DUP C@ I C@ -h IF 0= LEAVE ELSE 1+ THEN LOOP& 9ELSE DROP 0= THEN ;@ X: CHECKIT ( addr --- F )g |PAD 1+ PAD C@ MATCH ; : HEADER& ;CR ." Searching for "F ^22 EMIT SPACE PAD 1+ PADf {C@ TYPE 22 EMIT CR CR  ." on scr #" ; ,: MARKSTRINGG ]( scr# addr --- scr# )e OVER BLOCK - C/L / CR DUP  CR CR ." Found on LINE#"% =CR CR . SPACE OVER .LINEE XCR CR CR ." scr#" ;` g: ?STCKk wDEPTH 2 < IF  0 59 PHYSOFF @ -% *ENDIF0 1;B E--> ( FIND 2/2 )A vCODE ?CHAR ( addr --- addr F ) 1 # LDA, SETUP JSR,  N )Y LDA, 1STCHAR CMP, 0=# =IF, 1 # LDA, PHA, 0 # LDA,C RPUSH JMP, THEN,c 0 # LDA, PHA, PUSH JMP, C; ! ): ONEBLK. ?( scr# addr --- )D RDUP 400 + SWAPf pDO I ?CHAR  IF I CHECKIT* ?IF I MARKSTRING ENDIFH MENDIFf qLOOP DROP ; ! @: GTWRD 22 WORD HERE DUP C@ 1+I YPAD SWAP CMOVE ;a : FIND ( scr#1 scr#2 text --- ) ?STCK GTWRD% @0 SCR ! PAD 1+ C@ 1STCHAR !E SHEADER 1+ SWAPf xDO I DUP DUP SPACE . BLOCK ONEBLK) 6?CONSOL IF CRI TLEAVE ENDIFf pLOOP CR CR  ." Search ended" CR ;" $;S ( VERS1.4S KERNEL ADD 1/1 ) !() DUP COUNT + >R COUNT ; : " COMPILE (") 22 WORD HERE C@d x1+ ALLOT ; IMMEDIATE C: DEPTH EA SP@ - 2 / ; @: .S CR DEPTH IF EA EA DEPTH 2 -E ^2* - SWAP DO I ? -2 +LOOPe sELSE 1 MESSAGE  ENDIF ; 8: SAVENFAs #LINKS 0 DOD ^1CFC 4 + I 4 * + @ 22 I 2*d o+ +ORIGIN !t zLOOP ;  ( >HES 82AUG21 ) CODE V1.4S ( DOSINI VECTOR )D ]E4C0 JSR, ( APPL.HOOK )d 0 # LDA, 52 STA, ( MARGN )  27 # LDA, 53 STA, ( " )$ ?6 # LDA, 2C5 STA, D0 # LDA,D _2C6 STA, 93 # LDA, 2C8 STA,n ( SCREEN COLORS )  RTS, C;c e;S ( FORTH-65 ASSEMBLER 1/6 )- <( WFR-79JUN03 )@ CHEX @VOCABULARY ASSEMBLER IMMEDIATE' ASSEMBLER 2 + DUP 20 +ORIGIN !T ^VOC-LINK !e {ASSEMBLER DEFINITIONS  ( LOCATE EXISTING REGISTERS )@ RFF CONSTANT XSAVEW g0FB CONSTANT Wk |0FD CONSTANT UP F8 CONSTANT IP )F0 CONSTANT N %( LOCATE EXISTING CODE PROCEEDURES )@ N' (DO) 0E +R _CONSTANT POPc ( FROM COMPUTATION STACK *) ' (DO) 0C + "CONSTANT POPTWO@ \' LIT 13 + CONSTANT PUT ' LIT 11 + CONSTANT PUSH@ ]' LIT 18 + CONSTANT NEXT '' EXECUTE NFA 11 - CONSTANT SETUPD G--> ( FORTH-65 ASSEMBLER 2/6 )- <( WFR-78OCT03 )C \0 VARIABLE INDEX -2 ALLOT o0909 , 1505 , 0115 , 8011 , 8009 , 1D0D , 8019 , 8080 , 0080 , 1404 , 8014 , 8080 , 8080 , 1C0C , 801C , 2C80 , # 22 VARIABLE MODEa : .A 0 MODE ! ; : # 1 MODE ! ;  : MEM 2 MODE ! ;! p: ,X 3 MODE ! ; : ,Y 4 MODE ! ; : X) 5 MODE ! ; : )Y 6 MODE ! ; : ) F MODE ! ; : BOT ,X 0 ; ( ADDRESS BOTTOM3 ;OF STACK? @)a : SEC ,X 2 ; ( ADDRESS SECONDC ITEM ON STACK )A Q: RP) ,X 101 ;p ( ADDRESS BOTTOM OF RETURN STACK ) # &--> ( UPMODE, CPU 3/6 )- <( WFR-78OCT23 ) ?: UPMODE IF MODE C@ 8 AND 0= IF 8 MODE +! ENDIF ENDIFE z1 MODE C@ 0F AND -DUP IF 0 DO DUP + LOOP ENDIF  OVER 1+ @ AND 0= ; +: CPU C@ C, MEM ;E y00 CPU BRK, 18 CPU CLC, D8 CPU CLD, 58 CPU CLI,  9B8 CPU CLV, CA CPU DEX, 88 CPU DEY, E8 CPU INX,E yC8 CPU INY, EA CPU NOP, 48 CPU PHA, 08 CPU PHP,  968 CPU PLA, 28 CPU PLP, 40 CPU RTI, 60 CPU RTS,E y38 CPU SEC, F8 CPU SED, 78 CPU SEI, AA CPU TAX,  9A8 CPU TAY, BA CPU TSX, 8A CPU TXA, 9A CPU TXS,E P98 CPU TYA, --> ( M/CPU, MULTI-MODE 4/6 ) !(& .OP-CODES2 _WFR-79MAR26 ) : M/CPU  :DUP 1+ C@ 80 AND IF 10 MODE +! ENDIF OVERG zFF00 AND UPMODE UPMODE IF MEM CR LATEST ID.  $3 ERROR ENDIF C@ MODE C@G zINDEX + C@ + C, MODE C@ 7 AND IF MODE C@  ;0F AND 7 < IF C, ELSE , ENDIF ENDIF MEM ; = 1C6E 60 M/CPU ADC, 1C6E 20 M/CPU AND, 1C6E C0 M/CPU CMP,C 1C6E 40 M/CPU EOR, 1C6E A0 M/CPU LDA, 1C6E 00 M/CPU ORA, = 1C6E E0 M/CPU SBC, 1C6C 80 M/CPU STA, 0D0D 01 M/CPU ASL,C 0C0C C1 M/CPU DEC, 0C0C E1 M/CPU INC, 0D0D 41 M/CPU LSR, = 0D0D 21 M/CPU ROL, 0D0D 61 M/CPU ROR, 0414 81 M/CPU STX,C 0486 E0 M/CPU CPX, 0486 C0 M/CPU CPY, 1496 A2 M/CPU LDX, C= 0C8E A0 M/CPU LDY, 048C 80 M/CPU STY, 0480 14 M/CPU JSR,C i8480 40 M/CPU JMP, 0484 20 M/CPU BIT,p s--> ( ASSEMBLER CONDITIONALS 5/6). H( WFR-79MAR26 ) : BEGIN,M WHERE 1 ;h qIMMEDIATE : UNTIL, R 1 ?PAIRS R> C, HERE 1+ - C, ; IMMEDIATE@ E: IF,L aC, HERE 0 C, 2 ;h qIMMEDIATE +: ENDIF, ?EXEC 2 ?PAIRS HERE OVER C@A IF SWAP ! ELSE OVER 1+ - SWAP C! ENDIF ; IMMEDIATE : ELSE, '2 ?PAIRS HERE 1+ 1 JMP,F xSWAP HERE OVER 1+ - SWAP C! 2 ; IMMEDIATE : NOT 20 + ;% P( REVERSE ASSEMBLY TEST ) 90 CONSTANT CS_ ( ASSEMBLE TEST FOR CARRY SET ) D0 CONSTANT 0= P( ASSEMBLER TEST FOR EQUAL ZERO ) 10 CONSTANT 090 CONSTANT >= ( ASSEMBLE TEST FOR GREATER OR EQUAL ZERO )T ( >= IS ONLY CORRECT AFTER SUB, OR CMP, ) CR --> ( USE OF ASSEMBLER 6/6 )- <( WFR-79APR28 )@ D: C;d ( END OF CODE DEFINITION *) ; CURRENT @ CONTEXT ! ?EXEC ?CSP SMUDGE ; IMMEDIATE FORTH DEFINITIONS@ F: CODEL s( CREATE WORD AT ASSEMBLY CODE LEVEL *)  )?EXEC CREATE [COMPILE] ASSEMBLERF ]ASSEMBLER MEM !CSP ;c lIMMEDIATE DECIMAL ;S '( TILL figFORTH IS UP )@ Q' ASSEMBLER CFAU ' ;CODE 8 + ! ( OVER-WRITE SMUDGE ) FORTH DEFINITIONS DECIMAL ";S@ cLATEST 12 +ORIGIN ! ( TOP NFA ) HERE !28 +ORIGIN ! ( FENCE )@ DHEREH ^30 +ORIGIN ! ( DP ) ' ASSEMBLER 6 + 232 +ORIGIN ! ( VOC-LINK )@ SHERE FENCE ! ;S ( compile assembler 1/1 )# _and editor SRC 7/6/80 ) BASE @ ( PRESERVE THE RADIX ) CDECIMAL 31 WIDTH !@ YHEX 28 LOAD ( ASSEMBLER ) HEX 2F LOAD ( DECUS FORTH ADDS)@ `HEX 27 LOAD ( VERS 1.4S KERNEL ) HEX 30 LOAD ( EDITOR & OTHER4 ;@ o: ALLOC DUP + ALLOT ; ( FOR RAM BASED SYSTEMS,) : ARRAY ;A C;S ( FULL UTILITY LOAD REV H HES )$ :FORTH DEFINITIONS HEX@ {( VLIST patches HES17OCT82 ) : v1 ( patch beginning )  1 2FE C! ;" @: v2 ( patch SPACE after ID.)F `55 @ D < IF D 55 ! ELSE 55f @ 1A < IF 1A 55 ! ELSE CR THEN THEN ;" 9: v3 ( patch last CR )F SCR 0 2FE C! ;a x' v1 CFA ' VLIST 6 + ! C ' DUP CFA ' VLIST 55 + !! 9' v2 CFA ' VLIST 95 + !A Y' v3 CFA ' VLIST 9B + !a 800 ' DR1 2 + ! ( FX DR1 - 810) HEX 4C LOAD ( VAR/VALUE )# ; " S: MSBYTE 0 100 U/ SWAP DROP ; : LSBYTE FF AND ;b : MSB MSBYTE ; : LSB LSBYTE ;  : >< DUP LSBYTE 100 * SWAP* 4MSBYTE + ;@ SCR ." CIO CALLS" CRW 32 LOAD CR ." OS/HARDWARE" CR 33 LOAD CR ." GRAPH/SOUND" CR 34 LOADB SFORTH DEFINITIONS` s: THERE MEMTOP @ ; : FREE THERE HERE - ;@ B;S ( CIO CALL ROUTINES )@ _340 VARIABLE IOC 0 VARIABLE IOB /: IOCB 7 MIN 0 MAX 10 * DUP IOB ! 340 + IOC ! ;@ b: .IOC @ IOC @ + ; &1 .IOC ICDNO 2 .IOC ICCOM 3 .IOC ICSTA@ Y4 .IOC ICBAL 6 .IOC ICPTL &8 .IOC ICBLL A .IOC I1CAX B .IOC I2CAX@ |CODE CIO TXA, PHA, IOB LDX, E456 JSR, PLA, TAX, NEXT JMP, C; &CODE Get XSAVE STX, IOB LDX, E456 JSR,@ eXSAVE LDX, PHA, 0 # LDA, PUSH JMP, C; C: GET 7 ICCOM C! Get ;@ Y: CLOSE 0C ICCOM C! CIO ; 1: OPEN 3 ICCOM C! ICBAL ! I1CAX C! I2CAX C! CIO ;@ pCODE ACIO XSAVE STX, BOT LDA, IOB LDX, E456 JSR, XSAVE LDX, POP JMP, C;@ B;S ( OS & HDW CONSTANTS 1/1 )" 3FORTH DEFINITIONS7 :HEX@ [D200 CN F1AUD D201 CN C1AUD D202 CN F2AUD D203 CN C2AUD@ [D204 CN F3AUD D205 CN C3AUD D206 CN F4AUD D207 CN C4AUD@ \D20F CN SKCTL D208 CN AUDCTL  230 CN DLST 22F CN DMACTLB \14 CN RTCLK 2F0 CN CRSINH  2F4 CN CHBAS 2C4 CN COL0A Z2C5 CN COL1 2C6 CN COL2  2C7 CN COL3 2C8 CN COL4@ XD01F CN CONSOL 2FC CN CH  2BF CN BOTSC 52 CN LMARGN@ \2FB CN ATACHR 2E5 CN MEMTOP  4D CN ATRACT 4E CN DRKMSKA [4F CN COLRSH D40A CN WSYNCb d;S ( COLLEEN GRAPHICS 1/2 )@ s3A53 VARIABLE S: 1 VARIABLE COLORC 0 VARIABLE Qbase : PBASE Qbase @ ; K: GR. 1 IOCB CLOSE 0 ICBLL ! DUP F AND SWAP` 30 AND 10 XOR 0C + S: OPEN MEMTOP @ 1 + F800 AND 800 - PDUP Qbase ! 17F + MEMTOP ! ; : POS. 54 C! 55 ! ;` w0 GR. : LOC. POS. GET ; =: C. DUP COLORC ! ATACHR C! ; : SPB HIMEM @ F800 AND 800 -C ^DUP Qbase ! 17F + HIMEM ! ; : PUT 0B ICCOM C! ACIO ;@ Y: PL. POS. COLORC @ PUT ;b o2FD CN FILDAT @: SE. SWAP 10 * + SWAP 2C4 + C! ; : DR. POS. 11 ICCOM C! COLORCI `C@ DUP ATACHR C! FILDATi qC! CIO ; /: GRAPHICS GR. ; : PLOT PL. ; : LOCATE LOC. ;@ : SETCOLOR SE. ; : COLOR C. ; : POSITION POS. ; : DRAWTO DR. ;C : CLEAR 0 0 POS. 7D PUT ;! @: XIO18 DUP FILDAT C! ATACHR C!I Z12 ICCOM C! CIO ;a d--> ( SOUND CONTROL / P/M 2/2 )@ `: SOUND 3 D20F C! 0 D208 C! SWAP "10 * + 100 * + SWAP 2 * D200 + ! ;@ S: PADDLE 270 + C@ ;f x: PTRIG 27C + C@ ; : STICK 278 + C@ ;& 8: STRIG 284 + C@ ;@ O: RND D20A C@ ;c |( 22F CONSTANT DMACTL ) D01D CONSTANT GRACTL& :D407 CONSTANT PMBASE@ SD01B CONSTANT PRIORf zD016 CONSTANT VDELAY  2C0 CONSTANT COLPM' :26F CONSTANT GPRIOR@ QPBASE 1 - HIMEM ! : PLAYER Qbase 1+ C@ PMBASE C! 3( ;GRACTL C! 2 - IF 1CB bELSE 0C ENDIF DMACTL @ E3 AND ORh sDMACTL C! ; : HPOS! D000 + C! ;( ;( H-posn plyr# -> )@ S: SIZE! D008 + C! ;h ( size-code plyr# -> ) : COLPM! COLPM + C! ;( :( color plyr# -> )@ b: NOPLY GRACTL 0SET D000 11 0 FILLh l; ;S ( PON/POFF 1/1 ) !(/ ' EPUTC 1- ' EVTBL 6 + !F U' EVTBL 321 ! ;a u: POFF E400 321 ! ; ";S` NOTE: the subroutine EPUTC will  drive decompiler crazy,& >since it cannot find itsF Jend. ( RS232 SUPPORT 1/2 )@ HCODE SIOL XSAVE STX, BOT LDA, E459 JSR, ( SIOV) XSAVE LDX, BOTC STA, BOT 1+ STY, NEXT JMP, C;@ `: SERR DUP 0< IF 0 100 U/ BASE @h DECIMAL ." SIO ERROR "  . BASE ! QUIT ELSE DROP THEN ;@ ICODE DORLM `XSAVE STX, 506 JSR,h HERE 8 + JSR, XSAVE LDX, NEXT JMP, 0C ) JMP, C;@ `: GETR: HERE 2E7 ! ( SET MEMLO )l FLUSH EMPTY-BUFFERS  150 300 ! ( DDEVIC,DUNIT)! B403F 302 ! ( ? CMD,EXPCT DATA) 5F W306 C! ( TIMEOUT)a {500 304 ! ( BUFFER ADDR)  0C 308 ! ( LENGTH )! "0& 630A ! ( AUXES )A V0 SIO SERR ( ERRORS?)` 500 300 0C CMOVE 0 SIO SERR DORL5 ( RUN RELOCATOR ) 2E7 @ HERE - ALLOT HERE FENCE ! ;a u: R1: " R1: " DROP ; ! ?;S ( other words not needed )b e--> ( RS232 2/2 ) !: R1OPEN 0 8 R1: OPEN ICSTA CH? ;@ a: RYPE -DUP IF 1 IOCB 0B ICCOM C!h {ICBLL ! ICBAL ! CIO 20 ICCOM C! 0 I1CAX ! CIO ELSE( 3DROP THEN ;@ \: CRR 0A9B SP@ 2 RYPE DROP ;f : REMIT SP@ 1 RYPE DROP ; : SET9600 1 IOCB 0E I1CAX ! 24( RYPE CRR 10 0 DO I 0 <# # # #> RYPE I LINERh rCRR LOOP ;  ;S  ( DISPLAY LIST STUFF 1/1 )" %HEX@ `0 VARIABLE 3BYT 0 VARIABLE DLADR : DINST DLADR @ C@ DUP 0F AND IF@ dDUP 0F AND 1 = IF 40 AND IF ." JVB " &ELSE ." JMP " ENDIF DLADR 1+! DLADR @@ j@ DUP DLADR ! HH 3BYT 0SET ELSE DUP 0F AND C 8 OVER < IF ." MAP" ELSE ." CHR"@ aENDIF 7 AND . DUP 10 AND IF ." H" !THEN DUP 20 AND IF ." V" THEN DUP@ ]80 AND IF ." I" ENDIF DUP 0B0 AND IF DUP 40 AND IF ." ," ENDIF@ dENDIF 40 AND IF 3 DLADR @ 1+ H? ELSE !1 ENDIF 3BYT ! ENDIF ELSE ." BLK"@ ]DUP 80 AND IF ." I," ENDIF 70 AND 10 / . 1 3BYT ! ENDIF CR@ T3BYT @ DLADR +! ; ;S ( PLAYER/MISS.STUFF-RZ 1/1 ) UHEX 0 VARIABLE 0VP 64 VARIABLE 0HP 0 VARIABLE 0VPOLD` ( : SPB HIMEM @ 1+ F800 AND  800 - DUP Qbase ! 17F +. 9HIMEM ! ; )@ _: GETPS 0VP ! ROT BLOCK ROT +d Qbase @ 400 + 0VP @ + ROT  CMOVE ; <: SPLAY 0 0 HPOS! 7 GR. SPBB XQbase 1+ C@ PMBASE C!b m2A 0 COLPM!  0 0 SIZE! 3E D400 C!" :3E DMACTL C! 3 GRACTL C!B U1C 20 8 64 GETPS ;a : CLRPM Qbase @ 800 ERASE ; : MOVEH 0 STICK F XOR C AND# =DUP IF 2 / 3 - ENDIF 0HP @C Y+ DUP 0HP ! 0 HPOS! ;` |: VPOS! 0VPOLD @ 9C00 + DUP E&5 9800 8 CMOVE 8 ERASE 9C00 + 9800 SWAP 8 CMOVE ;@ G: MOVEVO \0 STICK F XORb 3 AND DUP IF 2 * 3 - ENDIF  -DUP IF 0VP @ DUP 0VPOLD ! +" :DUP 0VP ! VPOS! ENDIF ;@ [: RUNIT BEGIN MOVEH MOVEVd y2FC C@ FF = NOT END ; : B/H DUP HEX ." FHEX =" . DECIMAL ." DEC.=" . BIN QUIT ;P SHEXX Z;S \ 3B DRIVE LINK &1/1 : r/wE ^301 C@ 1 = IF @ ELSE DROPe n0 ENDIF ; ! =: UNLINK EMPTY-BUFFERS DR0E ]' r/w CFA ' R/W B1 + ! ;  : LINK EMPTY-BUFFERS DR0% =' @ CFA ' R/W B1 + ! ;B P1A VAR TMPHYS \ SETS BOTH DRIVES@ I: SETPHYSN ]1FB5 C@ 1FCE C@e z100 * + TO TMPHYS DUP * LSB 1FB5 C! MSB 1FCE C! DR0 ; : RESPHYS/ ?TMPHYS @ DUP LSBE b1FB5 C! MSB 1FCE C! DR0 ; ;S \ scr# 3C empty block #1/1 ;S F8( LINE PRINTER WORDS 1/2 ) =( 0181 SRC ) 3A50 VARIABLE P:A CODE PCIO XSAVE STX, 70 # LDX, E456 JSR, XSAVE LDX, TYA, PHA, 8PUSH JMP, C; 0 VARIABLE LPCNT : PERR? DUP 0< IF FF AND@ Z." P: ERROR " ERROR THENa gDROP ; 7: LPOPEN 3 3B2 C! P: 3B4 ! 2 3B8 ! 8 3BA ! PCIO PERR? ;@ : LYP1 3B8 ! 3B4 ! 0B 3B2 C! PCIO PERR? ; : LPEMIT SP@ 1 LYP1 DR IFA 1 LPCNT +! THEN LYP1 ELSE DROP DROP THEN 20 SP@ 1 LYP1 DROP ; : CRLP LPCR LPCNT @ 3D > IF FLPCR LPCR LPCR LPCR 0 LPCNT ! THEN ;` : FFLP CRLP BEGIN LPCNT @ WHILE CRLP REPEAT ; <: SHRINK 1B LPEMIT 14 LPEMITA ]CRLP ; : EXPAND 1B LPEMIT 13a nLPEMIT CRLP ; : .CLP 0 <# # # #> LYPE ; 8: .LP 0 <# #S #> LYPE ;@ : LINELP DUP .CLP SCR @ (LINE) -TRAILING 1 MAX LYPE CRLP ; \4353 VARIABLE SCR# 2052 , 2023 , : LISTLP DUP SCR ! SCR# 6 LYPE .LP LPCR B/SCR B/BUF * C/L /` x0 DO I LINELP LOOP ; --> ( LINE PRINTER WORDS 2/2 ) 0( 1/27/81 SRC )@ |: LPSPC 0 DO 20 LPEMIT LOOP ; : SHOWLP 1+ SWAP C/L 20 = IF DO CRLP" 3SCR# 6 LYPE I .LPB [1F LPSPC SCR# 6 LYPE I 1+b j.LP CRLP  I 20 0 DO DUP SCR ! I .CLP" 5I SCR @ (LINE) LYPEB I5 LPSPCb |DUP 1+ SCR ! I LINELP LOOP  DROP 2 +LOOP" .ELSE DO CRLP2 NI LISTLP LOOP ENDIF FFLP ; : LPINDEX 1+ SWAP DO I .LP F0 I (LINE) -TRAILING LYPE LPCR LOOP ;  ;S CX\ pns TRANSLATOR HES 16SEP82 1/1\ moves screens from drive 2 to \ same place on drive 1.b xFORTH DEFINITIONS HEX J\ Expects byte on TOS! ,: translate0 ;( n --- n )D WDUP 0= IF 20 + \ f jELSE  DUP DUP \ lwr case% :60 > SWAP 7B < AND IFH Z20 - ENDIF ENDIF ; !\ Expects buffer address on TOS \A J: trnsblkO [( adr1 --- )e |3FF 0 DO DUP I + DUP C@ translate SWAP C! LOOP DROP ;@ j\ Expexts source destin scr TOS : PNSCOPYp ( n1 n2 --- )  SWAP BLOCK DUP trnsblk SWAP" @BLOCK 400 CMOVE UPDATE FLUSH ;  EDITOR DEFINITIONSA F: PNSL \EDLQ SCR @ BLOCKh trnsblk UPDATE EDT UL ;! 2FORTH DEFINITIONSA O: DR2 800 + ;c e;S ( FORMATTED LIST PROG. 1/5 )A ]VOCABULARY FORMY IMMEDIATEa tFORMY DEFINITIONS r BASE @ OCTAL 40 CN SPACBYT 54 CN COMCHR : IARRAY 0 VARIABLE -2 ALLOT ; : 0> DUP 0= IF DROP 0 ELSE 0< 0= THEN ; 0 VARIABLE INDENT 106 CN FCONS 111 CN ICONS 0 VARIABLE TLFLG 0 VARIABLE KERKNT 100 CN MAXLIN : NXSPACE >R 1+ >R 0 R> R> DO _SPACBYT I C@ = IF DROP I LEAVE THEN LOOP ; : NXNSPACE >R 1+ >R 0 R> R> DO SPACBYT I C@ = 0= IF y DROP I LEAVE THEN LOOP ; : GTNXWD DUP IF + OVER SWAP NXSPACE ELSE DROP THEN DUP IF OVER SWAP NXNSPACE DUP IF OVER OVER IF INDENT @ 0 DO 0 0 TORLY LOOP THEyN ; : PRWORD DUP 1+ KERKNT @ + MAXLIN > IF TORLCR THEN KERKNT @ 0= IF DOIND THEN OVER OVER TORLY ; : 1SET 1 SWAP ! ; --> ( FORMATTED LIST PROG. 2/5 ) 5: ( 51 WORD 6 ALLOT ;@ : IA IARRAY ; IA L1G 10 , ( :) ( CODE) ( ,CODE) ( SUBROUTINE) 6 ( IA) ( IARRAY) ( LABEL) ( TBL) IA L2G 2 , ( ;) ( C;)A zIA L3G 2 , ( NXT,) ( NEXT,) IA L4G 6 , ( IF) ( DO) ( IF,) C8 ( CASE) ( BEGIN) ( BEGIN,) IA L5G 3 , ( ELSE,) ( ELSE)B ( WHILE) IA L6G 16 , ( THEN,) ( THEN) ( END,) ( END) ( SOB,) \-( BACK) ( UNTIL) ( AGAIN) ( REPEAT) ( ENDIF,)B |( UNTIL,) ( LOOP) ( +LOOP) ( ENDIF) IA L7G 7 , ( CONSTANT) ( IR) ( VARIABLE) <( CN) ( ARRAY) ( INTEGER) ( ORCON)C sIA L8G 1 , ( () IA L9G 3 , ( LD,) ( ST,) ( LOAD) IA LAG 1 , ( ;CODE)@ o: CMPWORD DUP >R C@ OVER = R> SWAP IF >R OVER . R> SWAP OVER DUP C@ DUP 4 > IF DROP 4 THEN 0B kDO I OVER + 1+ C@ >R OVER R> SWAP I + C@  = 0= IF 0 LEAVE THEN LOOPB l0= IF DROP DROP 0 THEN ELSE 0 THEN ; --> ( FORMATTED LIST PROG. 3/5 ) P: GSCAN DUP @ SWAP 2+ SWAP 0 DO CMPWORD IF LEAVEb 0 ELSE 6 + THEN LOOP IF 0 ELSE DROP 1 THEN ; A: NEWCR KERKNT @ IF TORLCR THEN ;` : DUPBC OVER >R >R OVER R> SWAP R> ; M: FINDCHAR SWAP >R SWAP 1+ R> DO DUP I C@ =b IF DROP I LEAVE 0 THEN LOOP IF 0 THEN ; 8: PRNEWL PRWORD TORLCR ;@ u: >= OVER OVER = IF DROP DROP 1 ELSE > THEN ; --> ( FORMATTED LIST PROG. 4/5 ) M: EL1G NEWCR INDENT 0SET PRWORD GTNXWD PRNEWLb o10 INDENT ! ; !: EL2G NEWCR PRNEWL INDENT 0SET ;@ U: EL3G NEWCR PRNEWL ; !: EL4G NEWCR PRNEWL 2 INDENT +! ;@ n: EL5G NEWCR -2 INDENT +! PRNEWL 2 INDENT +! ; ": EL6G NEWCR -2 INDENT +! PRNEWL ;@ i: EL7G PRWORD GTNXWD PRNEWL INDENT 0SET ; C: EL8G DUPBC 51 FINDCHAR DUPB wIF SWAP DROP OVER - 1+ PRNEWL ELSE DROP PRWORD THEN ; n: EL9G PRNEWL ;@ a: ELAG NEWCR 10 INDENT ! PRNEWL ; 2: ASSWRD DUP 4 >= IF OVER OVER + 1- C@ COMCHR = IFC nOVER DUP C@ ICONS = SWAP 1+ C@ FCONS = AND , IF 2 ELSE 1 THEN ELSE 0 THEN ELSE 0 THEN ;@ C--> ( FORMATTED LIST PROG. 5/5 ) V: PRCWRD L1G GSCAN IF EL1G ELSE L2G GSCAN IF EL2G ELSEb L3G GSCAN IF EL3G ELSE L4G GSCAN IF EL4G ELSE L5G GSCAN" WIF EL5G ELSE L6G GSCAN IF EL6G ELSE L7G GSCAN IF EL7Gb ELSE L8G GSCAN IF EL8G ELSE L9G GSCAN IF EL9G ELSE" MLAG GSCAN IF ELAG ELSE ASSWRD IF ASSWRD 2 =b IF EL4G ELSE PRNEWL THEN ELSE jPRWORD THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN ; : FORLST TORLCR DUP TLFLG @ IF LISTLP ELSE ) TORLCR LIST THEN TORLCR TORLCR DUP BLK !B BLOCK DUP 1777 + SWAP KERKNT 0SET INDENT 0SET 0 BEGIN GTNXWD 9 DUP IF PRCWRD THEN DUP 0= END DROP DROP DROP BLK 0SET ;@ x: ASTER TORLCR 40 0 DO 52 SP@ 1 TORLY DROP LOOP TORLCR ; 5: FORSHW 1+ OVER DO ASTER I FORLST TORLCR LOOP DROP ;@ FORTH DEFINITIONS : FLST FORMY TLFLG 0SET FORLST ; : FLSTLP FORMgY TLFLG 1SET FORLST FFLP ; : FSHW FORMY TLFLG 0SET FORSHW ; : FSHWLP FORMY TLFLG 1SET FORSHW FFLP ;p r;S ( CASE 1/1 )# :FORTH DEFINITIONS HEXA ]: CASE ?COMP CSP @ !CSP 4 ;h qIMMEDIATE  : OF 4 ?PAIRS COMPILE OVER$ =COMPILE = COMPILE 0BRANCHD ]HERE 0 , COMPILE DROP 5 ;h qIMMEDIATE  : ENDOF 5 ?PAIRS COMPILE$ :BRANCH HERE 0 , SWAP 2D W[COMPILE] ENDIF 4 ;h qIMMEDIATE : ENDCASE 4 ?PAIRS COMPILE DROP$ >BEGIN SP@ CSP @ = 0= WHILED \2 [COMPILE] ENDIF REPEATd wCSP ! ; IMMEDIATE " $;S F"( CHARACTERSET SPACE ALLOC 1/1 ) (2 HHES 82SEP01 ) ( NOTE:f THIS SCREEN IS LOCATION  DEPENDENT FOR CHRSETSPACE& /TO WORK )B E000 CONSTANT CH0 ( STD CHAR ) 3400 CONSTANT CH1 ( SET #1 )X 3800 CONSTANT CH2 ( SET #2 ) 3C01 DP ! ( reserve space ) 02F4 C@ VARIABLE CHRSTa ( storage area of desired set ) BLK @ DUP DUP! 71+ BLOCK CH1 400 CMOVEA W1+ BLOCK CH2 400 CMOVEb ( reserve next two screens )  ( 0 - 2 CHARSET SELECT )! 1: CHR ( n --- )F JCASEi w0 OF CH0 ENDOF 1 OF CH1 ENDOF) 72 OF CH2 ENDOFF WENDCASE 100 / DUPd xCHRST C! 02F4 C! ; " 2( PRINT CHAR SET9 :)A J: .CHRSETN V1 2FE C!e xFF 0 DO I EMIT LOOP  0 2FE C! CR ;B D;S fff`<|fl0fF68of;880@A GI 0O^0f< 80 0 ~~`0 0`f``f<&fzbx`bbx``||ff~fff xlxxl```bv~nf<~f<)ff|``<|<.fZ<fff<<f<f`f< |v000|000`~`|fff8<f<`lxxl8fk<oۀfff`<|~fff;bt8|lf<|~L2~<~~<h8x8C0888ffw;ffff>`<|fl0fF68of;@^888>x|f<>>``~pppww``|l`cc>66wwcc0 0 ~~`0 0`cIcooo`?33sss~ffgggg`cc~ffwww``pp``pppc`oggssssssN n~fflggg000ppp~gwggggwogggccggg!ccpppccggg~ffwww`ss'(.g04gYo>gggogsss>ggggggfl7g^i@`0 xnux6c~6>H8pp8?LLPX\\``ddhjvx||ww '<~~~<,,008=CHPx`x`~<~~<0~0 ~ s<~~<gc000gg?```??gg?>g~`??gg>|p``~css8<gg<``lnxlg88>fwkcwf>ccc>*>3c~``>sc<70pp0c~ l .g`?cc3>ck?7g<D 15 0 DO OVER OVER D+g wLOOP SWAP DROP{ |; 8: 2@ DUP 2+ @ SWAP @ ;` z: 2! OVER OVER ! 2+ SWAP DROP ! ;@ G: 2DROPN YDROP DROP ;` f: 2DUPn yOVER OVER ; ': 2OVER. F4 PICK 4 PICK ; : 2ROTN g6 ROLL 6 ROLL ; : 2SWAPn 4 ROLL 4 ROLL ;  : 2VARIABLE VARIABLE 0 , ;! &: D0=/ 6OR 0= ;A E: D-O ZDMINUS D+ ;  : D= D- D0= ;! :: D< ROT OVER OVER = IFH _ROT ROT D- 0< SWAP SWAPc xELSE SWAP < SWAP DROP SWAP DROP THEN ;! >: EXIT COMPILE [COMPILE] ;S ;F OIMMEDIATEa : DMIN 2OVER 2OVER D< IF 2DROP :ELSE 2SWAP 2DROP THEN ; : DMAX 2OVER 2OVER D< IFI \2SWAP THEN DROP ;b d;S ( VAR / VALUE ANTIC,HES1/1 )A S0 VARIABLE TO-FLAG  CODE TO ( --- )# 81 # LDA, TO-FLAG STA,L ZNEXT JMP, C;a f: VAR  CONSTANT ;CODE# /TO-FLAG LDA,9 ?0= IF,C _2 # LDY, W )Y LDA, PHA, INY,c vW )Y LDA, PUSH JMP,z ELSE, > 0 # LDA, TO-FLAG STA, 0 ,X LDA, 2 # LDY, W )Y STA, 1 ,X LDA,B ZINY, W )Y STA, 0E5D JMP,b kTHEN, C; C : VALUE 0 VAR ;A C;S   ( V1.4S ACCESS WORDS 1/1 )! (( HES ) ! @: SETSYS ( SETS RESET PARAM )F ^LMARGN @ DUP ( MARGINS )f yLSB ' V1.4S 4 + C!  MSB ' V1.4S 8 + C!& >COL1 @ DUP ( COLORS )F YLSB ' V1.4S C + C!f yMSB ' V1.4S 11 + C!  COL4 C@ ( BORDER )& =LSB ' V1.4S 16 + C! ; ! @: HOOK ( hooks your assembly )G `( routine into WARMSTRT )g x( ->use HOOK word ) [COMPILE] ' ' V1.4S 1+ ! ;A I: UNHOOKN `( restore vector )g zE4C0 ' V1.4S 1+ ! ; ! #;S ( CDUMP / BDUMP 12SEP82 1/1 )a : BDUMP ( Redefined...HES )  1 2FE C!$ ?1+ SWAP DO I HH SPACE I 8 0D ^DO DUP I + CH? SPACE LOOPd zDROP ." " CR 8 +LOOP  0 2FE C! ;  : FIX$ 1DROP ." " ;  : ( For BDUMP )$ +10 0 DOE _SP@ E + I - @ SP@ 12 + @ Ie 2 / + C! 2 +LOOP ." " 9 DROP DROP DROP DROP DROP DROP FIX DROP DROP QUIT ;b d;S C ( \ V1.4S HL/HES 12SEP82 1/1 )A F: TBLJ Z ;  : ALLOC DUP + ALLOT ;A _: ARRAY ;  : \ ( Ignores rest of line,) 8used as comment> ?)D ^IN @ C/L / 1+ C/L * IN ! ;b kIMMEDIATE ! #;S E