Tachyon V4 "DAWN" - exploring new worlds

1356710

Comments

  • Most of the kernel seems to be working fine and I even have EEPROM working too. Next step is to build in the BACKUP word and then test out the file system.

    There's an "EXTEND-V4.FTH" in the testing folder as well which I am using for testing at present.

    I've started a user editable document with bits of information about Tachyon+. It's a bit haphazard at the moment as I document things as I think of them but I will tidy up the format later.
    ( 0003 1480 ok )   pub fibo ( n -- f ) 
    ( 0004 1480 ++ )        0 1                           \  
    ( 0005 1480 ++ )        ROT                           \  
    ( 0006 1480 ++ )        FOR BOUNDS  NEXT 
    ( 0007 1480 ++ )        DROP 
    ( 0008 1480 ++ )        ; 
    ( 0009 1490 ok )    
    ( 0010 1490 ok )   : fibos 47 6 DO CR ." fibo(" I . ." ) = " I  LAP fibo  LAP   ."  result =" . 3 SPACES .LAP  10 +LOOP ; 
    ( 0011 14CE ok )   fibos  
    fibo(6) =  result =8   1136 cycles at 96000000Hz  or 11.833us 
    fibo(16) =  result =987   1936 cycles at 96000000Hz  or 20.166us 
    fibo(26) =  result =121393   2736 cycles at 96000000Hz  or 28.500us 
    fibo(36) =  result =14930352   3536 cycles at 96000000Hz  or 36.833us 
    fibo(46) =  result =1836311903   4336 cycles at 96000000Hz  or 45.166us 
    ( 0012 14CE ok )    
    
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • ax84chax84ch Posts: 2
    edited December 2016 Vote Up0Vote Down
    Having recently discovered forth, I find it fascinating. I've done a little bit of fiddling with some forths but haven't been able to make the jump to doing anything productive with it.

    I see that there is a good bit of stuff in Peter's signature- I need to take a day off of work and dig into those and try to get some stuff going with VGA/LCD, etc...




  • ax84ch wrote: »
    Having recently discovered forth, I find it fascinating. I've done a little bit of fiddling with some forths but haven't been able to make the jump to doing anything productive with it.

    I see that there is a good bit of stuff in Peter's signature- I need to take a day off of work and dig into those and try to get some stuff going with VGA/LCD, etc...



    Welcome and warning Tachyon and now T+ is not ansi standard forth! It is optimized for the propeller platform (size and speed). You will be amazed at how much functionality can be contained in this system. You will find help with syntax... on this thread for T+ and the other Tachyon thread for V3.

    Have fun.

  • Tachyon+ now has BACKUP to EEPROM. Now to move on to the file system.
    Propeller .:.:--TACHYON--:.:. Forth V4.0 DAWN 400161202.1700[s][/s]
    --------------------------------------------------------------------------------
    ( 0516 1B7A ok )   
     DICTIONARY WORDS @66D8 
     EE BACKUP ?BACKUP EEPROM ECOPY EFILL ELOAD ESAVE ep ESAVEB ENDRD E! E@ EW@ EW! EC@ EC! @EEWAIT EERD @EE eeadr FI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP
     I2CREST I2CSTART ?I2C I2CREST I2CSTART ?I2C i2cflg @SCL *SDA *SCL DAC! BLINK MUTE HZ KHZ MHZ HZCON FRQ BPIN APIN PLLDIV PLL DUTY DIFF CTR! CTRMODE 
    NCO CTR@ CTR B A _ctr SEROUT SERBAUD baudcnt MOD SPR! VSCL VCFG PHSB PHSA FRQB FRQA CTRB CTRA DIRB DIRA OUTB OUTA INB INA CNT PAR SPR LONGFILL C~~ W
    ~~ ~~ C-- C++ W-- W++ -- ++ B>L B>W W>L W>B L>W BITS >W RELEASE LOCAL X4 X3 X2 X1 @X locals AVG IN PIN@ OUT PIN! P! P@ -ROT U@ U! ulong ALIGN D. DEM
    O AMBER CYAN MAGENTA WHITE RED BLUE GREEN ULTRA VERY LIGHT DIM LED rgb *LED SIEVE *FLAGS *SIZE fibos fibo CLKFREQ DUP OVER DROP 2DROP SWAP ROT NIP 3
    DROP ?DUP 3RD 4TH >R R> >L L> !RP !SP AND ANDN OR XOR ROL ROR SHR >> 8>> SHL << 8<< 2/ 2* REV MASK >N >B 9BITS 0= NOT 1+ 1- + - 2+ MIN MAX * UM* U/ 
    U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS -NEGATE ?NEGATE NEGATE ADO DO LOOP +LOOP FOR NEXT BOUNDS I LEAVE IF ELSE THEN ENDIF BEGIN UNTIL AGAIN WHILE RE
    PEAT C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ SET? SET CLR CMOVE ERASE FILL <CMOVE RESET 0EXIT EXIT ?EXIT NOP CALL JUMP BRANCH> (WAITPNE) RUNMOD (WAI
    TPEQ) (EMIT) (EMITX) CMPSTR LOADMOD COG@ COGREG COG! COGREG! COGREG@ COGID REBOOT DELTA WAITCNT LAP .LAP CLOCK CLKIN CLKOUT OUTSET OUTCLR OUTPUTS IN
    PUTS SHROUT SHRINP HIGH LOW FLOAT SPIWRB SPIWR16 SPIWR SPIRD SPICE 0<> <> WITHIN U> = > U< 0< HEX DECIMAL BINARY READBUF KEY WKEY (KEY) EMIT CLS SPA
    CE SPACES EMITS BELL CR <CR> SPINNER .HEX .BYTE .WORD .LONG @PAD HOLD >CHAR #> <# # #S <D> PRINT$ LEN$ U. .DEC .DP PRINT . ZPRINT SEARCH FINDSTR NFA
    >BFA @NAMES names WORDS WWORDS ALLOT ALLOCATED HERE VER .VER TACHYON END [~ ]~ ECHO us ms seconds second DISCARD REG BUFFERS KOLD DUMP DUMPW DUMPL D
    UMPC DUMPA DUMPAW QD .S DEBUG --- \ '' ( { } IFDEF IFNDEF " ." PRINT" (.") == org @org byte word long bytes words longs : pub pri ; ' NFA' OFF ON -1
     ALIAS GRAB [WS2812] dmm errors uemit ukey V4 *end* 
    

    Tachyon V4 kernel
    Compiled extensions (EXTEND-V4.FTH)
    Tachyon+ V4 "Dawn" preliminary document (editable)
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Peter JakackiPeter Jakacki Posts: 6,254
    edited December 2016 Vote Up0Vote Down
    There seems to be a lot more memory available with this new version, so I will try to keep it that way. While I am debugging EASYFILE I wrote a simple decompiler in 394 bytes which is in itself a good proof of a working system.
    Free memory =  17750
    ( 0044 1F94 ok )   NFA' ESAVE SEE  
    1D06 ep
    1D08 ALIGN
    1D0A ROT
    1D0C SWAP
    1D0E BOUNDS
    1D10 DO
    1D12 DUP
    1D14 @EEWAIT
    1D16 EERD
    1D18 DROP
    1D1A @SCK
    1D1C I
    1D1E ep
    1D20 BOUNDS
    1D22 DO
    1D24 FI2C@
    1D26 I
    1D28 C@
    1D2A <>
    1D2C OR
    1D2E DUP
    1D30 IF (1D34)
    1D32   LEAVE
    1D34 THEN
    1D34 LOOP
    1D36 @MOSI
    1D38 I2C@
    1D3A DROP
    1D3C I2CSTOP
    1D3E IF (1D70)
    1D40   DUP
    1D42   @EE
    1D44   DROP
    1D46   @SCK
    1D48   I
    1D4A   ep
    1D4C   BOUNDS
    1D4E   DO
    1D50   I
    1D52   C@
    1D54   I2C!?
    1D56   OR
    1D58   LOOP
    1D5A   I2CSTOP
    1D5C   IF (1D70)
    1D5E     13
    1D60     EMIT
    1D62     PRINT" FAIL @"
    1D6C     DUP
    1D6E     .WORD
    1D70   THEN
    1D70 THEN
    1D70 SPINNER
    1D72 ep
    1D74 +
    1D76 ep
    1D78 +LOOP
    1D7A DROP
    1D7C EXIT
    ( 0045 1F94 ok ) 
    

    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • So it seems that Peter's T4 has broken the 'you get 2 of 3 good properties' rule .... the price is perfect, the code is faster, and it takes less space.
    Bravo Peter!
  • Peter JakackiPeter Jakacki Posts: 6,254
    edited December 2016 Vote Up0Vote Down
    Well I've compiled the filesystem and without moving anything to upper EEPROM I still have about 11k available, enough to add EASYNET and an application without going to upper EEPROM still.
    The headers for constants and variables, private words etc can be removed too, saving more memory again.
    ( 1619 3128 ok )   
     DICTIONARY WORDS @5B86 
     QV ?AUTOLOAD FCRC (LOADROM) LOADIMG LOADROM SAVEIMG SAVEROM FIXBIN ROMSZ .FILES .FX .FILE ls 'ls .LIST 'LI (.LIST) (ls) lscnt .UTIME .FNAME (SLIST) (DIR)
     DIR udir (.DIR) .DIR .ATR .PATH pwd cd$ cd cwd$ cat (cat) FPRINT$ FRUN FLOAD DELETE rm RENAME RENAME$ RW APPEND APPEND.BLK eof -FERASE @RCD >|RCDSZ RCDSZ
     FMAKEOPEN$ FOPEN FOPEN$ FOPEN# mk FCREATE$ FCLOSE FOUTPUT >FILE 'FPUT FINPUT FILE> 'FGET FPUTB FPUT FGET fkey FREM @FWRITE @FREAD fstat fwrite fread FFC@
     FC@ FC! FILE@ FSECT@ FSIZE@ StartCluster CLUSTERS? CLUSTER@ @CLUSTER NextFreeDir .FTIME .FDATE .ASMONTH .FYEAR FSTAMP TIME@ DATE@ FTIME! @DIR! FDATE! DEC
    S DIR! DIR? dir$ @DIRBUF @FSIZE @FCLST @FDATE @FTIME @FCLSTH @ADATE @CDATE @CTIME @CMS @ATR @FEXT @FNAME >F83 fname$ FILE$ file$ ?SDCARD ?MOUNT MOUNT .FAT
     READFAT32 CLUST>SECT FAT2 FAT1 @FAT @BOOT cwdsect @ROOT fboot dirbuf file diradr rootdir clshift mounted fatname volname serial rootcl sect/fat sectors f
    ats rsvd sect/clust byte/sect oemname fat32 fatptr parts SD XW@ XC! XC@ X! X@ XADR XADR! FLUSH WRSECT ACTIVE? SECTOR _SDWR SDWR _SDRD SDRD PROCESS_TOKEN S
    DRDBLK _!SD !SD ?SDTIMEOUT sdtimer FALSE TIMEOUT TIMEOUT? UCNT@ ms@ mscnt CNT@ SDDAT! MARKER? SDERR? STAT@ ACMD CMD SDCS ?SPIO =SPIO @RUNMOD RES@ C: !SDIO
     SDPINS SDBUSY &sdto SDCLK SD4@ SD2@ (SDRD) scanpos scancnt scanch SD! SD@ _CARD? CARD? SDCMD sdtask sdcmd sdres sddst sdsrc SDERRLED SDBSYLED @FILE FILE#
     FILE SDBUF _scrc scrcs _sector sectors @WRFLG wrflgs filesel sdhc blklen card? crc sdbusy ucard sdrd sdwr sdsize sdpins ocr csd cid sdinfo =dtk BLKSIZ SD
    C &SDDI &SDCK &SDDO &SDCS delim EASYFILE.fth EE BACKUP ?BACKUP CONBAUD EEPROM ECOPY EFILL ELOAD ESAVE ep ESAVEB ENDRD E! E@ EW@ EW! EC@ EC! @EEWAIT EERD @
    EE eeadr FI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP I2CREST I2CSTART ?I2C I2CREST I2CSTART ?I2C i2cflg MODPINS SETPINS SPIPINS MASK? @SPISCK @SCL @CE @MISO @MO
    SI @SCK @CNT *SDA *SCL DAC! BLINK MUTE HZ KHZ MHZ HZCON FRQ BPIN APIN PLLDIV PLL DUTY DIFF CTR! CTRMODE NCO CTR@ CTR B A _ctr SEROUT SERBAUD baudcnt SPR! 
    VSCL VCFG PHSB PHSA FRQB FRQA CTRB CTRA DIRB DIRA OUTB OUTA INB INA CNT PAR SPR PRINTDEC .DECX D. .DP PRINTNUM .NUM (.NUM) (SEP) LONGFILL C~~ W~~ ~~ C-- C
    ++ W-- W++ -- ++ B>L B>W W>L W>B L>W BITS >W RELEASE LOCAL X4 X3 X2 X1 @X locals AVG IN PIN@ OUT PIN! P! P@ COMPARE$ LOCATE$ COPY$ $! NULL$ boot lastkey N
    ULLOUT 'nout nout MOD @. <= => |< DS+ PUBLIC PRIVATE UNSMUDGE IMMEDIATE @HATR -ROT 2DUP U@ U! ulong ALIGN >| PCB$ PCB FALSE CLKFREQ EXTEND.fth DUP OVER DR
    OP 2DROP SWAP ROT NIP 3DROP ?DUP 3RD 4TH >R R> >L L> !RP !SP AND ANDN OR XOR ROL ROR SHR >> 8>> SHL << 8<< 2/ 2* SAR REV MASK >N >B 9BITS 0= NOT 1+ 1- + -
     2+ MIN MAX * UM* U/ U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS -NEGATE ?NEGATE NEGATE ADO DO LOOP +LOOP FOR NEXT BOUNDS I J K IX LEAVE IF ELSE THEN ENDIF BEGI
    N UNTIL AGAIN WHILE REPEAT C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ SET? SET CLR CMOVE ERASE FILL <CMOVE RESET 0EXIT EXIT ?EXIT NOP CALL JUMP BRANCH> (WAIT
    PNE) RUNMOD (WAITPEQ) (EMIT) (EMITX) CMPSTR LOADMOD COG@ COGREG COG! COGREG! COGREG@ COGID REBOOT CLK CLKSET DELTA WAITCNT LAP .LAP CLOCK CLKIN CLKOUT OUT
    SET OUTCLR OUTPUTS INPUTS SHROUT SHRINP HIGH LOW FLOAT SPIWRB SPIWR16 SPIWR SPIRD SPICE 0<> <> WITHIN U> = > U< 0< HEX DECIMAL BINARY READBUF KEY WKEY (KE
    Y) KEY! EMIT CLS SPACE SPACES EMITS BELL CR <CR> SPINNER .HEX .BYTE .WORD .LONG @PAD HOLD >CHAR #> <# # #S <D> PRINT$ CTYPE LEN$ U. .DEC .DP PRINT . ZPRIN
    T GETWORD @WORD SEARCH FINDSTR NFA>BFA CFA>NFA NFA>NFA @NAMES names WORDS WWORDS ALLOT ALLOCATED HERE VER .VER TACHYON END [~ ]~ ECHO us ms seconds second
     DISCARD REG BUFFERS KOLD DUMP DUMPW DUMPL DUMPC DUMPA DUMPAW QD .S DEBUG .FREE --- \ '' ( { } IFDEF IFNDEF " ." PRINT" (.") == org @org byte word long by
    tes words longs : pub pri ; [C] ' NFA' OFF ON -1 ALIAS GRAB [WS2812] [SDRD] [SDWR] [SPIO] dmm errors here there flags prompt uemit ukey base V4 *end* 
    .FREE  Free memory =  10846
    ( 1620 3128 ok )   
    
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Peter, could the XI2C clock stretching routines be moved into the native code base?
  • Peter, could the XI2C clock stretching routines be moved into the native code base?

    I will have to revisit that, do you have that section of code or requirements handy. Do you mean move to the I2C routines in EXTEND?

    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Could you just replace the I2C with the XI2C routines in EXTEND.fth? Would there be much of a performance hit?
    I am not at my code machine, but can post what I think is properly working code (works with the BNO055 module, and a DAC chip on another project. The only catch is that there is an infinite waiting loop, which could get hung if something really goes wrong on the device side.
    Cheers!
  • Well I've compiled the filesystem and without moving anything to upper EEPROM I still have about 11k available, enough to add EASYNET and an application without going to upper EEPROM still.
    The headers for constants and variables, private words etc can be removed too, saving more memory again.
    ( 1619 3128 ok )   
     DICTIONARY WORDS @5B86 
    .
    .
    .
      dmm errors here there flags prompt uemit ukey base V4 *end* 
    .FREE  Free memory =  10846
    ( 1620 3128 ok )   
    

    WOW, well done peter
    @PaulRowntree, I would prefer we have two separate routines, one with and wihtout clock stretching, I have yet to need clock stretching with any I2C device I have used to date with Tachyon. Your "the only catch..." statement bothers me technically.

  • I see your point DP. Mind you, a timeout could be added.
  • Peter JakackiPeter Jakacki Posts: 6,254
    edited December 2016 Vote Up0Vote Down
    Work progresses slowly on V4 since I have real work and V3 to distract amongst many other things. I've fixed up several glitches and of course added many new features besides. I'm looking at making EELOAD a standard so that I can save source files in EEPROM by name and load them by name, so having more then 64kB EEPROM would be helpful. I'm using this at the moment to load up the decompiler and other utilities that I only need during debugging.

    The upper EEPROM ROMs have also been included. Even though I am still tweaking EASYFILE there is a lot than can be done with this current version, which reminds me, I need to enable the AUTORUN feature which is simple enough to do.
    ( 0945 $212C ok )   lsroms  
    *** ROMS ***
    0848 VGA32x15  
    0308 HSUART    
    1900 F32       
    

    I am loving the keyboard shortcuts as even though I had some in V3, they were limited in that they were hard-coded but V4 uses a key action table which can be modified dynamically. A ^? gives me quick stats:
    CODE:$2400 x8704 bytes   NAME:$628A x4470 bytes   DATA:$7670 x96 bytes    x16010 bytes free    Data Stack (0)
    

    EXTEND will have extra dictionary methods added that transparently handle dictionary searches in either RAM or EEPROM and makes it easy to move entries between the two. So rather than the V3 COMPACT operation which moved everything across to hashed blocks in EEPROM and created a cache in RAM in addition to further RAM entries, V4 only has a RAM or EEPROM dictionary entry, no caches or block buffer.

    SESSION DUMP:
    Startup with EXTEND then running EELOAD to load the decompiler source from EEPROM. The dictionary listing is executed from a ^W shortcut.
    If you have a proper wide ANSI/VT100 enabled terminal with color then try WWORDS.
    Propeller .:.:--TACHYON--:.:. Forth V4.0 DAWN 400161213.1700
    
    CODE:$21E4 x8164 bytes   NAME:$62DC x4388 bytes   DATA:$765E x78 bytes    x16632 bytes free    Data Stack (0)
    --------------------------------------------------------------------------------
    ( 0001 21E4 ok )    
    ( 0002 21E4 ok )    
    ( 0003 21E4 ok )   EELOAD  
    ( 0004 21E4 ok )   TACHYON    Propeller .:.:--TACHYON--:.:. Forth V4.0 DAWN 400161213.1700
    ( 0066 2400 ok )     
    
       End of source code, 0000  errors found  Load time = 106000208 cycles at 96000000Hz  or 1104.168ms 
    Code bytes used = 540
    CODE:$2400 x8704 bytes   NAME:$628A x4470 bytes   DATA:$7670 x96 bytes    x16010 bytes free    Data Stack (1)
    $0000.0000 - 0
    
    
    ( 0067 2400 ok )    
    ( 0068 2400 ok )   
     DICTIONARY WORDS @628A 
     SEE .NAME INDENT ?IF -IF +IF ifs indent SEE.fth EELOAD EKEY EESAVE EEWR eebuf eefile EEFILE.fth LOADCOG FINDROM NEXTROM lsroms 
    .rom romsz roms DUMPE DMPC EE BACKUP ?BACKUP CONBAUD EEPROM ECOPY EFILL ELOAD ESAVE ep ESAVEB ENDRD E! E@ EW@ EW! EC@ EC! @EEWAI
    T EERD @EE eeadr FI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP I2CREST I2CSTART ?I2C I2CREST I2CSTART ?I2C i2cflg WWORDS .ATR MARGINS BO
    LD REVERSE ATR PLAIN CURSOR ERLINE ERSCN CLS HOME XY CUR .PAR PAPER COL PEN ESCB ESC white cyan magenta blue yellow green red bl
    ack MODPINS SETPINS SPIPINS MASK? @SPISCK @SCL @CE @MISO @MOSI @SCK @CNT *SDA *SCL DAC! BLINK MUTE HZ KHZ MHZ HZCON FRQ BPIN API
    N PLLDIV PLL DUTY DIFF CTR! CTRMODE NCO CTR@ CTR B A _ctr SEROUT SERBAUD baudcnt PRINTDEC .DECX D. .DP PRINTNUM .NUM (.NUM) (SEP
    ) TIMEOUT TIMEOUT? UCNT@ ms@ mscnt CNT@ LONGFILL C~~ W~~ ~~ C-- C++ W-- W++ -- ++ B>L B>W W>L W>B L>W BITS >W RELEASE LOCAL X4 X
    3 X2 X1 @X locals AVG IN PIN@ OUT PIN! P! P@ SPR! VSCL VCFG PHSB PHSA FRQB FRQA CTRB CTRA DIRB DIRA OUTB OUTA INB INA CNT PAR SP
    R (FORGET) FORGET COMPARE$ LOCATE$ COPY$ $! NULL$ boot delim lastkey NULLOUT nout MOD @. <= => |< DS+ PUBLIC PRIVATE UNSMUDGE IM
    MEDIATE @HATR -ROT 2DUP U@ U! ulong ALIGN >| 2- PCB$ PCB FALSE CLKFREQ EXTEND.fth DUP OVER DROP 2DROP SWAP ROT NIP 3DROP ?DUP 3R
    D 4TH >R R> >L L> !RP !SP AND ANDN OR XOR ROL ROR SHR >> 8>> SHL << 8<< 2/ 2* SAR REV MASK >N >B 9BITS 0= NOT 1+ 1- + - 2+ MIN M
    AX * UM* U/ U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS -NEGATE ?NEGATE NEGATE ADO DO LOOP +LOOP FOR NEXT BOUNDS I J K IX LEAVE IF ELS
    E THEN ENDIF BEGIN UNTIL AGAIN WHILE REPEAT C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ SET? SET CLR CMOVE ERASE FILL <CMOVE RESET 0
    EXIT EXIT ?EXIT NOP CALL JUMP BRANCH> (WAITPNE) RUNMOD (WAITPEQ) (EMIT) (EMITX) CMPSTR LOADMOD COG@ COGREG COG! COGREG! COGREG@ 
    COGINIT COGID REBOOT CLK CLKSET DELTA WAITCNT LAP .LAP CLOCK CLKIN CLKOUT OUTSET OUTCLR OUTPUTS INPUTS SHROUT SHRINP HIGH LOW FL
    OAT SPIWRB SPIWR16 SPIWR SPIRD SPICE 0<> <> WITHIN U> = > U< 0< HEX DECIMAL BINARY READBUF KEY WKEY (KEY) KEY! EMIT CLS SPACE SP
    ACES EMITS BELL CR <CR> SPINNER .HEX .BYTE .WORD .LONG @PAD HOLD >CHAR #> <# # #S <D> PRINT$ CTYPE LEN$ U. .DEC .DP PRINT . ZPRI
    NT CREATE CREATE$ GETWORD @WORD SEARCH FINDSTR NFA>BFA CFA>NFA NFA>NFA @NAMES names WORDS ALLOT ALLOCATED HERE , || | VER .VER T
    ACHYON END [~ ]~ ECHO us ms seconds second DISCARD REG BUFFERS KOLD DUMPX DUMP DUMPW DUMPL DUMPC DUMPA DUMPAW QD DEPTH .S DEBUG 
    .FREE --- \ '' ( { } IFDEF IFNDEF " ." PRINT" (.") == org @org byte word long bytes words longs : pub pri ; [C] ' ['] NFA' OFF O
    N -1 ALIAS GRAB [WS2812] [SDRD] [SDWR] [SPIO] dmm errors here there flags prompt uemit ukey base V4 *end* 
    
    CODE:$2400 x8704 bytes   NAME:$628A x4470 bytes   DATA:$7670 x96 bytes    x16010 bytes free    Data Stack (0) 
    ( 0069 2400 ok )   WWORDS  
    
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • I've just employed a neat little trick to shave 126 code bytes off EXTEND which means that this could easily save 512 bytes of hub RAM once I load the filesystem and WIZnet server modules. Doesn't sound like much but I basically told the ; word which terminates definitions with an EXIT to do a check beforehand and if the last wordcode compiled was a call to high level code ($200..$7400) then set the "jump" bit in that wordcode and skip compiling an EXIT. Saves time and memory everytime and I'm looking at adding some extra op codes to make other common operations more compact without sacrificing speed.

    As I was loading the filesystem for testing I accidentally loaded it on twice without the normal FORGET that's used. In V3 I couldn't do this because there is hardly any memory left after loading the filesystem and I normally do a COMPACT operation to move the dictionary to upper EEPROM to free up some memory. Well V4 shows it still has over 2k available (includes decompiler and EEFILE) but of course if I move the dictionary to EEPROM that it would have close to 12k free. This gives me some idea of how much memory would be available if I load V4 with EASYFILE and EASYNET, that's a lot of memory left over.

    Another trick to save memory is to be able to make the cog images for the Tachyon VM and the serial/pingpong cog as ROMS in upper EEPROM. That would require some tricks to initially boot as normal, ROM them and then have a very small bootloader in place that would have to be written purely in Spin (since it is in mask ROM) to at least load the Tachyon cog from upper EEPROM. At present I use that memory for about 3K of buffers but sometimes I might want more code, less buffers, so I will have a play with that sometime to see what I can come up with as the need arises.

    Loading cogs directly with ROMs from upper EEPROM by name with LOADCOG seems to work quite well and I may combine the purely PASM part with some additional Tachyon source code as part of the ROM so that these ROMs are more like OBEX objects, except of course we can just load and use them at runtime from the "jukebox". Logically it makes sense to extend this mechanism from EEPROM to SD/FAT32 and SPI Flash as well and to make that work transparently too. If it can't find it in EEPROM then it may find it in serial Flash or SD. Loading ROMs or even source code as required can be viewed as being similar to handling code overlays, thus increasing the code capacity of the Prop, even with it's meager 32k.

    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • I've just employed a neat little trick to shave 126 code bytes off EXTEND which means that this could easily save 512 bytes of hub RAM once I load the filesystem and WIZnet server modules.
    .
    .
    .
    So you are saying after loading EXTEND, EASYFILE and EASYNET and "compacting" you have 12K left over? Oh I hope so, my Tachyon Forth code is chucky but getting better ;)
  • D.P wrote: »
    I've just employed a neat little trick to shave 126 code bytes off EXTEND which means that this could easily save 512 bytes of hub RAM once I load the filesystem and WIZnet server modules.
    .
    .
    .
    So you are saying after loading EXTEND, EASYFILE and EASYNET and "compacting" you have 12K left over? Oh I hope so, my Tachyon Forth code is chucky but getting better ;)

    That's about the gist of it. You can even keep your utilities loaded up in EEPROM/Flash/SD for loading as required too.

    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Got V4 loaded up on a quickstart, looks great!

    Now to go find the doc
  • As code size shrinks and functionality grows, I feel, Peter is on his way to find for Tachyon, what Dirac found for elementary particles: Remove all the electrons you have and one more and you willl find the positron. So he will find a complementary memory, that can store code that was shrinked below nothing! What I whatch here, is funtastic, more not to say for now!
  • D.P wrote: »
    Got V4 loaded up on a quickstart, looks great!

    Now to go find the doc

    What do you need the doc for? Are you sick? :)

    Now if you want to find out about V4 you could document your discoveries along the way. Be aware that some little niceties such as backspace on a new name or number or string is not enabled yet but nothing that stops you from using it. I remember that I had started up a document to introduce it so you could add to a section of that document if you like.


    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Yes, Peter is right. Tachyon is self documenting. It only takes some time to realize that.
  • The EASYFILE filesystem is working now that I've gotten around "tuit". There's over 10k free at present without using upper EEPROM. I will upload a 32k binary shortly and rather than using header files I just configure the module at runtime, in my case I type "P8 SDPINS" where P8 is a constant holding the 4 bytes representing the pin numbers to use. So to make it work with your pcb just specify the pins as one long so that if CLK=4, MOSI=6, MISO=7, and SDCS=5 then you would set the pins with "$05070604 SDPINS" or even make that long a constant as I do.

    I will also update EASYFILE to include methods I use in the P2 version such as FC@ (file Cfetch) and FC! (file Cstore) with 32-bit offset whereas the XC@ methods can only address files within the first 4GB of the SD.
    CODE:$30FA x12026 bytes   NAME:$5A20 x6624 bytes   DATA:$7947 x823 bytes    x10534 bytes free    Data Stack (0)
    
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • D.P wrote: »
    I've just employed a neat little trick to shave 126 code bytes off EXTEND which means that this could easily save 512 bytes of hub RAM once I load the filesystem and WIZnet server modules.
    .
    .
    .
    So you are saying after loading EXTEND, EASYFILE and EASYNET and "compacting" you have 12K left over? Oh I hope so, my Tachyon Forth code is chucky but getting better ;)

    That's about the gist of it. You can even keep your utilities loaded up in EEPROM/Flash/SD for loading as required too.

    So you're saying you have a Forth interpreter, network stack, and filesystem implemented in only 20K of hub memory? Wow!
  • David Betz wrote: »
    D.P wrote: »
    I've just employed a neat little trick to shave 126 code bytes off EXTEND which means that this could easily save 512 bytes of hub RAM once I load the filesystem and WIZnet server modules.
    .
    .
    .
    So you are saying after loading EXTEND, EASYFILE and EASYNET and "compacting" you have 12K left over? Oh I hope so, my Tachyon Forth code is chucky but getting better ;)

    That's about the gist of it. You can even keep your utilities loaded up in EEPROM/Flash/SD for loading as required too.

    So you're saying you have a Forth interpreter, network stack, and filesystem implemented in only 20K of hub memory? Wow!

    Not quite, I haven't converted the network module yet but the FAT32 virtual memory filesystem only take 4kB but I expect that even with the network loaded I will still have a few kB left but by moving the dictionary to upper EEPROM I could have 12kB available. So it is possible to have a standard 32k image with "the lot" whereby you have the option of moving the dictionary to upper EEPROM to then have 12kB which for a Tachyon application is HUGE.

    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Peter,

    I'm kind of late to the Tachyon party.
    Do you have a document that tells what hardware this should run on?
    Or hardware requirements to run this the way "most" users would?

    Thanks!
    Dave
  • The good news is that it will run on the bare minimum just as fast as it would if you had more eeprom etc. I will have a binary uploaded as soon as it back that includes the fat32 filesystem that runs with plenty of ram left over in a normal 32k binary. The system automatically detects if it is a 5 or 1MHz crystal.
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • D.P wrote: »
    Got V4 loaded up on a quickstart, looks great!

    Now to go find the doc

    What do you need the doc for? Are you sick? :)

    Now if you want to find out about V4 you could document your discoveries along the way. Be aware that some little niceties such as backspace on a new name or number or string is not enabled yet but nothing that stops you from using it. I remember that I had started up a document to introduce it so you could add to a section of that document if you like.


    That's the doc I was referring to, I gave up on editing the V3 doc.
  • Here's the 32k binary for the current kernel and FAT32 with a default baud rate of 115200. Since this is only 32k it doesn't have the ROMs in upper eeprom but it is very very easy to compile the kernel yourself and load EXTEND and EASYFILE.

    The latest version of this file can also be accessed in the Tachyon binaries Dropbox folder.
    Propeller .:.:--TACHYON--:.:. Forth V4.0 DAWN 400161214.1000
    
    CODE:$30FA x12026 bytes   NAME:$5A20 x6624 bytes   DATA:$7947 x823 bytes    x10534 bytes free    Data Stack (0)
    --------------------------------------------------------------------------------
    ( 0001 $30FA ok )   
     DICTIONARY WORDS @5A20 
     QV .FILES .FX .FILE ls-l ls .LIST (.LIST) (ls) lscnt .UTIME .FNAME (SLIST) (DIR) DIR udir .DIR (.DIR) .ATR .PATH pwd cd$ 
    cd cwd$ cat (cat) FPRINT$ FRUN FLOAD DELETE rm RENAME RENAME$ RW APPEND APPEND.BLK eof -FERASE @RCD >|RCDSZ RCDSZ FMAKEOPE
    N$ FOPEN FOPEN$ FOPEN# mk FCREATE$ FCLOSE FOUTPUT >FILE 'FPUT FINPUT FILE> 'FGET FPUTB FPUT FGET fkey FREM @FWRITE @FREAD 
    fstat fwrite fread FFC@ FC@ FC! FILE@ FSECT@ FSIZE@ StartCluster CLUSTERS? CLUSTER@ @CLUSTER NextFreeDir .FTIME .FDATE .AS
    MONTH .FYEAR FSTAMP TIME@ DATE@ FTIME! @DIR! FDATE! DECS DIR! DIR? dir$ @DIRBUF @FSIZE @FCLST @FDATE @FTIME @FCLSTH @ADATE
     @CDATE @CTIME @CMS @ATR @FEXT @FNAME >F83 fname$ FILE$ file$ ?SDCARD ?MOUNT MOUNT .FAT READFAT32 CLUST>SECT @FAT2 @FAT1 @
    FAT @BOOT cwdsect @ROOT fboot dirbuf file diradr rootdir clshift mounted fatname volname serial rootcl sect/fat sectors fa
    ts rsvd sect/clust byte/sect oemname fat32 fatptr parts SD XW@ XC! XC@ X! X@ XADR XADR! FLUSH WRSECT ACTIVE? SECTOR _SDWR 
    SDWR _SDRD SDRD PROCESS_TOKEN SDRDBLK _!SD !SD ?SDTIMEOUT sdtimer SDDAT! MARKER? SDERR? STAT@ ACMD CMD SDCS ?SPIO =SPIO @R
    UNMOD RES@ !SDIO SDPINS SDBUSY &sdto SDCLK SD4@ SD2@ (SDRD) scanpos scancnt scanch SD! SD@ _CARD? CARD? SDCMD sdcmd sdres 
    sddst sdsrc SDERRLED SDBSYLED @FILE FILE# FILE SDBUF @SDBUF @scrc scrcs @sector sectors WRFLG @WRFLG wrflgs filesel sdhc b
    lklen card? crc sdbusy ucard sdrd sdwr sdsize sdpins ocr csd cid sdinfo =dtk BLKSIZ *SDCS @SDCS P1656 P8 DS EASYFILE.fth L
    OADCOG FINDROM NEXTROM lsroms .rom romsz roms DUMPE DMPC EE BACKUP ?BACKUP CONBAUD EEPROM ECOPY EFILL ELOAD ESAVE ep ESAVE
    B ENDRD E! E@ EW@ EW! EC@ EC! @EEWAIT EERD @EE eeadr FI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP I2CREST I2CSTART ?I2C I2CREST I
    2CSTART ?I2C i2cflg WWORDS .ATR MARGINS BOLD REVERSE ATR PLAIN CURSOR ERLINE ERSCN CLS HOME XY CUR .PAR PAPER COL PEN ESCB
     ESC white cyan magenta blue yellow green red black MODPINS SETPINS SPIPINS MASK? @SPISCK @SCL @CE @MISO @MOSI @SCK @CNT *
    SDA *SCL DAC! BLINK MUTE HZ KHZ MHZ HZCON FRQ BPIN APIN PLLDIV PLL DUTY DIFF CTR! CTRMODE NCO CTR@ CTR B A _ctr SEROUT SER
    BAUD baudcnt PRINTDEC .DECX D. .DP PRINTNUM .NUM (.NUM) (SEP) RADIX> >RADIX RADIX radix TIMEOUT TIMEOUT? UCNT@ ms@ mscnt C
    NT@ LONGFILL C~~ W~~ ~~ C-- C++ W-- W++ -- ++ B>L B>W W>L W>B L>W BITS >W RELEASE LOCAL X4 X3 X2 X1 @X locals AVG IN PIN@ 
    OUT PIN! P! P@ SPR! VSCL VCFG PHSB PHSA FRQB FRQA CTRB CTRA DIRB DIRA OUTB OUTA INB INA CNT PAR SPR (FORGET) FORGET COMPAR
    E$ LOCATE$ COPY$ $! NULL$ boot delim lastkey NULLOUT nout MOD @. <= => |< DS DS+ PUBLIC PRIVATE UNSMUDGE IMMEDIATE @HATR U
    @ U! ulong >| -ROT 2DUP 2- PCB$ PCB FALSE CLKFREQ EXTEND.fth DUP OVER DROP 2DROP SWAP ROT NIP 3DROP ?DUP 3RD 4TH >R R> >L 
    L> !RP !SP AND ANDN OR XOR ROL ROR SHR >> 8>> SHL << 8<< 2/ 2* SAR REV MASK >N >B 9BITS 0= NOT 1+ 1- + - 2+ MIN MAX * UM* 
    U/ U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS -NEGATE ?NEGATE NEGATE ADO DO LOOP +LOOP FOR NEXT BOUNDS I J K IX LEAVE IF ELSE T
    HEN ENDIF BEGIN UNTIL AGAIN WHILE REPEAT C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ SET? SET CLR CMOVE ERASE FILL <CMOVE RESE
    T 0EXIT EXIT ?EXIT NOP CALL JUMP BRANCH> (WAITPNE) RUNMOD (WAITPEQ) (EMIT) (EMITX) CMPSTR LOADMOD COG@ COGREG COG! COGREG!
     COGREG@ COGINIT COGID REBOOT CLK CLKSET DELTA WAITCNT LAP .LAP CLOCK CLKIN CLKOUT OUTSET OUTCLR OUTPUTS INPUTS SHROUT SHR
    INP HIGH LOW FLOAT SPIWRB SPIWR16 SPIWR SPIRD SPICE 0<> <> WITHIN U> = > U< 0< HEX DECIMAL BINARY READBUF KEY WKEY (KEY) K
    EY! EMIT CLS SPACE SPACES EMITS BELL CR <CR> SPINNER .HEX .BYTE .WORD .LONG @PAD HOLD >CHAR #> <# # #S <D> PRINT$ CTYPE LE
    N$ U. .DEC .DP PRINT . ZPRINT CREATE CREATE$ GETWORD @WORD SEARCH FINDSTR NFA>BFA CFA>NFA NFA>NFA @NAMES names WORDS ALLOT
     ALLOCATED HERE , || | VER .VER TACHYON END [~ ]~ ECHO us ms seconds second DISCARD REG BUFFERS KOLD DUMPX DUMP DUMPW DUMP
    L DUMPC DUMPA DUMPAW QD DEPTH .S DEBUG .FREE --- \ '' ( { } IFDEF IFNDEF " ." PRINT" (.") == org @org byte word long bytes
     words longs ALIGN : pub pri ; [C] ' ['] NFA' OFF ON -1 ALIAS GRAB [WS2812] [SDRD] [SDWR] [SPIO] dmm errors here there fla
    gs prompt uemit ukey base V4 *end* 
    
    
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • Peter JakackiPeter Jakacki Posts: 6,254
    edited December 2016 Vote Up0Vote Down
    EASYNET has been compiled although not functional yet but it shows 2k free with over 9k in the dictionary. So that is very close to the 12k that I expect to be free once the dictionary is moved to upper eeprom yet even that 2k is very useful too. Now to make this work.....
    CODE:$47D0 x17872 bytes   NAME:$4FAE x9298 bytes   DATA:$79F9 x1001 bytes    x2014 bytes free    Data Stack (0)
    
    DICTIONARY WORDS @4FAE 
     EASYNET GO RESTART ?EASYNET netflgs fsave ?LED ?CTRLS lk ?HTTP #hskts GET HEAD GETPAGE GETTXT GETHTX ?CONTENT getsz GET$ 
    CONTENT ?FTP REST STOR (RETR) RETR RNTO RNFR RNFR$ FTPMSG SIZE SENDFILE BLKSEND BUFSIZ blkpoll LIST ?DISCONNECT PWD CWD cw
    d$ CDUP MDTM FEAT SYST PASV #ftpmax #ftpmin PORT TYPE type PASS USER ECHOREQ GETFNAME dataport pass$ user$ .IPD COMMA .BYT
    EDEC GETTIME RESOLVE ?TELNET QUIT BYE constat CONNECT DISCONNECTED? DISCONNECT CONNECTED? DISCREQ disreq KEEPALIVE contd U
    pdateTXWR LANSKT FlushSkt MSG> <MSG msgstk MSGS msgs ledon ledcnt QUIET un UNKNOWN LEDS LANLED READYLED EASYNET.fth skt$ H
    TTP TELNET FTPDAT FTP NETMAN .SOCKETS ifconfig .SKT .SOCKET .SKTHD .TIME SWAPB .PTR .@SKTBUF .IP1 .IP .IPX .EMIT @SKTBUF s
    ktbuf LREADSKT LSEND WBUFSZ WIZ !WIZ !TXBUFS !WIZIP oui2 !WIZIO WCOLD LANCON LANCONKEY LANCONEMIT LAN LANKEY LANEMIT LANSE
    ND ?SEND ?SENDPOLL WAITSEND sendtimer autosend txsize txtime !TXWR @txwr txwr SetPORT PORT! sDISCON? sCONNECTED? sCLOSING?
     sESTAB? sINACTIVE? sCLOSED? sRECV sSENDKEEP sSENDMAC sSEND sCLOSE sDISCON sCONNECT sLISTEN sOPEN PPPoE MACRAW IPRAW UDP T
    CP CLOSED sMODE KEEPTMR RXWRITE RXREAD RXSIZE@ TXWRITE TXREAD TXFREE@ sTXMEM sRXMEM sPRO sSSIZE sDPORT sDIP! sDHAR! sPORT 
    sSTAT sINTS sCMD! @SOCKET SKT@ SOCKET SKT socket &CON &DISCON &RECV &TIMEOUT &SENDOK UPORT UIP @RCR @RTR INTMASK INTS@ SIP
     MAC SUBNET GATEWAY wMODE @ports @wcold @mac @subnet @sip @gateway LWRITE LREAD vwrite vread L@ LW@ LC@ L! LW! LC! @RX @TX
     @SKT @COMMON ctrl! SKTBLK rdc wrc WPWRDN WRESET wizpins mySN myIP myGW &WNDI &WNCK &WNCS &WNDO ALARM $= RIGHT$ GETRND NUM
    BER CON] [CON CONSOLE TRUE +POLL >UPPER W5500.fth QV .FILES .FX .FILE ls-l ls .LIST (.LIST) (ls) lscnt .UTIME .FNAME (SLIS
    T) (DIR) DIR udir .DIR (.DIR) .ATR .PATH pwd cd$ cd cwd$ cat (cat) FPRINT$ FRUN FLOAD DELETE rm RENAME RENAME$ RW APPEND A
    PPEND.BLK eof -FERASE @RCD >|RCDSZ RCDSZ FMAKEOPEN$ FOPEN FOPEN$ FOPEN# mk FCREATE$ FCLOSE FOUTPUT >FILE 'FPUT FINPUT FILE
    > 'FGET FPUTB FPUT FGET fkey FREM @FWRITE @FREAD fstat fwrite fread FFC@ FC@ FC! FILE@ FSECT@ FSIZE@ StartCluster CLUSTERS
    ? CLUSTER@ @CLUSTER NextFreeDir .FTIME .FDATE .ASMONTH .FYEAR FSTAMP TIME@ DATE@ FTIME! @DIR! FDATE! DECS DIR! DIR? dir$ @
    DIRBUF @FSIZE @FCLST @FDATE @FTIME @FCLSTH @ADATE @CDATE @CTIME @CMS @ATR @FEXT @FNAME >F83 fname$ FILE$ file$ ?SDCARD ?MO
    UNT MOUNT .FAT READFAT32 CLUST>SECT @FAT2 @FAT1 @FAT @BOOT cwdsect @ROOT fboot dirbuf file diradr rootdir clshift mounted 
    fatname volname serial rootcl sect/fat sectors fats rsvd sect/clust byte/sect oemname fat32 fatptr parts SD XW@ XC! XC@ X!
     X@ XADR XADR! FLUSH WRSECT ACTIVE? SECTOR _SDWR SDWR _SDRD SDRD PROCESS_TOKEN SDRDBLK _!SD !SD ?SDTIMEOUT sdtimer SDDAT! 
    MARKER? SDERR? STAT@ ACMD CMD SDCS ?SPIO =SPIO @RUNMOD RES@ !SDIO SDPINS SDBUSY &sdto SDCLK SD4@ SD2@ (SDRD) scanpos scanc
    nt scanch SD! SD@ _CARD? CARD? SDCMD sdcmd sdres sddst sdsrc SDERRLED SDBSYLED @FILE FILE# FILE SDBUF @SDBUF @scrc scrcs @
    sector sectors WRFLG @WRFLG wrflgs filesel sdhc blklen card? crc sdbusy ucard sdrd sdwr sdsize sdpins ocr csd cid sdinfo =
    dtk BLKSIZ *SDCS @SDCS P1656 P8 DS EASYFILE.fth .DT OK !PCB LOADCOG FINDROM NEXTROM lsroms .rom romsz roms AUTORUN DUMPE D
    MPC EE BACKUP ?BACKUP CONBAUD EEPROM ECOPY EFILL ELOAD ESAVE ep ESAVEB ENDRD E! E@ EW@ EW! EC@ EC! @EEWAIT EERD @EE eeadr 
    FI2C@ I2C@ ackI2C@ I2C! I2C!? I2CSTOP I2CREST I2CSTART ?I2C I2CREST I2CSTART ?I2C i2cflg WWORDS .ATR MARGINS BOLD REVERSE 
    ATR PLAIN CURSOR ERLINE ERSCN CLS HOME XY CUR .PAR PAPER COL PEN ESCB ESC white cyan magenta blue yellow green red black M
    ODPINS SETPINS SPIPINS MASK? @SPISCK @SCL @CE @MISO @MOSI @SCK @CNT *SDA *SCL DAC! BLINK MUTE HZ KHZ MHZ HZCON FRQ BPIN AP
    IN PLLDIV PLL DUTY DIFF CTR! CTRMODE NCO CTR@ CTR B A _ctr SEROUT SERBAUD baudcnt PRINTDEC .DECX D. .DP PRINTNUM .NUM (.NU
    M) (SEP) RADIX> >RADIX RADIX radix RND (rnd) TIMEOUT TIMEOUT? UCNT@ ms@ mscnt CNT@ STRING BREAK CASE SWITCH@ SWITCH uswitc
    h LONGFILL C~~ W~~ ~~ C-- C++ W-- W++ -- ++ B>L B>W W>L W>B L>W BITS >W RELEASE LOCAL X4 X3 X2 X1 @X locals AVG IN PIN@ OU
    T PIN! P! P@ SPR! VSCL VCFG PHSB PHSA FRQB FRQA CTRB CTRA DIRB DIRA OUTB OUTA INB INA CNT PAR SPR (FORGET) FORGET COMPARE$
     LOCATE$ COPY$ $! NULL$ boot delim lastkey CON ?POLL NULLOUT nout MOD @. <= => |< DS DS+ PUBLIC PRIVATE UNSMUDGE IMMEDIATE
     @HATR U@ U! ulong >| -ROT 2DUP 2- PCB$ PCB FALSE CLKFREQ EXTEND.fth DUP OVER DROP 2DROP SWAP ROT NIP 3DROP ?DUP 3RD 4TH >
    R R> >L L> !RP !SP AND ANDN OR XOR ROL ROR SHR >> 8>> SHL << 8<< 2/ 2* SAR REV MASK >N >B 9BITS 0= NOT 1+ 1- + - 2+ MIN MA
    X * UM* U/ U/MOD / UM/MOD64 UM/MOD32 */ UM*/ ABS -NEGATE ?NEGATE NEGATE ADO DO LOOP +LOOP FOR NEXT BOUNDS I J K IX LEAVE I
    F ELSE THEN ENDIF BEGIN UNTIL AGAIN WHILE REPEAT C@ W@ @ C+! C! C@++ W+! W! +! ! C~ W~ ~ SET? SET CLR CMOVE ERASE FILL <CM
    OVE RESET 0EXIT EXIT ?EXIT NOP CALL JUMP BRANCH> (WAITPNE) RUNMOD (WAITPEQ) (EMIT) (EMITX) CMPSTR LOADMOD COG@ COGREG COG!
     COGREG! COGREG@ COGINIT COGID REBOOT CLK CLKSET DELTA WAITCNT LAP .LAP CLOCK CLKIN CLKOUT OUTSET OUTCLR OUTPUTS INPUTS SH
    ROUT SHRINP HIGH LOW FLOAT SPIWRB SPIWR16 SPIWR SPIRD SPICE 0<> <> WITHIN U> = > < U< 0< HEX DECIMAL BINARY READBUF KEY WK
    EY (KEY) KEY! EMIT CLS SPACE SPACES EMITS BELL CR <CR> SPINNER .HEX .BYTE .WORD .LONG @PAD HOLD >CHAR #> <# # #S <D> PRINT
    $ CTYPE LEN$ U. .DEC .DP PRINT . ZPRINT CREATE CREATE$ GETWORD @WORD SEARCH FINDSTR NFA>BFA CFA>NFA NFA>NFA @NAMES names W
    ORDS ALLOT ALLOCATED HERE , || | VER .VER TACHYON END [~ ]~ ECHO us ms seconds second DISCARD REG BUFFERS KOLD DUMPX DUMP 
    DUMPW DUMPL DUMPC DUMPA DUMPAW QD DEPTH .S DEBUG .FREE --- \ '' ( { } IFDEF IFNDEF " (") ." PRINT" (.") == org @org byte w
    ord long bytes words longs ALIGNORG ALIGN : pub pri ; [C] ' ['] NFA' OFF ON -1 ALIAS GRAB [WS2812] [SDRD] [SDWR] [SPIO] dm
    m errors here there flags prompt autorun keypoll uemit ukey base V4 *end*
    


    useforthlogo-s.png
    LINKS
    Brisbane, Australia
  • At this point, is there any point for a newbee to start with Tachyon 3?
  • V3 is what I am using for my work and while V4 is certainly different under the hood it still works the same way from the programmer's perspective. The main task I have at present in "converting" V3 code is more to do with the fact that I haven't enhanced V4 enough yet but I want to be able to see how it performs and how much memory it saves. If you write code for V3 then it will more than likely run as is for V4. So don't be afraid to dive in just because there's a change of tide, water is water and Tachyon is Tachyon.
    useforthlogo-s.png
    LINKS
    Brisbane, Australia
Sign In or Register to comment.