Shop OBEX P1 Docs P2 Docs Learn Events
Tachyon V4 "DAWN" - exploring new worlds - Page 20 — Parallax Forums

Tachyon V4 "DAWN" - exploring new worlds

1171820222330

Comments

  • caskazcaskaz Posts: 957
    edited 2017-07-08 23:28
    HI.
    ( 0079 $3628  ok )   BLINKEM
    ( 0080 $3628  ok )   STOPEM               <-- some LEDs still on although blinling stop
    ( 0081 $3628  ok )   BLINKEM
    ( 0082 $3628  ok )   STOPEM               <-- some LEDs still on although blinling stop
    ( 0083 $3628  ok )   BLINKEM
    ( 0084 $3628  ok )   ' STOPEM TIMERJOB    <-- some LEDs still on although blinling stop
    ( 0085 $3628  ok )   BLINKEM              
    ( 0086 $3628  ok )   ' STOPEM TIMERJOB    <-- some LEDs still on although blinling stop
    ( 0087 $3628  ok )
    

    It's boot message.
      Propeller .:.:--TACHYON--:.:. Forth V4.4 DAWN 440170620.2200
    
    MODULES LOADED:
    1AC0: EXTEND.fth          Primary extensions to TACHYON V4.4 kernel  - 170620-0900
    
    AUTORUN BOOT
    FREQ = 80.0MHz
    *** INITS ***
    Loading cog 3 E50A F32
    *** ROMS ***
    0,848 VGA32x15
    0,392 HSUART
    1,900 F32
    *** I2C ***
    A0 EEPROM
    
    INTERCOM: &00.00.00.00 @2,000,000
     CODE:$3490 =12944 bytes   NAME:$5A66 =6554 bytes   DATA:$76E8 =216 bytes    =9686 bytes free    Data Stack (0)
    
    --------------------------------------------------------------------------------
    ( 0001 $3490  ok )
    
  • @frida - I've read and reread your request a few times but I'm still not sure what you are asking. There are multiple ways of setting pins high and low all of which automatically set the dir register. In fact there is never any need to directly access the dir register. Do you have a code example of how you intend to use the instructions?

    These are a list of the direct I/O instructions.
    OUTSET ( mask -- )	Set the pins to high (also sets dir)
    OUTCLR ( mask -- )	Clear the pins to low (also sets dir)
    LOW ( pin -- )		Output a low on pin (also sets dir)
    HIGH ( pin -- )		Output a high on pin (also sets dir)
    FLOAT ( pin -- )	Float the pin back to an input (clears dir)
    
    H ( pin -- pin )	Output a high on pin (sets dir, fast i/o, stack intact)
    L ( pin -- pin )	Output a low on pin (sets dir, fast i/o, stack intact)
    F ( pin -- pin )	Float the pin to an input (clears dir, fast i/o, stack intact)
    P ( pin -- pin )	Pulse the pin (sets dir, fast i/o, stack intact)
    
    PIN@ ( pin -- flg )	Read the state of the pin and return with a boolean flag
    IN ( mask -- flg )	Read the state of the pins and return with a boolean flag
    
    These operations are available but not normally used
    OUTPUTS ( mask -- )	Set pins to outputs (does not write to OUTA)
    INPUTS ( mask -- )	Set pins to inputs
    
  • D.PD.P Posts: 790
    edited 2017-07-09 06:38
    caskaz wrote: »
    HI.

    Just paste this file and run the commands
    BLINKEM
    STOPEM
    Read the source to see the changes, don't directly run ' STOPEM TIMERJOB
    See the new STOPEM word which calls ' STOP-all TIMERJOB
    I just now recompiled this and tested again.
    IFDEF timer.fth
    @rest	org
    FORGET timer.fth
    }
    
    pub         ." timer  2017/06/17 11:49:45 " ;
    
    @org W@	== @rest	--- remember
    
    
     \ * SIMPLE ROUTINE TO EXERCISE ALL 8 LEDS WITH TACHYON TIMERS
    \ * AND ALARMS ON THE  PROP QUICKSTART BOARD
    \ * 
    \ * USE THE WORD "BLINKEM" TO START THE LIGHTS 
    \ * AND "STOPEM" TO STOP THE LIGHTS
    
    
    TIMER mt0
    TIMER mt1
    TIMER mt2
    TIMER mt3
    TIMER mt4
    TIMER mt5
    TIMER mt6
    TIMER mt7
    
    : blink0 #16 PIN@ IF #16 LOW #500 ELSE #16 HIGH #50 THEN mt0 TIMEOUT ;     --- timer alarm rountine and reset
    : B0 ' blink0 mt0  ALARM  ;                                    ---  assign blink0 as mt0 alarm vector
    
    : blink1 #17 PIN@ IF #17 LOW #300 ELSE #17 HIGH #50 THEN mt1 TIMEOUT ;
    : B1 ' blink1 mt1  ALARM ;
    
    : blink2 #18 PIN@ IF #18 LOW #150 ELSE #18 HIGH #50 THEN mt2 TIMEOUT ;
    : B2 ' blink2 mt2  ALARM ;
    
    : blink3 #19 PIN@ IF #19 LOW #285 ELSE #19 HIGH #50 THEN mt3 TIMEOUT ;
    : B3 ' blink3 mt3  ALARM ; 
    
    : blink4 #20 PIN@ IF #20 LOW #175 ELSE #20 HIGH #50 THEN mt4 TIMEOUT ;
    : B4 ' blink4 mt4  ALARM ;
    
    : blink5 #21 PIN@ IF #21 LOW #335 ELSE #21 HIGH #50 THEN mt5 TIMEOUT ;
    : B5 ' blink5 mt5  ALARM ;
    
    : blink6 #22 PIN@ IF #22 LOW #100 ELSE #22 HIGH #50 THEN mt6 TIMEOUT ;
    : B6 ' blink6 mt6  ALARM ;
    
    : blink7 #23 PIN@ IF #23 LOW #195 ELSE #23 HIGH #50 THEN mt7 TIMEOUT ;
    : B7 ' blink7 mt7  ALARM ;
    
    : clrpin $FF0000 OUTCLR ;
    
    : BLINKEM  
       B0 B1 B2 B3 B4 B5 B6 B7    --- assign the alarm vector to timers  
       #10 mt0 TIMEOUT             --- start all the timers
       #20 mt1 TIMEOUT
       #30 mt2 TIMEOUT
       #40 mt3 TIMEOUT
       #50 mt4 TIMEOUT
       #60 mt5 TIMEOUT
       #70 mt6 TIMEOUT
       #80 mt7 TIMEOUT
    ; 
    
    
    : STOP-all
      0 mt0  ALARM      --- assign the alarm vectors to null, they will stop after the last timeout.
      0 mt1  ALARM 
      0 mt2  ALARM
      0 mt3  ALARM
      0 mt4  ALARM
      0 mt5  ALARM
      0 mt6  ALARM
      0 mt7  ALARM
      $FF0000 OUTCLR   ---   clear all pins
    ;
    
    : STOPEM ' STOP-all TIMERJOB ;
    
     END
    
    \ ?BACKUP
    
  • I have question about another cog operation.
    ' MYTASK TASK? RUN
    
    How does MYTASK stop?
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2017-07-09 08:30
    V4.5 status
    I'm still fixing a few things and the main problem with getting EASYNET to work properly turned out to be a matter of case sensitivity. After a COMPACT operation the TACHYON and END words are redefined and they didn't reenable case sensitivity. However I renamed all those conflicting duplicates anyway.

    If you are checking I/O states I used to have an "lsio" command but there is a lean and mean in V4.5 that pretty much tells me everything I need to know in one line.
    ( 0001 $5D8A  ok )   lsio
     0:UUFF 4:FFFF 8:FFFF 12:FFFF 16:UUFF 20:UFFF 24:FFFU 28:FU
    
    U means pulled-up, D for down, F for float.

    Here's a Telnet session and a dictionary list etc over that session. It still amazes me how much code and dictionary we can squeeze into a standard Prop system without running out of memory or lacking in speed.
    peter@peter-workstation ~ $ telnet 192.168.0.98 10001
    Trying 192.168.0.98...
    Connected to 192.168.0.98.
    Escape character is '^]'.
    WELCOME TO THE IoT5500 TELNET SESSION
    
    Use Forth commands, for help type QWORDS
    
    Try ls or DIR for directory
    
    Session time is unlimited but all other network ports
    
    will be blocked until Telnet is disconnected
    
    
    
    ??
    
      Propeller .:.:--TACHYON--:.:. Forth V4X5 DAWN 450170705.1015
    
    MODULES LOADED: 
    50BE: EASYNET.fth         WIZNET NETWORK SERVERS 170708.0000 
    484C: W5500.fth           WIZNET W5500 driver 170708.0000 
    
    35DA: EASYFILE.fth        SDHC card + FAT32 Virtual Memory Access File System Layer V1.2 170705-1120 
    1B00: EXTEND.fth          Primary extensions to TACHYON V4.5 kernel  - 170706-0930
    AUTORUN <OFF>
    FREQ = 96.0MHz CODE:$5D8A =23434 bytes   NAME:$66BC =3396 bytes   DATA:$7A6E =1118 bytes    =2354 bytes free    Data Stack (0)
    ( 0043 $5D8A  ok )   WWORDS
    
    
    NFA  CFA  V NAME
    66BC 5D34 0 EASYNET         66C8 5C76 0 !EASYNET        66D4 5C6A 0 RESTART         66E0 5C30 0 ?EASYNET        
    66EC FA6D 0 netflgs         66F8 FA6C 0 _fsave          6702 5C06 0 ?LED            670A 5B4C 0 ?CTRLS          
    6714 5B46 0 ~k              671A FA6A 0 lk              6720 5B18 0 ?HTTP           672A 8001 0 #hskts          
    6734 5ADC 0 GET             673C 5ADA 0 HEAD            6744 5A4A 0 GETPAGE         6750 5A3E 0 GETHTX          
    675A 5A3E 0 GETTXT          6764 59CC 0 ?CONTENT        6770 8030 0 getsz           677A FA3A 0 get$            
    6782 58BE 0 CONTENT         678E 585C 0 ?FTP            6796 5856 0 REST            679E 5802 0 STOR            
    67A6 579A 0 (RETR)          67B0 5790 0 RETR            67B8 576A 0 RNTO            67C0 5742 0 RNFR            
    67C8 5730 0 RNFR$           67D2 56CE 0 FTPMSG          67DC 568E 0 SIZE            67E4 5608 0 LIST            
    67EC 5602 0 ?DISC           67F6 55D6 0 PWD             67FE 5592 0 CWD             6806 5580 0 cwd$            
    680E 5554 0 CDUP            6816 551E 0 MDTM            681E 54FC 0 FEAT            6826 54E2 0 SYST            
    682E 546E 0 PASV            6836 5444 0 PORT            683E FA38 0 dataport        684A 541A 0 TYPE            
    6852 FA34 0 _type           685C 53E2 0 PASS            6864 53AE 0 USER            686C 539E 0 ECHOREQ         
    6878 536E 0 GETFNAME        6884 FA22 0 pass$           688E FA02 0 user$           6898 5352 0 .IPD            
    68A0 534E 0 COMMA           68AA 5348 0 .BYTEDEC        68B6 5320 0 GETTIME         68C2 531C 0 RESOLVE         
    68CE 5276 0 ?TELNET         68DA FA01 0 constat         68E6 5262 0 CONNECT         68F2 521C 0 DISC?           
    68FC 5212 0 BYE             6904 51DE 0 CONNECTED?      6912 51DA 0 DISCREQ         691E FA00 0 _disreq         
    692A 51D0 0 KEEPALIVE       6938 F9F0 0 contmr          6942 51C6 0 UpdateTXWR      6950 51BC 0 LANSKT          
    695A 51B4 0 FlushSkt        6966 51A6 0 MSG>            696E 5154 0 <MSG            6976 F9EC 0 msgstk          
    6980 514E 0 MSGS            6988 F9EA 0 _msgs           6992 F9E9 0 ledon           699C F9E8 0 ledcnt          
    69A6 5146 0 SENDFILE        69B2 5108 0 BLKSEND         69BE 8200 0 BUFSIZ          69C8 F9E6 0 blkpoll         
    69D4 F9E4 0 un              69DA 50E6 0 UNKNOWN         69E6 50BE 0 EASYNET.fth     69F6 8004 0 HTTP            
    69FE 8003 0 TELNET          6A08 8002 0 FTPDAT          6A12 8001 0 FTP             6A1A 8000 0 NETMAN          
    6A24 50B0 0 .SOCKETS        6A30 4FE8 0 ifconfig        6A3C 4E42 0 .SKT            6A44 4E40 0 .SOCKET         
    6A50 4DE2 0 .SKTHD          6A5A 4DD0 0 SWAPB           6A64 4DBE 0 .PTR            6A6C 4DBC 0 .@SKTBUF        
    6A78 4DA6 0 .IP1            6A80 4DA0 0 .IP             6A88 4D92 0 .IPX            6A90 4D8E 0 .EMIT           
    6A9A 4D88 0 @SKTBUF         6AA6 F9A4 0 sktbuf          6AB0 4D50 0 LREADSKT        6ABC 4D3E 0 LSEND           
    6AC6 4D3A 0 WIZ             6ACE 4D32 0 ~W              6AD4 4D2C 0 !WIZ            6ADC 4D06 0 !TXBUFS         
    6AE8 4CC0 0 !WIZIP          6AF2 4CA8 0 !WIZIO          6AFC 4C4E 0 WCOLD           6B06 4C40 0 LANCON          
    6B10 4C38 0 LANCONKEY       6B1E 4C32 0 LANCONEMIT      6B2C 4C12 0 LAN             6B34 4BF2 0 LANKEY          
    6B3E 4BC0 0 LANEMIT         6B4A 4BAA 0 LANSEND         6B56 4BA4 0 ?SEND           6B60 4B90 0 ?SENDPOLL       
    6B6E 4B62 0 WAITSEND        6B7A F994 0 sendtmr         6B86 F990 0 autosend        6B92 F98C 0 txsize          
    6B9C F988 0 txtime          6BA6 4B5A 0 !TXWR           6BB0 4B50 0 @txwr           6BBA F976 0 txwr            
    6BC2 4B4C 0 SetPORT         6BCE 4B40 0 PORT!           6BD8 4B2C 0 sDISCON?        6BE4 4B18 0 sCONNECTED?     
    6BF4 4B0E 0 sCLOSING?       6C02 4B04 0 sESTAB?         6C0E 4AFC 0 sINACTIVE?      6C1C 4AF4 0 sCLOSED?        
    6C28 4AF0 0 sRECV           6C32 4AEC 0 sSENDKEEP       6C40 4AE8 0 sSENDMAC        6C4C 4AE4 0 sSEND           
    6C56 4AE0 0 sCLOSE          6C60 4ADC 0 sDISCON         6C6C 4AD8 0 sCONNECT        6C78 4AD4 0 sLISTEN         
    6C84 4AD0 0 sOPEN           6C8E 4ACA 0 PPPoE           6C98 4AC4 0 MACRAW          6CA2 4ABE 0 IPRAW           
    6CAC 4AB8 0 UDP             6CB4 4AB2 0 TCP             6CBC 4AAC 0 CLOSED          6CC6 4AA8 0 sMODE           
    6CD0 4AA4 0 KEEPTMR         6CDC 4AA0 0 RXWRITE         6CE8 4A9C 0 RXREAD          6CF2 4A96 0 RXSIZE@         
    6CFE 4A92 0 TXWRITE         6D0A 4A8E 0 TXREAD          6D14 4A88 0 TXFREE@         6D20 4A84 0 sTXMEM          
    6D2A 4A80 0 sRXMEM          6D34 4A7C 0 sPRO            6D3C 4A78 0 sSSIZE          6D46 4A74 0 sDPORT          
    6D50 4A6C 0 sDIP!           6D5A 4A68 0 sDHAR!          6D64 4A64 0 sPORT           6D6E 4A60 0 sSTAT           
    6D78 4A5C 0 sINTS           6D82 4A56 0 sCMD!           6D8C 4A48 0 @SOCKET         6D98 4A42 0 SKT@            
    6DA0 4A2C 0 SKT             6DA8 4A2C 0 SOCKET          6DB2 F974 0 _socket         6DBE 8001 0 &CON            
    6DC6 8002 0 &DISCON         6DD2 8004 0 &RECV           6DDC 8008 0 &TIMEOUT        6DE8 8010 0 &SENDOK         
    6DF4 4A28 0 UPORT           6DFE 4A24 0 UIP             6E06 4A20 0 @RCR            6E0E 4A1C 0 @RTR            
    6E16 4A18 0 INTMASK         6E22 4A14 0 INTS@           6E2C 4A0A 0 SIP             6E34 49FC 0 MAC             
    6E3C 49F2 0 SUBNET          6E46 49E8 0 GATEWAY         6E52 49E4 0 wMODE           6E5C 49DE 0 @wcold          
    6E66 49D8 0 @ports          6E70 49D2 0 @mac            6E78 49CC 0 @subnet         6E84 49C6 0 @sip            
    6E8C 49C0 0 @gateway        6E98 49AC 0 LWRITE          6EA2 4970 0 LREAD           6EAC F970 0 vwrite          
    6EB6 F96C 0 vread           6EC0 4962 0 L@              6EC6 4954 0 LW@             6ECE 494A 0 LC@             
    6ED6 4948 0 COMLC@          6EE0 493C 0 LX@             6EE8 4930 0 L!              6EEE 492E 0 COML!           
    6EF8 4928 0 LW!             6F00 4926 0 COMLW!          6F0A 4920 0 LX              6F10 491C 0 LC!             
    6F18 491A 0 COMLC!          6F22 490C 0 LX!             6F2A 4908 0 @RX             6F32 4904 0 @TX             
    6F3A 4900 0 @SKT            6F42 48FC 0 @COMMON         6F4E 48EC 0 ctrl!           6F58 48E2 0 SKTBLK          
    6F62 F969 0 rdc             6F6A F968 0 wrc             6F72 48DE 0 WPWRDN          6F7C 48DA 0 WRESET          
    6F86 48D0 0 WIZPINS         6F92 C8CC 0 _wizpins        6F9E 48C2 0 mySN            6FA6 48BA 0 myIP            
    6FAE 48B2 0 myGW            6FB6 489E 0 GETRND          6FC0 487A 0 >UPPER          6FCA 4876 0 LANLED          
    6FD4 4872 0 RDYLED          6FDE F968 0 @rest           6FE8 484C 0 W5500.fth       6FF6 8000 0 +FTP            
    
    btw - I had to snip some extra stuff off into the next post, the forum code complained that the body was way too big.
  • Part 2 of the dictionary listing:
    NFA  CFA  V NAME
    8000 4848 0 END             8010 4844 0 TACHYON         8020 4816 0 COMPACT         8030 47CE 0 CWORDS          
    8040 47A4 0 DICT>HASH       8050 478A 0 DICT>EE         8060 4778 0 .NFA            8070 4750 0 NFA>EE          
    8080 4740 0 ~N              8090 4736 0 ~H              80A0 46CA 0 HSEARCH         80B0 46A4 0 HASH            
    80C0 F958 0 eebuf           80D0 F948 0 cstr            80E0 F3FF 0 HB              80F0 F000 0 hashtags        
    8100 469E 0 eedict          8110 4690 0 QV              8120 4688 0 SDSPIN          8130 4680 0 SDPAB           
    8140 4678 0 SDQS            8150 4670 0 SD1419          8160 4668 0 SD1144          8170 4660 0 SD1372          
    8180 4658 0 SD1656          8190 4650 0 SD8             81A0 4648 0 SD1377          81B0 462C 0 LF>CR           
    81C0 4626 0 FL              81D0 45BE 0 SAVETEXT        81E0 45AA 0 FRUN            81F0 459C 0 .FILES          
    8200 458A 0 .FX             8210 4588 0 .FILE           8220 4580 0 lss             8230 4560 0 VOLNAME!        
    8240 455C 0 ls-l            8250 4554 0 ls              8260 4550 0 .LIST           8270 4514 0 (.LIST)         
    8280 44B2 0 (ls)            8290 F945 0 lscnt           82A0 44A4 0 .UTIME          82B0 4450 0 .FNAME          
    82C0 4432 0 (SLIST)         82D0 4428 0 (DIR)           82E0 4426 0 DIR             82F0 43EE 0 lsdirs          
    8300 43EC 0 udir            8310 436A 0 .DIR            8320 4366 0 (.DIR)          8330 430C 0 .SIZE           
    8340 42F2 0 .FTIME          8350 42EC 0 .FTIMES         8360 42C0 0 .FDATES         8370 42B0 0 .FDATE          
    8380 4280 0 .ATR            8390 4268 0 .PATH           83A0 4264 0 pwd             83B0 4228 0 cd$             
    83C0 4226 0 cd              83D0 F935 0 cwd$            83E0 4220 0 cat             83F0 41F6 0 (cat)           
    8400 41F2 0 FPRINT$         8410 41EA 0 FLOAD           8420 4196 0 FCOPY           8430 4152 0 _FCOPY          
    8440 413C 0 FCOPY$          8450 05B8 0 rm              8460 4110 0 RENAME          8470 40FE 0 RENAME$         
    8480 40D0 0 APPEND          8490 407C 0 APPEND.BLK      84A0 F934 0 eof             84B0 4056 0 -FERASE         
    84C0 8000 0 >|RCDSZ         84D0 8001 0 RCDSZ           84E0 4042 0 FMAKEOPEN$      84F0 4008 0 FOPEN           
    8500 3FBA 0 FOPEN$          8510 3FAA 0 RW              8520 3FA2 0 RO              8530 3F7C 0 FOPEN#          
    8540 3F76 0 mk              8550 3F32 0 FCREATE$        8560 3F1A 0 FCLOSE          8570 3F0A 0 >FILE           
    8580 3F0A 0 FILEOUT         8590 3EF6 0 FILEIN          85A0 3EAA 0 FPUTB           85B0 3EA6 0 FPUT            
    85C0 3E70 0 FGET            85D0 3E6A 0 s!              85E0 F932 0 fkey            85F0 3E60 0 FREM            
    8600 3E5C 0 fwrite          8610 3E58 0 fread           8620 F930 0 fstat           8630 F920 0 fwrites         
    8640 F910 0 freads          8650 3E48 0 StartCluster    8660 3DE6 0 CLUSTERS?       8670 3DDE 0 endcl           
    8680 3DDA 0 CLUSTER@        8690 3DCC 0 @CLUSTER        86A0 3DA8 0 NextFreeDir     86B0 3D72 0 .ASMONTH        
    86C0 3D66 0 FSTAMP          86D0 3D4C 0 FTIME!          86E0 3D44 0 @DIRBUF!        86F0 3D28 0 FDATE!          
    8700 3D20 0 DECS            8710 3CCE 0 DIR?            8720 3CBE 0 UpdateDir       8730 3CB2 0 OpenDir         
    8740 3C5A 0 >F83            8750 3C4E 0 FILE$           8760 F900 0 fname$          8770 F8C0 0 file$           
    8780 3C2A 0 ?SDCARD         8790 3BEE 0 ?MOUNT          87A0 3B60 0 MOUNT           87B0 F8BC 0 cwdsect         
    87C0 3B54 0 FMAX@           87D0 3AE6 0 .FAT            87E0 3A9A 0 READFAT32       87F0 F8B8 0 fat2            
    8800 F8B4 0 fat1            8810 3A88 0 CLUST>SECT      8820 3A76 0 @FAT            8830 3A70 0 @BOOT           
    8840 3A6A 0 @ROOT           8850 F8B0 0 rootdir         8860 F8AF 0 clshift         8870 F8AE 0 mounted         
    8880 F8A6 0 fatname         8890 F89B 0 volname         88A0 F897 0 serial          88B0 F880 0 rootcl          
    88C0 F878 0 sect/fat        88D0 F874 0 sdsize          88E0 F864 0 fats            88F0 F862 0 rsvd            
    8900 F861 0 sect/clust      8910 F85F 0 byte/sect       8920 F857 0 oemname         8930 F854 0 fat32           
    8940 F81C 0 fatptr          8950 F814 0 parts           8960 3A66 0 FS              8970 3A5E 0 ~F              
    8980 3A56 0 FS@             8990 3A50 0 FSW@            89A0 3A4A 0 FSC@            89B0 3A30 0 FS!             
    89C0 3A16 0 FSC!            89D0 3A08 0 FSADR           89E0 3A02 0 FSADR!          89F0 39FE 0 SD              
    8A00 39F6 0 ~S              8A10 39EE 0 XW@             8A20 39E8 0 XC!             8A30 39E2 0 XC@             
    8A40 39DC 0 X!              8A50 39D6 0 X@              8A60 39CC 0 XADR            8A70 39C6 0 XADR!           
    8A80 39BE 0 FSECT@          8A90 39B8 0 FSIZE@          8AA0 39B0 0 FSIZE           8AB0 801C 0 @FSIZE          
    8AC0 801A 0 @FCLST          8AD0 8018 0 @FDATE          8AE0 8016 0 @FTIME          8AF0 8014 0 @FCLSTH         
    8B00 8010 0 @CDATE          8B10 800E 0 @CTIME          8B20 800B 0 @ATR            8B30 39A4 0 dirbuf          
    8B40 39A0 0 dirfsa          8B50 3998 0 @FILE           8B60 398C 0 FILE#           8B70 3954 0 FILE            
    8B80 F810 0 fboot           8B90 F790 0 dirbufs         8BA0 F780 0 file            8BB0 F770 0 diradrs         
    8BC0 3916 0 SDRD            8BD0 38FE 0 SECTOR          8BE0 38AE 0 RDSECT          8BF0 F76C 0 scanpos         
    8C00 F76A 0 scancnt         8C10 F769 0 scanch          8C20 F768 0 ssflg           8C30 38A2 0 FLUSH           
    8C40 3896 0 WRSECT          8C50 384A 0 SDWR            8C60 383A 0 !SD             8C70 37B2 0 _!SD            
    8C80 3788 0 RDOCR           8C90 376A 0 SDDAT!          8CA0 374C 0 MARKER?         8CB0 373C 0 ?SDTO           
    8CC0 372E 0 STAT@           8CD0 3724 0 ACMD            8CE0 36FC 0 CMD             8CF0 36DA 0 RES@            
    8D00 3684 0 !SDIO           8D10 367A 0 SDPINS          8D20 3676 0 SDERR           8D30 3672 0 SDBUSY          
    8D40 3668 0 SDCLK           8D50 3660 0 SD@             8D60 01D9 0 SDIO32          8D70 01DB 0 SDIO8           
    8D80 364A 0 CARD?           8D90 3646 0 scrc            8DA0 3642 0 sdbuf           8DB0 363E 0 wrflg           
    8DC0 363A 0 sector          8DD0 3634 0 *SDCS           8DE0 B633 0 cspin           8DF0 B630 0 sdpins          
    8E00 F758 0 sdtimer         8E10 F753 0 wrflgs          8E20 F752 0 card?           8E30 F751 0 crc             
    8E40 F750 0 fsel            8E50 F740 0 scrcs           8E60 F730 0 sectors         8E70 F72C 0 sdrd            
    8E80 F728 0 sdwr            8E90 F724 0 ocr             8EA0 F714 0 csd             8EB0 F704 0 cid             
    8EC0 F704 0 sdinfo          8ED0 80FE 0 =dtk            8EE0 8004 0 #files          8EF0 8200 0 BLKSIZ          
    8F00 362A 0 OVER+           8F10 F704 0 @rest           8F20 35DA 0 EASYFILE.fth    8F30 356A 0 BOOT            
    
    Part 3 of 3 continues
  • Part 3 of 3 of the dictionary listing:
    8F40 3560 0 FSQRT           8F50 3556 0 FSIN            8F60 354E 0 F/              8F70 3546 0 F*              
    8F80 353E 0 F-              8F90 3536 0 F+              8FA0 352C 0 F>              8FB0 3522 0 >F              
    8FC0 3502 0 FCMD            8FD0 F700 0 fnumB           8FE0 F6FC 0 fnumA           8FF0 F6F8 0 result          
    9000 F6F4 0 f32cmd          9010 34B0 0 LOADCOG         9020 3476 0 FINDROM         9030 3452 0 NEXTROM         
    9040 33E0 0 lsroms          9050 33D8 0 .rom            9060 9F00 0 romsz           9070 33D2 0 roms            
    9080 33B8 0 OK              9090 335A 0 KEY:            90A0 3342 0 EVAL$           90B0 FB80 0 tib             
    90C0 F6F2 0 tibwr           90D0 3334 0 ID!             90E0 3328 0 ??              90F0 3304 0 .FREQ           
    9100 32DE 0 .AUTO           9110 328C 0 .INTERCOM       9120 326E 0 INTERCOM!       9130 325A 0 PPBAUD!         
    9140 31E8 0 .TASKS          9150 31D8 0 .INDEX          9160 31CE 0 .VARS           9170 316C 0 ~V              
    9180 3166 0 varpen          9190 3148 0 WWORDS          91A0 30D0 0 ~W              91B0 30B4 0 .ATR            
    91C0 3092 0 .MODULES        91D0 3030 0 ~M              91E0 3020 0 +NFA            91F0 3010 0 CTYPE           
    9200 300C 0 PRINT$          9210 2FF6 0 MLEN$           9220 2FEA 0 NFA>BFA         9230 2FDE 0 MU@             
    9240 2FD2 0 MW@             9250 2FC6 0 MC@             9260 2FC0 0 MC@++           9270 2FB8 0 EE?             
    9280 2FA8 0 .ES             9290 2F74 0 lsio            92A0 2F60 0 PIN?            92B0 2F5A 0 ~p              
    92C0 2F50 0 !POLLS          92D0 2F1A 0 +POLL           92E0 2F00 0 ?POLL           92F0 F6E2 0 polls           
    9300 2EA2 0 TIMER.TASK      9310 2E94 0 TIMERJOB        9320 F6E0 0 timerjob        9330 2E42 0 CountDown       
    9340 2E34 0 'C              9350 2E2A 0 'F              9360 2E20 0 .DT             9370 2DEA 0 .ASMONTH        
    9380 2DE0 0 .DATE           9390 2DBE 0 .DTF            93A0 2DBA 0 .TIME           93B0 2D8E 0 .DAY            
    93C0 2D6A 0 DAY             93D0 2D5E 0 DAY@            93E0 8007 0 SUN             93F0 8006 0 SAT             
    9400 8005 0 FRI             9410 8004 0 THU             9420 8003 0 WED             9430 8002 0 TUE             
    9440 8001 0 MON             9450 2D5A 0 DATE!           9460 2CEC 0 DT!             9470 2CEA 0 TIME!           
    9480 2C82 0 DATE@           9490 2C0C 0 TIME@           94A0 F6DC 0 _lt             94B0 2C00 0 DEC>BCD         
    94C0 2BEE 0 BCD>DEC         94D0 2BEA 0 RTC             94E0 2BE2 0 ~R              94F0 2BC4 0 WRRTC           
    9500 2B9E 0 RDRTC           9510 2B92 0 RTC@            9520 2B8A 0 RTC!            9530 2B82 0 <RTC>           
    9540 2B7C 0 <RTC            9550 2B78 0 NORTC           9560 2B74 0 RTCEE           9570 2B70 0 MCP79410        
    9580 2B6C 0 =rtc            9590 2B6A 0 DS3231          95A0 2B66 0 @rtc            95B0 2B5E 0 rtcbuf!         
    95C0 2B56 0 rtcbuf@         95D0 F6D2 0 rtcbuf          95E0 F6C8 0 time            95F0 F6C4 0 runtime         
    9600 2B52 0 WATCHDOG        9610 F6B4 0 wdt             9620 2B4C 0 TIMEOUT?        9630 2B46 0 ALARM           
    9640 2B3E 0 COUNTUP         9650 2B0C 0 +TIMER          9660 2B06 0 TIMEOUT         9670 2AFE 0 ttint           
    9680 F6B2 0 tid             9690 AAFC 0 timers          96A0 2AEC 0 TIMER           96B0 2ADE 0 AUTORUN         
    96C0 2ADA 0 EE              96D0 2AD2 0 ~E              96E0 2ABE 0 BACKUP          96F0 2AB0 0 ?BACKUP         
    9700 2AA0 0 CONBAUD         9710 2A78 0 ECOPY           9720 2A52 0 EFILL           9730 2A3A 0 ELOAD           
    9740 29BE 0 ESAVE           9750 8080 0 ep              9760 29B6 0 I2CPINS         9770 29B2 0 EEPROM          
    9780 299A 0 ESAVEB          9790 2982 0 E!              97A0 296A 0 E@              97B0 295A 0 EW@             
    97C0 294E 0 EW!             97D0 2942 0 EC@             97E0 293C 0 EC!             97F0 2934 0 ENDRD           
    9800 292A 0 EERD            9810 2914 0 @EEWAIT         9820 28EE 0 @EE             9830 F6B1 0 eeadr           
    9840 28B6 0 lsi2c           9850 281C 0 ~I              9860 2810 0 I2C400          9870 2804 0 I2C100          
    9880 27FE 0 ~D              9890 27FC 0 I2CFAST         98A0 27C4 0 FI2C@           98B0 279E 0 I2C@            
    98C0 279C 0 ackI2C@         98D0 2796 0 I2C!            98E0 276C 0 I2C!?           98F0 2750 0 I2CSTOP         
    9900 272E 0 I2CSTART        9910 2750 0 I2C>            9920 2730 0 <I2C>           9930 272E 0 <I2C            
    9940 270E 0 ?I2C            9950 F6B0 0 i2cflg          9960 26A2 0 RECLAIM         9970 2694 0 MARGINS         
    9980 2690 0 BOLD            9990 268C 0 REVERSE         99A0 2686 0 ATR             99B0 2684 0 PLAIN           
    99C0 2672 0 CURSOR          99D0 266A 0 ERLINE          99E0 2662 0 ERSCN           99F0 265C 0 CLS             
    9A00 2652 0 XY              9A10 264A 0 .PAR            9A20 2644 0 CUR             9A30 2640 0 PAPER           
    9A40 2634 0 COL             9A50 2632 0 PEN             9A60 262C 0 ESCB            9A70 262A 0 HOME            
    9A80 2624 0 ESC             9A90 8007 0 white           9AA0 8006 0 cyan            9AB0 8005 0 magenta         
    9AC0 8004 0 blue            9AD0 8003 0 yellow          9AE0 8002 0 green           9AF0 8001 0 red             
    9B00 8000 0 black           9B10 261A 0 LEDS            9B20 25E4 0 LED             9B30 25C2 0 ansi            
    9B40 25B8 0 LEDPIN          9B50 F6AC 0 brg             9B60 255E 0 DHT             9B70 2540 0 DHT?            
    9B80 2520 0 DHTBYTE         9B90 250E 0 DHTBIT          9BA0 F6AA 0 htsav           9BB0 F6A8 0 rh              
    9BC0 F6A6 0 htref           9BD0 F6A5 0 htck            9BE0 24FE 0 DISTANCE        9BF0 24D4 0 PING            
    9C00 24D0 0 MODPINS         9C10 24A6 0 SETPINS         9C20 24A4 0 SPIPINS         9C30 2490 0 MASK?           
    9C40 800A 0 @SPISCK         9C50 800F 0 @SCL            9C60 8005 0 @CNT            9C70 8004 0 @CE             
    9C80 8003 0 @MISO           9C90 8002 0 @MOSI           9CA0 8001 0 @SCK            9CB0 248C 0 *SDA            
    9CC0 2488 0 *SCL            9CD0 2482 0 BLINK           9CE0 2476 0 MUTE            9CF0 2462 0 HZ              
    9D00 245E 0 KHZ             9D10 245A 0 MHZ             9D20 2452 0 HZCON           9D30 2446 0 FRQ             
    9D40 243A 0 DAC!            9D50 2428 0 BPIN            9D60 241E 0 APIN            9D70 240C 0 PLLDIV          
    9D80 2408 0 PLL             9D90 2404 0 DUTY            9DA0 23F8 0 DIFF            9DB0 23F2 0 CTR!            
    9DC0 23E2 0 CTRMODE         9DD0 23E0 0 NCO             9DE0 23DA 0 CTR@            9DF0 23CC 0 CTR             
    9E00 23C4 0 B               9E10 23BC 0 A               9E20 F6A4 0 _ctr            9E30 237A 0 SERIN           
    9E40 236E 0 ISERIAL         9E50 236A 0 ~S              9E60 235E 0 SERIAL          9E70 235A 0 ~S              
    9E80 2348 0 ISEROUT         9E90 233A 0 SEROUT          9EA0 230A 0 TXSER           9EB0 22F0 0 SERBAUD         
    9EC0 22EC 0 baudcnt         9ED0 22D6 0 PRINT&          9EE0 22C6 0 ~1              9EF0 22C2 0 .EMIT           
    9F00 22BA 0 U.R             9F10 22B2 0 .DEC            9F20 22B2 0 PRINTDEC        9F30 22B0 0 .DECX           
    9F40 22AC 0 D.              9F50 2280 0 .DP             9F60 2240 0 PRINTNUM        9F70 2200 0 (.NUM)          
    9F80 21C6 0 (SEP)           9F90 21B6 0 RADIX>          9FA0 21A4 0 >RADIX          9FB0 219A 0 RADIX           
    9FC0 F6A0 0 radix           9FD0 2196 0 +VECTOR         9FE0 2186 0 ~v              9FF0 2184 0 REVECTOR        
    A000 2126 0 (FORGET)        A010 2124 0 FORGET          A020 211C 0 STRIP           A030 20D6 0 (STRIP)         
    A040 2086 0 lsini           A050 206E 0 ?INITS          A060 205C 0 INIT            A070 2040 0 -INIT           
    A080 201C 0 +INIT           A090 2010 0 ~I              A0A0 1FEE 0 inits           A0B0 1FDC 0 COGINIT         
    A0C0 1FD6 0 TASKREGS        A0D0 1FA6 0 RUN             A0E0 1F8A 0 TASK?           A0F0 1F62 0 RND             
    A100 1F50 0 LONGFILL        A110 1F4C 0 3++             A120 1F46 0 3@              A130 1F40 0 3!              
    A140 F698 0 @3              A150 1F3C 0 2++             A160 1F36 0 2@              A170 1F30 0 2!              
    A180 F694 0 @2              A190 1F2C 0 1++             A1A0 1F26 0 1@              A1B0 1F20 0 1!              
    A1C0 F690 0 @1              A1D0 1F18 0 C~~             A1E0 1F10 0 W~~             A1F0 1F08 0 ~~              
    A200 1F00 0 C--             A210 1EF8 0 C++             A220 1EF0 0 W--             A230 1EE8 0 W++             
    A240 1EE0 0 --              A250 1ED8 0 ++              A260 1ED0 0 W>L             A270 1EC8 0 B>L             
    A280 1EC2 0 B>W             A290 1EB6 0 W>B             A2A0 1EA6 0 L>W             A2B0 1E9E 0 >W              
    A2C0 1E8A 0 RELEASE         A2D0 1E70 0 LOCAL           A2E0 1E6A 0 X4              A2F0 1E64 0 X3              
    A300 1E5E 0 X2              A310 1E58 0 X1              A320 1E50 0 @X              A330 F65C 0 @x4             
    A340 F658 0 @x3             A350 F654 0 @x2             A360 F650 0 locals          A370 1E36 0 AVG             
    A380 1E2A 0 OUT             A390 1E28 0 PIN!            A3A0 1E1A 0 ELAPSED?        A3B0 1E12 0 =CNT            
    A3C0 1E0C 0 CNT@            A3D0 1E06 0 P!              A3E0 1E00 0 P@              A3F0 81FF 0 VSCL            
    A400 81FE 0 VCFG            A410 81FD 0 PHSB            A420 81FC 0 PHSA            A430 81FB 0 FRQB            
    A440 81FA 0 FRQA            A450 81F9 0 CTRB            A460 81F8 0 CTRA            A470 81F7 0 DIRB            
    A480 81F6 0 DIRA            A490 81F5 0 OUTB            A4A0 81F4 0 OUTA            A4B0 81F3 0 INB             
    A4C0 81F2 0 INA             A4D0 81F1 0 CNT             A4E0 81F0 0 PAR             A4F0 81F0 0 SPR             
    A500 1DD0 0 STRING          A510 1DAE 0 TABLE           A520 1DAA 0 VAR             A530 1DA4 0 LEFT$           
    A540 1D98 0 RIGHT$          A550 1D92 0 MID$            A560 1D82 0 +CHAR           A570 1D7A 0 APPEND$         
    A580 1D4A 0 $=              A590 1D4A 0 COMPARE$        A5A0 1D2A 0 LOCATE$         A5B0 1D20 0 $!              
    A5C0 1D20 0 COPY$           A5D0 F64C 0 NULL$           A5E0 F648 0 boot            A5F0 1D16 0 CON]            
    A600 1D12 0 CON             A610 1D0A 0 [CON            A620 F644 0 ~c              A630 1D02 0 NULLOUT         
    A640 1CFC 0 MB              A650 1CF6 0 KB              A660 1CEA 0 R@              A670 1CE0 0 INVERT          
    A680 1CDC 0 DROP;           A690 1CDA 0 MOD             A6A0 1CD4 0 2OVER           A6B0 1CCC 0 3DUP            
    A6C0 1CBE 0 2SWAP           A6D0 1CBA 0 @.              A6E0 1CB4 0 =>              A6F0 1CB2 0 <=              
    A700 1CA4 0 DS              A710 1C9E 0 DS+             A720 1C82 0 clong           A730 1C6E 0 cword           
    A740 1C62 0 cbyte           A750 1C52 0 A>              A760 1C42 0 >A              A770 1C3C 0 A@              
    A780 F624 0 astk            A790 8000 0 FALSE           A7A0 00CC 0 0-1             A7B0 00CC 0 TRUE            
    A7C0 00EB 0 WAITHI          A7D0 00EE 0 WAITLO          A7E0 0304 0 s               A7F0 0098 0 |<              
    A800 1C36 0 ]               A810 1C2C 0 =[              A820 0E44 0 LONGS           A830 0E32 0 BYTES           
    A840 0E42 0 LONG            A850 0E36 0 WORD            A860 0E4E 0 BYTE            A870 0E2E 0 ORG             
    A880 1C36 0 BREAK           A890 1C2C 0 CASE            A8A0 1C26 0 SWITCH@         A8B0 1C20 0 SWITCH          
    A8C0 1C08 0 QUIET           A8D0 1BF8 0 NUM>STR         A8E0 F614 0 NUM$            A8F0 1BB8 0 NUMBER          
    A900 1BB2 0 LIMIT           A910 1B9C 0 >|              A920 1B8E 0 WW!             A930 1B82 0 U@              
    A940 1B72 0 U!              A950 F610 0 ulong           A960 1B66 0 ANYCASE         A970 1B60 0 PUBLIC          
    A980 1B5A 0 PRIVATE         A990 1B54 0 UNSMUDGE        A9A0 1B4E 0 IMMEDIATE       A9B0 1B46 0 @HATR           
    
    Oh no, there's still more:
  • Ok, this should be it:
    A9C0 1B3E 0 CLKFREQ         A9D0 1B00 0 EXTEND.fth      A9E0 0040 0 NOP             A9F0 0013 0 DUP             
    AA00 034A 0 2DUP            AA10 004B 0 OVER            AA20 0049 0 DROP            AA30 0048 0 2DROP           
    AA40 0051 0 SWAP            AA50 0055 0 ROT             AA60 0350 0 -ROT            AA70 08CA 0 NIP             
    AA80 0047 0 3DROP           AA90 0012 0 ?DUP            AAA0 004D 0 3RD             AAB0 004F 0 4TH             
    AAC0 0180 0 >R              AAD0 0183 0 R>              AAE0 017D 0 !RP             AAF0 0202 0 !SP             
    AB00 0082 0 AND             AB10 0084 0 ANDN            AB20 0086 0 OR              AB30 0088 0 XOR             
    AB40 02AA 0 ROL             AB50 02BA 0 ROR             AB60 008A 0 SHR             AB70 008A 0 >>              
    AB80 008E 0 8>>             AB90 008C 0 SHL             ABA0 008C 0 <<              ABB0 0092 0 8<<             
    ABC0 008F 0 2/              ABD0 0094 0 2*              ABE0 0093 0 4*              ABF0 0214 0 SAR             
    AC00 009D 0 SPLIT9          AC10 0096 0 REV             AC20 0098 0 MASK            AC30 009A 0 >N              
    AC40 009B 0 >B              AC50 00A3 0 0=              AC60 00A3 0 NOT             AC70 005F 0 1+              
    AC80 005E 0 1-              AC90 005C 0 +               ACA0 005B 0 -               ACB0 0059 0 2+              
    ACC0 0058 0 4+              ACD0 181A 0 2-              ACE0 0872 0 MIN             ACF0 0876 0 MAX             
    AD00 08DE 0 *               AD10 0065 0 UM*             AD20 08C8 0 U/              AD30 08BE 0 U/MOD           
    AD40 08E4 0 /               AD50 0074 0 UM/MOD64        AD60 0075 0 UM/MOD32        AD70 08D0 0 */              
    AD80 08FC 0 UM*/            AD90 0090 0 ABS             ADA0 0061 0 ?NEGATE         ADB0 0063 0 NEGATE          
    ADC0 0125 0 FROM            ADD0 0127 0 BY              ADE0 0129 0 ADO             ADF0 012C 0 FOR             
    AE00 013F 0 NEXT            AE10 013F 0 LOOP            AE20 013D 0 +LOOP           AE30 0123 0 I               
    AE40 0344 0 J               AE50 0330 0 LEAVE           AE60 0338 0 FOR@            AE70 0332 0 FOR!            
    AE80 033E 0 BY!             AE90 032A 0 LP!             AEA0 17B6 0 IF              AEB0 17BE 0 ELSE            
    AEC0 17D2 0 THEN            AED0 17D2 0 ENDIF           AEE0 1770 0 BEGIN           AEF0 1774 0 UNTIL           
    AF00 179A 0 AGAIN           AF10 17B6 0 WHILE           AF20 178C 0 REPEAT          AF30 00B6 0 IC!             
    AF40 00AF 0 IC@             AF50 00B0 0 C@              AF60 00B2 0 W@              AF70 00B4 0 @               
    AF80 00B8 0 C+!             AF90 00BA 0 C!              AFA0 00AC 0 C@++            AFB0 00BC 0 W+!             
    AFC0 00BE 0 W!              AFD0 00C0 0 +!              AFE0 00C2 0 !               AFF0 0826 0 C~              
    B000 082E 0 W~              B010 0836 0 ~               B020 029A 0 BIT?            B030 0890 0 SET?            
    B040 087A 0 SET             B050 0886 0 CLR             B060 1A1C 0 BIT!            B070 0042 0 CMOVE           
    B080 08AC 0 ERASE           B090 08AE 0 FILL            B0A0 0896 0 <CMOVE          B0B0 0000 0 RESET           
    B0C0 003C 0 0EXIT           B0D0 003E 0 EXIT            B0E0 0356 0 ?EXIT           B0F0 014F 0 CALL            
    B100 0150 0 JUMP            B110 00EE 0 (WAITPNE)       B120 01D9 0 RUNMOD          B130 00EB 0 (WAITPEQ)       
    B140 0152 0 (EMIT)          B150 0154 0 (EMITX)         B160 015C 0 LOADMOD         B170 016B 0 COG@            
    B180 016F 0 COG!            B190 023C 0 COGSTOP         B1A0 024A 0 pCOGINIT        B1B0 0254 0 COGID           
    B1C0 0260 0 REBOOT          B1D0 0268 0 CLK             B1E0 0276 0 CLKSET          B1F0 0222 0 DELTA           
    B200 0162 0 WAITCNT         B210 0286 0 LAP             B220 04A0 0 .LAP            B230 046E 0 LAP@            
    B240 00FB 0 CLOCK           B250 0100 0 CLKIN           B260 00F7 0 CLKOUT          B270 00CF 0 H               
    B280 00D3 0 L               B290 00D2 0 P               B2A0 00D5 0 F               B2B0 00F4 0 SHROUT          
    B2C0 00F1 0 SHRINP          B2D0 00DF 0 OUTSET          B2E0 00DC 0 OUTCLR          B2F0 00E0 0 OUTPUTS         
    B300 00E3 0 INPUTS          B310 00DE 0 HIGH            B320 00DB 0 LOW             B330 00E2 0 FLOAT           
    B340 00E5 0 PIN@            B350 00E6 0 IN              B360 0106 0 SPIWRB          B370 0104 0 SPIWR16         
    B380 0107 0 SPIWR           B390 0111 0 SPIRD           B3A0 0119 0 SPICE           B3B0 0842 0 0<>             
    B3C0 0848 0 <>              B3D0 085A 0 WITHIN          B3E0 084E 0 U>              B3F0 00A1 0 =               
    B400 00A6 0 >               B410 0854 0 <               B420 00A9 0 U<              B430 083E 0 0<              
    B440 0366 0 HEX             B450 0362 0 DECIMAL         B460 035E 0 BINARY          B470 090A 0 READBUF         
    B480 096A 0 KEY             B490 09B8 0 WKEY            B4A0 0984 0 (KEY)           B4B0 0966 0 KEY!            
    B4C0 1334 0 doKEY           B4D0 078E 0 EMIT            B4E0 0676 0 CLS             B4F0 067A 0 SPACE           
    B500 07FA 0 SPACES          B510 07FE 0 EMITS           B520 067E 0 BELL            B530 0686 0 CR              
    B540 0682 0 <CR>            B550 07DC 0 TAB             B560 07DA 0 TABS            B570 07EC 0 XTAB            
    B580 0690 0 SPINNER         B590 0512 0 .HEX            B5A0 0526 0 .BYTE           B5B0 0534 0 .WORD           
    B5C0 053C 0 .LONG           B5D0 036E 0 @PAD            B5E0 0376 0 HOLD            B5F0 0380 0 >CHAR           
    B600 03D8 0 #>              B610 03A0 0 <#              B620 03AA 0 #               B630 03CE 0 #S              
    B640 03E4 0 <D>             B650 0408 0 PRINT$          B660 041C 0 CTYPE           B670 0164 0 LEN$            
    B680 0402 0 U.              B690 04FE 0 .DP             B6A0 03F6 0 PRINT           B6B0 03F6 0 .               
    B6C0 042C 0 ZPRINT          B6D0 0DB4 0 CREATE          B6E0 0DB8 0 CREATE$         B6F0 0D96 0 GETWORD         
    B700 09C6 0 SEARCH          B710 09E8 0 FINDSTR         B720 0A72 0 NFA>BFA         B730 0A8C 0 CFA>NFA         
    B740 0AAC 0 NFA>NFA         B750 0C72 0 @NAMES          B760 809A 0 names           B770 0AB4 0 WORDS           
    B780 0EF4 0 UNSMUDGE        B790 0C68 0 ALLOT           B7A0 0C6C 0 ALLOCATED       B7B0 09C2 0 HERE            
    B7C0 0C4E 0 ,               B7D0 0C48 0 ||              B7E0 0C2C 0 |               B7F0 0BD6 0 W,              
    B800 0BC4 0 EXECUTE         B810 8018 0 VER             B820 0B02 0 .VER            B830 1AAE 0 TACHYON         
    B840 1A22 0 END             B850 199A 0 CONSOLE         B860 1A16 0 ECHO            B870 031C 0 us              
    B880 0308 0 ms              B890 0304 0 seconds         B8A0 0304 0 second          B8B0 0F1E 0 DISCARD         
    B8C0 02F6 0 TASK            B8D0 02FE 0 REG             B8E0 F800 0 BUFFERS         B8F0 198E 0 COLD            
    B900 0562 0 RAM             B910 0564 0 SETDUMP         B920 0590 0 DUMPX           B930 058C 0 DUMP            
    B940 0660 0 DUMPW           B950 0666 0 DUMPL           B960 0670 0 DUMPC           B970 0654 0 DUMPA           
    B980 065A 0 DUMPAW          B990 0588 0 QD              B9A0 081A 0 DEPTH           B9B0 071C 0 .S              
    B9C0 0FAC 0 DEBUG           B9D0 0F44 0 .FREE           B9E0 0F56 0 .STATS          B9F0 02C8 0 IDLE            
    BA00 1218 0 NOOP            BA10 0B48 0 ---             BA20 0B48 0 \               BA30 0B48 0 ''              
    BA40 0B5E 0 (               BA50 0B72 0 {               BA60 1218 0 }               BA70 0B68 0 IFDEF           
    BA80 0B6E 0 IFNDEF          BA90 0C8C 0 "               BAA0 03E8 0 (")             BAB0 0C92 0 ."              
    BAC0 0C92 0 PRINT"          BAD0 0704 0 (.")            BAE0 0E5C 0 ==              BAF0 0E2E 0 org             
    BB00 80B8 0 @org            BB10 0E4E 0 byte            BB20 0E36 0 word            BB30 0E42 0 long            
    BB40 0E32 0 bytes           BB50 0E38 0 words           BB60 0E44 0 longs           BB70 0E26 0 ALIGNORG        
    BB80 0E18 0 ALIGN           BB90 0E82 0 :               BBA0 0EAA 0 pre             BBB0 0EA2 0 pub             
    BBC0 0EFE 0 pri             BBD0 0EEA 0 ;               BBE0 0EB2 0 RETURN          BBF0 0F06 0 [C]             
    BC00 0C88 0 '               BC10 0C7E 0 [']             BC20 0C76 0 NFA'            BC30 8000 0 OFF             
    BC40 00CC 0 ON              BC50 00CC 0 0-1             BC60 19DE 0 ALIAS           BC70 0BAC 0 GRAB            
    BC80 13AC 0 [WS2812]        BC90 14B8 0 [SDRDF]         BCA0 1458 0 [SDRD]          BCB0 14F0 0 [SDWR]          
    BCC0 152C 0 [SDIO]          BCD0 1594 0 [SSD!]          BCE0 159C 0 [PWM32]         BCF0 15E0 0 [PWM32!]        
    BD00 1640 0 [PLOT]          BD10 1670 0 [ROL3]          BD20 16A0 0 [CAP]           BD30 16F8 0 [WAV]           
    BD40 1750 0 [MCP32]         BD50 80BA 0 dmm             BD60 80A8 0 errors          BD70 80A0 0 uhere           
    BD80 80A2 0 uthere          BD90 80B0 0 flags           BDA0 808C 0 prompt          BDB0 80A6 0 uauto           
    BDC0 80B2 0 keypoll         BDD0 80C4 0 lastkey         BDE0 1A02 0 rxpars          BDF0 8092 0 rx              
    BE00 8716 0 id              BE10 9234 0 keytable        BE20 7E35 0 @WORD           BE30 7E18 0 uemit           
    BE40 7E1A 0 ukey            BE50 7E1E 0 base            BE60 7E24 0 num             BE70 7E14 0 uswitch         
    BE80 0040 0 V4              BE90 0040 0 *end*
    
  • caskaz wrote: »
    I have question about another cog operation.
    ' MYTASK TASK? RUN
    
    How does MYTASK stop?


    I usually code MYTASK as an infinite loop. A simple way is to control the loop (MYTASK) behavior is to check the status of a word in the loop and continue or stop. You could also use the word to either do work in the loop or just NOP. The word can be changed from the console cog or another cog. I have only used two cogs in Tachyon ever so far, one to run an async serial receive buffer and the main console cog. In the main console cog I would just use timers and KEYPOLL to run everything else.

  • Ok, this should be it:
    A9C0 1B3E 0 CLKFREQ         A9D0 1B00 0 EXTEND.fth      A9E0 0040 0 NOP             A9F0 0013 0 DUP             
    AA00 034A 0 2DUP            AA10 004B 0 OVER            AA20 0049 0 DROP            AA30 0048 0 2DROP           
    AA40 0051 0 SWAP            AA50 0055 0 ROT             AA60 0350 0 -ROT            AA70 08CA 0 NIP             
    .
    .
    .
    
    Wow

  • FEATURE REQUEST:

    I'm doing i2c with clockstreching in Tachyon.
    And need to keep sda and scl low while i change DIRA.
    Your SHROUT toggles OUTA, so I can not use it.
    CLOCK also uses OUTA, where I need to CLOCK DIRA.
  • frida wrote: »
    FEATURE REQUEST:

    I'm doing i2c with clockstreching in Tachyon.
    And need to keep sda and scl low while i change DIRA.
    Your SHROUT toggles OUTA, so I can not use it.
    CLOCK also uses OUTA, where I need to CLOCK DIRA.
    Oh, the rare clock stretch. I suppose that could be handled ok. I will have a look at it shortly.
  • FEATURE REQUEST:

    I would like to get an integration "channel" with a tachyon cog to support the ESP8266 asynchronous webserver/wifi.

    Currently I'm submitted Tachyon words via the CONsole RX cog and having the Tachyon words return JSON results.

    Looking for a better integration methodology, sanity check.

  • @caskaz

    Here is simple code to exercise a task example
    @org W@	== @rest	--- remember
    
    
    \ * SIMPLE ROUTINE TO EXERCISE A TASK 
    \ * AND LEDS  ON THE  PROP QUICKSTART BOARD
    \ * 
    \ * USE THE WORD "STASK" TO START THE TASK 
    \ * AND "TASKS" TO STOP THE TASK
    
    LONG RFLAG    --- is the task to run
    LONG CNTR1    --- something to hold a count
    
    OFF RFLAG  !   --- task not running
    
    
    
    : MYTASK
      16 longs mystk   --- give task some stack space, not needed here but for more complex tasks
      mystk LP!
      BEGIN
         RFLAG @ IF   --- check the flag
           CNTR1 ++   --- increment the CNTR1
           --- do more sutf
         ELSE
           NOP      --- don't do anything
         THEN
      AGAIN
    ;
    
    
    
    : STOPT   OFF RFLAG ! ;   --- stop the tasks
    
    : STARTT               ---  start the task, don't start twice so STOPT first
      ON RFLAG !   
    ;
    
    : RCNTR1    CR CNTR1 @  . ;    --- read the counter
    
    
    STOPT   --- start task in stopped state
    
    ' MYTASK TASK? RUN      --- load the task when this module loads
     
    END
    

    Sample run
    ( 0048 $3938  ok )   rcntr1                                                     
                                                                                    
    0                                                                               
    ( 0049 $3938  ok )   startt                                                     
    ( 0050 $3938  ok )   rcntr1                                                     
                                                                                    
    405394                                                                          
    ( 0051 $3938  ok )                                                              
    649904                                                                          
    709895                                                                          
    729898                                                                          
    746051stopt                                                                     
    ( 0052 $3938  ok )   rcntr1                                                     
                                                                                    
    1006126                                                                         
    ( 0053 $3938  ok )                                                              
    1006126                                                                         
    1006126                                                                         
    1006126                                                                         
    1006126                                                                         
    ( 0054 $3938  ok )   .TASKS                                                     
                                                                                    
    00: CONSOLE          0000 00 00 00 00 00 00                                     
    02: ?                2EA2 01 00 00 00 00 00                                     
    04: IDLE             0000 01 00 00 00 00 00                                     
    05: IDLE             0000 01 00 00 00 00 00                                     
    06: IDLE             0000 01 00 00 00 00 00                                     
    07: MYTASK           390A 01 00 00 00 00 00                                     
    ( 0055 $3938  ok )   
    
    
  • MJBMJB Posts: 1,235
    D.P wrote: »
    FEATURE REQUEST:

    I would like to get an integration "channel" with a tachyon cog to support the ESP8266 asynchronous webserver/wifi.

    Currently I'm submitted Tachyon words via the CONsole RX cog and having the Tachyon words return JSON results.

    Looking for a better integration methodology, sanity check.

    what are you running on the ESP8266?
    When you run Lua, then you have a Read-Eval-Print loop like in Tachyon.
    So depending if you want to set up a very generig interface or something more specific
    the approach might differ.
    I used it a year ago to send ping - water level measurements from Prop via ESP to ThingSpeak.

    I just defined the sending function on the ESP and send the function call with parameters from the Tachyon/Prop.
  • D.PD.P Posts: 790
    edited 2017-07-10 04:48
    @MJB I'm running a standard C++ build that has an asynchronous web server and tcp stack, not Lua. I have JS webpages served from this resource. AJAX calls in the webpages get serviced on the ESP and the handler sends TACHYON words via the CONsole RX port. Tachyon responds with JSON via the CONsole TX to the ESP handler which then propagates the JSON back to the originating AJAX call from the web page.

    I am able to handle gauge data..., update stuff such as time date, configurations .... this way. Works pretty good right now. The build even has a HTML TERMinal built in that connects to the Tachyon CONsole while at the same time the AJAX calls are being handled. This was created by me with much "tech debt" and is not ideal. It would be grand to have a Tachyon COG dedicated to the AJAX channel.

    The build also has a complete 4 Mb file system with file browser (CRUD too) and ACE Editor instance that is HTML, CSS, JS and FORTH aware, it's all actually very cool and what it does on that little $5 chip is amazing, much like Tachyon on the P1. Together they are really nice so far.
  • Hi Peter!
    I have made a couple of changes.

    To get TACHYON to load on my Propeller with 32K I have
    Changed the following in EXTEND.FTH:
    All "1 I2C@" to "-1 I2C@" because CLKOUT makes a shift to the left so that
    there shall many shift to until we get one 1 so the DIRA can be added to input, so
    sda will be 1 at the last reading.
    
    'I2C support
    'CLKOUT (iomask dat - iomask dat2) REG6 = iomask) Shift msb bit out, clock high, clock low
    CLKOUT andn OUTA, tos + 1 'ensure output will be active low
                            Breath OUTA, clockpins
                            Shl tos, # 1 wc
                            Muxnc DIRA, tos + 1 'make it an output if it is a low else float
    'CLOCK (REG6 = iomask) Toggle multiple bits on the output)
    CLOCK xor OUTA, clockpins
                            Tjz clkdly, unext
                            Mov x, clkdly
                            Djnz x, $
                            Jmp unext
    

    There are also changes in "@EEWAIT" and "@EE"

    In "BOOT" I have changed so 32K does not spend time on anything that does not fit.
    pub BOOT
    	' TIMER.TASK 2 RUN
    	!POLLS
    	PLAIN .MODULES CR .AUTO .FREQ	lsini CR
    	
      ep 128 = IF 
    		f32cmd 3 " F32     " LOADCOG  ( start up F32 )
      THEN
    

    The last thing I've moved and changed is for 64K
    I have made so my 64k RTC is activated at startup.
    pri ~I
    	SWITCH
    	$DE CASE " MCP79410" BREAK
    	$AE CASE " RTC EEPROM" BREAK
    	SWITCH@ 4 >> SWITCH
    	$4 CASE " I/O EXPANDER" BREAK
    	$7 CASE " DISPLAY I/O" BREAK
    	$A CASE " EEPROM" BREAK
    	$D CASE " RTC" I =rtc BREAK
    	" unknown"
    	;
    
    pub lsi2c	CR PRINT" *** I2C ***" 2 BY 128 FOR <I2C I 1+ I2C!? 0= IF CR I .BYTE SPACE I ~I PRINT$ THEN I2C> NEXT ;
    
    
    Hope there is some of what you can use!

    Now I'm going to play with my RTC.

    Attached a zip file with my changes and the original as well as a diff file
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2017-07-12 02:51
    @frida - The 1 I2C@ is not data, it is simply a flag, true or false, so the actual true doesn't matter.
    What is "Breath"? This is the only change I see in this section, normally this is an "andn".
    Breath OUTA, clockpins
    

    Skipping F32 during BOOT on a 32k system doesn't really make a big difference to the boot time anyway, however I recommend upgrading any 32k EEPROMs you have to 64k to gain many benefits with Tachyon. My interactive shell I'm testing uses upper EEPROM for the interactive line history and editing which is really useful during testing. Of course the upper 32k can store the dictionary after COMPACT and also the ROMs and other configuration parameters that can persist after a Prop tool load which wipes the first 32k.

    That's a good idea to add that "I =rtc" to the lsi2c to automatically enable any RTC device it finds. However I just realized that this will also override other types of RTC at other addresses, so perhaps I will make it skip the setting if it is already set.
    @rtc NOT IF I =rtc THEN
    
    I try to make these extensions general rather than tied to specific hardware.


    I will try to look at adding the I2C clock stretching which btw only occurs during the ack clock as per the I2C specs.
  • ' I2C support
    ' CLKOUT ( iomask dat -- iomask dat2 ) REG6=iomask ) Shift msb bit out,  clock high, clock low
    CLKOUT                  andn    OUTA,tos+1              ' ensure output will be active low
                            andn    OUTA,clockpins
                            shl     tos,#1 wc
                            muxnc   DIRA,tos+1             ' make it an output if it is a low else float
    ' CLOCK ( REG6=iomask ) Toggle multiple bits on the output)
    CLOCK           xor     OUTA,clockpins
                            tjz    clkdly,unext
                            mov     X,clkdly
                            djnz    X,$
                            jmp     unext
    

    Sorry I didn'n see what
    google translate was doing.
  • @frida - I can't see any difference from my code. What changes did you make?
  • pub ackI2C@ 	0
    --- 25.5us @96MHz
    pub I2C@	( ack -- data \ Fetch a byte from the I2C bus - mirror ack signal 0 in = 0 out ) \ 36.6us
    	*SDA DUP FLOAT MASK 0  ( ack iomask dat )
    	  8 FOR CLKIN CLOCK NEXT
    	OVER OUTSET				--- make SDA an output
    	-ROT SWAP CLKOUT DROP CLOCK INPUTS
     	;
    
    You can call ackI2C@ which is
    0 I2C@
    and
    1 I2C@
    when it sent its flag 0 or 1

    As I understand it:

    if sending a 0 or a 1 to CLKOUT
    	-ROT SWAP CLKOUT DROP CLOCK INPUTS
    
    it is shifting 1 left
    so bit 31 is in carry which is 0 and write a 1 to DIRA which set SDA low.


    but if I use
    -1 I2C@

    it sent -1 bit 31 is 1, shiftet 1 left, then carry is 1,
    which sent a 0 to DIRA which set SDA high.
    ' I2C support
    ' CLKOUT ( iomask dat -- iomask dat2 ) REG6=iomask ) Shift msb bit out,  clock high, clock low
    CLKOUT                  andn    OUTA,tos+1              ' ensure output will be active low
                            andn    OUTA,clockpins
                            shl     tos,#1 wc
                            muxnc   DIRA,tos+1             ' make it an output if it is a low else float
    ' CLOCK ( REG6=iomask ) Toggle multiple bits on the output)
    CLOCK                   xor     OUTA,clockpins
                            tjz    clkdly,unext
                            mov     X,clkdly
                            djnz    X,$
                            jmp     unext
    

    As I understand the last read from I2C shall set SDA high = nack.

    Is my understanding correct?


  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2017-07-12 08:49
    Help help

    I've just had an idea for implementing a help file. If I assign a file for every word and place them inside a help folder it becomes easier to maintain and easy for a HELP function to find and display.

    Now here's the thing, I have to create all these little files but it would be helpful if I had some help. If I create a Dropbox folder we could all edit then this would be helpful.
    Sorry, I can't help myself. Oh, there I go again....

    BTW - since I stick to 8.3 names for files I would have a lookup file that had the real name and the 8.3 name. The HELP command could lookup this file first and then know which file to open.


  • Frida - I think I see what you mean, so the change that you made was to use a -1 TRUE flag instead of 1 since CLKOUT shifts the MSB. That looks like that small bug was introduced when I added those CLKIN and CLKOUT instructions in V4 although I haven't noticed any side effects yet :)

    I see that I have 1 I2C@ in quite a number of places so I may as well define a nakI2C@ etc. When I have some time I will test it out properly and implement the clock stretch at the same time.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2017-07-12 13:43
    Re HELP HELP

    As always, a good way to formulate a specification is to try various approaches. Well I found that what I really needed was an index file that had a list of all the words and which file to use. A lot of these words have a common help file, so all I do is find the word in the index and open up its help file while highlighting the word in bold with the simple rule that the first word on a new line that matches is close enough :)

    Index file entries are simple enough, the first word on a line is the help file name and then after tabs or spaces are a list of words on that same line. There is no real size limit for a line but the help system works well enough too to have lines split up so that they are easier to maintain.

    An index file is just a normal text file and looks a bit like this:
    LOOPS.TXT	FOR NEXT FROM BY FOR! FOR@ BY! LP! I J ADO LOOP+ LEAVE
    PINIO.TXT	LOW HIGH FLOAT OUTCLR OUTSET OUTPUTS H L N P F PIN@ IN
    MATHS.TXT	1+ 1- + - 2+ 4+ 2- MIN MAX * UM* U/ U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS ?NEGATE NEGATE
    I2C.TXT		I2C400 I2C100 ~D I2CFAST FI2C@ nakI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP I2CSTART I2C> <I2C> <I2C ?I2C i2cflg
    SERIAL.TXT	SHROUT SHRINP SPIWRB SPIWR16 SPIWR SPIRD SPICE
    MEMORY.TXT	IC! IC@ C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ BIT? SET? SET CLR BIT! CMOVE ERASE FILL <CMOVE
    

    If you type HELP SHROUT it will search the index file for that keyword and when found it will use the file name found at the start of the line to open up the file and display that with the highlighted keyword. ANSI terminals respond to color and character attributes so it would be fairly easy to at least place the keyword in BOLD or some color.

    Now, back to the original question, can anyone help with the help? If so I will look to upgrade my Dropbox account so I can add permissions if that will work but what I want is like a Tachyon folder that automatically synchs across users. Ideas?
  • D.PD.P Posts: 790
    edited 2017-07-12 15:20
    I would contribute to HELP just so I can HELP myself with all the words I need HELP with.

    Also the Intro needs HELP since 4x5 is the kernel we should be all developing upon.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2017-07-13 00:32
    D.P wrote: »
    I would contribute to HELP just so I can HELP myself with all the words I need HELP with.

    Also the Intro needs HELP since 4x5 is the kernel we should be all developing upon.

    Hey, less grumble, more go bro! :)

    If you yourself incur some Tachyon "tech debt" doing what you can rather than balking at what you can't and then we have that multiplied by X contributors doing the same then we all reap the benefits collectively. I can fill in all the bits that can't be done by anyone else and of course provide inside information into how best to use it and why or have myself shown a better way.

    On another thread there was a discussion about teaching and learning which shows that if handled properly by the teacher that student teaching student is the best way of learning - "Qui docet discit"

    BTW, I am adding HINT to HELP just for one-liner extractions which may also be useful for embedding into EEPROM.

    BTW, I will change the title of the intro to indicate V3 and save that as a copy so that the original link will point to the latest version.


  • caskazcaskaz Posts: 957
    edited 2017-07-15 01:55
    Hi.

    I try to rite code for SHT31.
    This is first i2c-device with ClockStreching although I have 50pcs for i2c-device.
    But I cannot detect SCL-low at ClockStreching enable mode.
    Do you have any idea?
    ( 0158 $39D6  ok )   i2cscan
          0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
    00   00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <-- SHT31
    10   -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20   -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30   -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40   -- -- -- -- -- 45 -- -- -- -- -- -- -- -- -- -- <-- SHT31
    50   50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <-- eeprom
    60   -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70   -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    I2C devices:2
    ( 0159 $39D6  ok )   3 1shot  <--Repeatability:High  ClockStreching disable
    81.80%  28.7degreeC
    ( 0160 $39D6  ok )   1 1shot  <--Repeatability:HighMedium  ClockStreching enable
    -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
    

    Peter, I checked i2c word.
    These use [*SCL HIGH *SDA HIGH].
    Some i2c-device might not operate well.
    I modified them because PropForth was same as.
    https://github.com/caskaz/PropForth5.5/tree/master/HW_Extensions/i2c_device
  • MJBMJB Posts: 1,235
    Re HELP HELP

    As always, a good way to formulate a specification is to try various approaches. Well I found that what I really needed was an index file that had a list of all the words and which file to use. A lot of these words have a common help file, so all I do is find the word in the index and open up its help file while highlighting the word in bold with the simple rule that the first word on a new line that matches is close enough :)

    Index file entries are simple enough, the first word on a line is the help file name and then after tabs or spaces are a list of words on that same line. There is no real size limit for a line but the help system works well enough too to have lines split up so that they are easier to maintain.

    An index file is just a normal text file and looks a bit like this:
    LOOPS.TXT	FOR NEXT FROM BY FOR! FOR@ BY! LP! I J ADO LOOP+ LEAVE
    PINIO.TXT	LOW HIGH FLOAT OUTCLR OUTSET OUTPUTS H L N P F PIN@ IN
    MATHS.TXT	1+ 1- + - 2+ 4+ 2- MIN MAX * UM* U/ U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS ?NEGATE NEGATE
    I2C.TXT		I2C400 I2C100 ~D I2CFAST FI2C@ nakI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP I2CSTART I2C> <I2C> <I2C ?I2C i2cflg
    SERIAL.TXT	SHROUT SHRINP SPIWRB SPIWR16 SPIWR SPIRD SPICE
    MEMORY.TXT	IC! IC@ C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ BIT? SET? SET CLR BIT! CMOVE ERASE FILL <CMOVE
    

    If you type HELP SHROUT it will search the index file for that keyword and when found it will use the file name found at the start of the line to open up the file and display that with the highlighted keyword. ANSI terminals respond to color and character attributes so it would be fairly easy to at least place the keyword in BOLD or some color.

    Now, back to the original question, can anyone help with the help? If so I will look to upgrade my Dropbox account so I can add permissions if that will work but what I want is like a Tachyon folder that automatically synchs across users. Ideas?

    Hi Peter,
    just took some time to have a look at the proposed help system.

    And I was wondering. Quite some time ago we started some help system
    for EXTEND, which was to take the help documentation (onliner, help, examples) directly from the source code and maybe create the files via a little script (or even Tachyon itself during load ??, and writing the SD files ??)
    Usually this way source & doc do stay in sync better.
    Also I like having the descriptions close by when studying your source ;-).
    Otoh I see that big doc/and especially examples blow up the source size.
    So I am not exactly sure which approach really is the better.
    Definitely ANY documentation will beat NO documentation ;-)

    I haven't looked into using Dropbox for collaboration since it does not run on my old XP-Box
    any more. But I might be able to use the Win7 Laptop after I find out how to set up 2 different drop box accounts on one single PC.
  • MJBMJB Posts: 1,235
    Notes: GETWORD is being deprecated in V4.5 in favor of deferred words causing unknown words to be converted to strings.
    This preserves the flow of the input stream rather than diverting to GETWORD.
    Example: FOPEN myfile --- FOPEN is deferred to execute at the end of the line so myfile is converted to a string which
    the deferred FOPEN can then use without interrupt the input stream.
    will this imply I can only have one of those on one line?
    Or can I have multiple deferred actions?
    GETWORD wsa quite handy some times, so I will need to study how to acomplish those tasks the new way ...

  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2017-07-15 01:47
    @mjb - what we need is something that is in one place and easy to maintain and just works as is. Having help information embedded in the source is handy but awkward too. There is no reason though that I can't also place the source files in the help folder so that the source code can be shown along with the help. So we have HELP and HINT and maybe SOURCE to access these files etc.

    As to this new deferred action it is something I wanted to implement for quite a while as it is also useful for parsing non-Forth style text. Besides GETWORD really needs all the editing functions in it to work properly and although that could be tied in with other common functions it was not the way I wanted to go as I was reducing it down to single character processing. You may have noticed that if you typed something in interactively that it didn't really support and kind of editing and I would make mistakes all the time. The new interactive shell which is optional allows line by line processing even though the kernel processes characters plus it also feels more like a traditional Forth interaction:
    .. 12 34 + . 46 ok 
    
    The .. is a handy but non intrusive line prompt and I may combine some of these elements into the kernel itself. My experiment with having the line number and code pointer etc as a prompt is fine I think, but as an option and as the default mode during a TACHYON END block load.


    @caskaz - this clock-stretching thing is starting to get my attention although I have never ever had to use it myself but I can see that this is the approach that some sensor manufacturers have taken. Personally I would not want a device to stall, I'd prefer to read what it's got from the previous and still current reading without stalling. However, there are sometimes good reasons why a manufacturer would do it the way they do, and sometimes...

    I will have a closer look at what you've done and try out a few things.
Sign In or Register to comment.