Shop Learn
TACHYON O/S V3.0 JUNO - Furiously Fast Forth, FAT32+LAN+VGA+RS485+OBEX ROMS+FP+LMM+++ - Page 62 — Parallax Forums

TACHYON O/S V3.0 JUNO - Furiously Fast Forth, FAT32+LAN+VGA+RS485+OBEX ROMS+FP+LMM+++

15960626465109

Comments

  • KC_RobKC_Rob Posts: 465
    edited 2015-02-26 17:36
    This one is still running on a 80MHz Prop whereas the +P8 version is 96MHz. However I am just getting around to building a higher speed version by dedicating a cog for SPI so I can run SPI at 24MHz using the counters. At the moment except for the serial receive and background timing all this is done in one cog. Expect it to really fly when I'm done!!!

    [video=youtube_share;jFHpfAei9yk]
    Peter, whenever I check in at the Parallax forums I always look for your TF thread (which generally isn't hard to find). Really cool stuff! Keep up the good work!
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-02 18:16
    Thanks everyone for your feedback, it does make a difference because many times I feel like I'm wasting my time talking into empty space. When I feel like that I always have to re-examine my motives for taking this public but despite the extra effort that is required to publicly maintain it on top of the project itself, I find that like many of us who share, it is because we enjoy what we do and love to share what we enjoy.

    So the question of whether to maintain the project publicly comes down to whether anyone finds it useful. I know that Parallax themselves are only supporting Spin or C despite the fact that Tachyon is already a very powerful development environment that can run on an unexpanded Prop itself, and that it has demonstrated that it is very capable even of handling multiple files and multiple networking protocols while still having memory available to run applications. In the forum as a whole there seems to be a lot of emphasis on developing "development tools" rather than being beyond that and developing applications and projects.

    I'm aware of a number of ones that regularly use Tachyon although it would be neat to see some projects published, either in full or as feedback. I like to tune my system and this kind of feedback helps me to improve it. If you are thinking of using Tachyon but haven't yet then what is it that might be holding you back?
  • Todd MarshallTodd Marshall Posts: 89
    edited 2015-03-03 10:01
    Knowing one of the languages (C) very well; two moderately well (SPIN and PASM); and one less than rudimentary (FORTH), I'm convinced, for getting down to the metal (interactively ... which to me is the most efficient way to "feel out" capabilities) FORTH (Tachyon for the Propeller) is my choice. My obstacles are all educational. I must first learn to read the language ... know it's vocabulary and mechanisms (grammar doesn't apply to FORTH). That brings the additional challenge of discerning what is FORTH, what is Tachyon, and what is FORTH extensions. As most of what I've read is promotional (trying to get me to be in awe of the language ... I'm already sold ... now I must efficiently learn) and filled with COIK (Clear Only If Known) I must iterate to learn. This means bouncing among several sources ... plus building my cheatsheet as I go along. This is not unusual in learning a new language that is worth learning. As I learned in mastering C++, a little proficiency is not sufficient. I "must" know the nitty gritty details if I'm to avoid the near impossible-to-resolve-gotchas that come with guessing, assuming, and misunderstanding.

    I will say, I wish you had not chosen to be case sensitive ... rather to retain case but be case insensitive ... but that certainly is no show stopper.

    Again, thanks for your efforts.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 05:48
    Knowing one of the languages (C) very well; two moderately well (SPIN and PASM); and one less than rudimentary (FORTH), I'm convinced, for getting down to the metal (interactively ... which to me is the most efficient way to "feel out" capabilities) FORTH (Tachyon for the Propeller) is my choice. My obstacles are all educational. I must first learn to read the language ... know it's vocabulary and mechanisms (grammar doesn't apply to FORTH). That brings the additional challenge of discerning what is FORTH, what is Tachyon, and what is FORTH extensions. As most of what I've read is promotional (trying to get me to be in awe of the language ... I'm already sold ... now I must efficiently learn) and filled with COIK (Clear Only If Known) I must iterate to learn. This means bouncing among several sources ... plus building my cheatsheet as I go along. This is not unusual in learning a new language that is worth learning. As I learned in mastering C++, a little proficiency is not sufficient. I "must" know the nitty gritty details if I'm to avoid the near impossible-to-resolve-gotchas that come with guessing, assuming, and misunderstanding.

    I will say, I wish you had not chosen to be case sensitive ... rather to retain case but be case insensitive ... but that certainly is no show stopper.

    Again, thanks for your efforts.

    Yes, I am inclined to agree with you, especially about the bit that a little proficiency is not sufficient, it can be very frustrating though.This is normally the problem with Forth in that some may have had some exposure to "Forth" in some form and fumble along trying to write code as if they were still writing in some other language, which of course doesn't work well with Forth. Once they do learn and become quite proficient then the code becomes simpler and clearer and cleaner. I know in C that there's a lot of stuff hidden in libraries that unless it's OSS stays hidden but either way these libraries can be many megabytes in size and are a "language" in themselves to learn. Forth on the other hand tends to be simpler and very compact and so some of these lower level functions are built into the main code rather than relying on general-purpose libraries.

    One of the big pluses of Forth is of course the interactivity possible even at the very low level allowing ideas to be tested and fleshed out and in the process it is usual to find a better way of doing things. As for the case thing I think I could make it switch to "anycase" if a word is not found so it could try again. At present Tachyon does convert a lowercase word to uppercase and try again if it doesn't find it the first time.

    So by all means throw your observations back here as you encounter them, and it doesn't matter whether you have already resolved a problem as the feedback might be useful in formulating and refining Tachyon itself.

    Thanks again for your comments and feedback.
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 05:59
    I'm convinced that if I could just understand the control constructs I'd be able to read and maybe even write Tachyon code. I can, of course, understand how calling words works but the if/then/else and looping constructs always look foreign to me. Just need to spend more time with them I guess.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 06:23
    David Betz wrote: »
    I'm convinced that if I could just understand the control constructs I'd be able to read and maybe even write Tachyon code. I can, of course, understand how calling words works but the if/then/else and looping constructs always look foreign to me. Just need to spend more time with them I guess.

    I said once before that Forth is a bit like assembly, in fact it's the assembly code for a VM so all those Forth words are just like mnemonics. You know the DJNZ instruction? Well the equivalent in Forth is NEXT while LOOP is similar except that it tests for a limit while incrementing the index. The "if_z jmp" instruction is equivalent to IF, yes unlike other languages where IF needs to evaluate an expression, in Forth just like assembly the evaluation is already done and IF just acts on the result, true or false.

    Here is an example showing the simplified equivalent of Forth in assembly language. The stacking and unstacking is left out for clarity and the CMP operation is not correct but I think you would get the idea.
    DUP 9 > 			cmp	tos,#9 wz
    IF			if_z	jmp	#:then	
    $37 +				add	tos,#$37
    THEN		:then
    EMIT				call	#EMIT
    
    10 FOR				mov	loopstk,#10
    		:for
    DUP				mov	sec,tos
    +				add	tos,sec
    NEXT				djnz	loopstk,#:for
    PRINT				call	#PRINT
    

    btw, in other Forths the FOR/NEXT/DO/LOOP are implemented both as compile time words which construct the code and then insert the low-level runtime operation for that word and the branch offset/address. However in Tachyon FOR/DO will just compile the opcode for that word without worrying about the branch address as the address following these instructions will get pushed onto a branch stack which is directly referenced by NEXT/LOOP thereby saving a byte or two and also runs faster because it doesn't need to reference bytecodes in slow hub memory for this address each time through the loop.
    : DEMO #1000 FOR NEXT ;  ok
    ' DEMO 10 DUMP 
    0000_5B3C:   76 03 E8 D5  E1 0F 76 5B   3C 77 10 C4  A0 0F 0F 53   v.....v[<w.....S ok
    ' EXIT . F ok
      ok
    LAP DEMO LAP .LAP  409.000us ok
    
    So each loop takes 400ns with the 9us being the call and return from DEMO as well as pushing #1000 onto the stack.
    76 03 E8 = PUSH2 #1000
    D5 = FOR
    E1 = NEXT
    0F = EXIT (return)
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 06:39
    I said once before that Forth is a bit like assembly, in fact it's the assembly code for a VM so all those Forth words are just like mnemonics. You know the DJNZ instruction? Well the equivalent in Forth is NEXT while LOOP is similar except that it tests for a limit while incrementing the index. The "if_z jmp" instruction is equivalent to IF, yes unlike other languages where IF needs to evaluate an expression, in Forth just like assembly the evaluation is already done and IF just acts on the result, true or false.

    Here is an example showing the simplified equivalent of Forth in assembly language. The stacking and unstacking is left out for clarity and the CMP operation is not correct but I think you would get the idea.
    DUP 9 > 			cmp	tos,#9 wz
    IF			if_z	jmp	#:then	
    $37 +				add	tos,#$37
    THEN		:then
    EMIT				call	#EMIT
    
    10 FOR				mov	loopstk,#10
    		:for
    DUP				mov	sec,tos
    +				add	tos,sec
    NEXT				djnz	loopstk,#:for
    PRINT				call	#PRINT
    

    btw, in other Forths the FOR/NEXT/DO/LOOP are implemented both as compile time words which construct the code and then insert the low-level runtime operation for that word and the branch offset/address. However in Tachyon FOR/DO will just compile the opcode for that word without worrying about the branch address as the address following these instructions will get pushed onto a branch stack which is directly referenced by NEXT/LOOP thereby saving a byte or two and also runs faster because it doesn't need to reference bytecodes in slow hub memory for this address each time through the loop.
    : DEMO #1000 FOR NEXT ;  ok
    ' DEMO 10 DUMP 
    0000_5B3C:   76 03 E8 D5  E1 0F 76 5B   3C 77 10 C4  A0 0F 0F 53   v.....v[<w.....S ok
    ' EXIT . F ok
      ok
    LAP DEMO LAP .LAP  409.000us ok
    
    So each loop takes 400ns with the 9us being the call and return from DEMO as well as pushing #1000 onto the stack.
    76 03 E8 = #1000
    D5 = FOR
    E1 = NEXT
    0F = EXIT (return)
    Thanks Peter. I think I have a handle on IF ELSE THEN. Need to spend some more time with FOR though.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 06:51
    David Betz wrote: »
    Thanks Peter. I think I have a handle on IF ELSE THEN. Need to spend some more time with FOR though.

    Don't forget too that Tachyon allows you to interactively use these constructs unlike other Forths where they only work within definitions. Try this:
    10 FOR CR IX FOR "*" EMIT NEXT NEXT
    
    results in:
    **********
    *********
    ********
    *******
    ******
    *****
    ****
    ***
    **
    * ok
    
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 06:59
    Don't forget too that Tachyon allows you to interactively use these constructs unlike other Forths where they only work within definitions. Try this:
    10 FOR CR IX FOR "*" EMIT NEXT NEXT
    
    results in:
    **********
    *********
    ********
    *******
    ******
    *****
    ****
    ***
    **
    * ok
    
    I'm at work and don't have access to a Propeller board so I can't try this right now but it looks like FOR executes a loop for the number of times indicated by the number on the top of the stack when it is invoked. Within the loop, IX must represent the current value of the looping variable. From the display, I guess FOR counts down from the original value and stops when it reaches zero. NEXT marks the end of the loop and represents the branch back to the start. I assume the test is done at the end? What happens if I do "0 FOR ... NEXT"? Will the loop execute at all? If I wanted to access the looping variable in the inner loop, what would I use? IY?
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 07:14
    David Betz wrote: »
    I'm at work and don't have access to a Propeller board so I can't try this right now but it looks like FOR executes a loop for the number of times indicated by the number on the top of the stack when it is invoked. Within the loop, IX must represent the current value of the looping variable. From the display, I guess FOR counts down from the original value and stops when it reaches zero. NEXT marks the end of the loop and represents the branch back to the start. I assume the test is done at the end? What happens if I do "0 FOR ... NEXT"? Will the loop execute at all? If I wanted to access the looping variable in the inner loop, what would I use? IY?

    You can always telnet into tachyonforth.com on port 10001 to talk to Tachyon. Type BYE or QUIT to disconnect or just disconnect when you are done.

    The inner loop's index is still accessed by IX (for want of a better name). Try this:
    10 FOR CR IX FOR IX PRINT SPACE NEXT NEXT
    

    For DO loops the index is referenced with I whereas IX will reference the loop limit. To access the index from the outer loop use J then K but these can easily be constructed further if you consider the source for these:
    pub J 		3 LSTACK COG@ ;
    pub K 		5 LSTACK COG@ ;
    pub IX		0 LSTACK COG@ ;
    
    So therefore "JX" if it existing would be "pub JX 1 LSTACK COG@ ;"
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 07:27
    That's very cool that I can telnet into a Propeller running Tachyon. I tried your example and I think I understand how it works. Thanks!
  • Dave HeinDave Hein Posts: 6,331
    edited 2015-03-04 09:23
    The telnet feature is nice. I tried out a few basic words and it works great.
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 09:34
    What am I connecting to when I telnet to tachyonforth.com? Is it a Spinneret?
  • D.PD.P Posts: 790
    edited 2015-03-04 11:23
    Thanks everyone for your feedback, it does make a difference because many times I feel like I'm wasting my time talking into empty space. When I feel like that I always have to re-examine my motives for taking this public but despite the extra effort that is required to publicly maintain it on top of the project itself, I find that like many of us who share, it is because we enjoy what we do and love to share what we enjoy.

    So the question of whether to maintain the project publicly comes down to whether anyone finds it useful. I know that Parallax themselves are only supporting Spin or C despite the fact that Tachyon is already a very powerful development environment that can run on an unexpanded Prop itself, and that it has demonstrated that it is very capable even of handling multiple files and multiple networking protocols while still having memory available to run applications. In the forum as a whole there seems to be a lot of emphasis on developing "development tools" rather than being beyond that and developing applications and projects.

    I'm aware of a number of ones that regularly use Tachyon although it would be neat to see some projects published, either in full or as feedback. I like to tune my system and this kind of feedback helps me to improve it. If you are thinking of using Tachyon but haven't yet then what is it that might be holding you back?

    I've been so buried at work it is rediculous. Even more rediculous is the productivity I have with Tachyon. 2 Cogs and I have a full touch screen driven embedded app that has telnet, ftp, http, SD access as well, not to mention the serial console. I will now add a flame detector sensor to the device if it will fit since I only have 5 cogs left and 2K+ of FORTH code space!!!!

    Thanks for everything Peter, I was difficult to transistion from procedural programming but now there is no going back for me.
  • D.PD.P Posts: 790
    edited 2015-03-04 11:40
    Could be a spinnerte or a new IO5500 module with the wiznet 5500 chip, last I knew it was a spinneret.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 14:10
    D.P wrote: »
    Could be a spinnerte or a new IO5500 module with the wiznet 5500 chip, last I knew it was a spinneret.

    It's the IoT5500, barely any larger than the magjack itself sitting on the end of a cat5. The spinneret was really only used at the time to test the W5100 code which MJB asked me about as I had already done the W5200 and W5500. The W5100 seemed like a backward step but many had spinnerets plus the code only took a few hours anyway.
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 14:26
    It's the IoT5500, barely any larger than the magjack itself sitting on the end of a cat5. The spinneret was really only used at the time to test the W5100 code which MJB asked me about as I had already done the W5200 and W5500. The W5100 seemed like a backward step but many had spinnerets plus the code only took a few hours anyway.
    Nice module!
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 15:02
    David Betz wrote: »
    I'm at work and don't have access to a Propeller board so I can't try this right now but it looks like FOR executes a loop for the number of times indicated by the number on the top of the stack when it is invoked. Within the loop, IX must represent the current value of the looping variable. From the display, I guess FOR counts down from the original value and stops when it reaches zero. NEXT marks the end of the loop and represents the branch back to the start. I assume the test is done at the end? What happens if I do "0 FOR ... NEXT"? Will the loop execute at all? If I wanted to access the looping variable in the inner loop, what would I use? IY?

    Only just now did I read your explanation properly so just a few corrections on these words:

    FOR is not part of the NEXT loop but it does setup the loop stack with the value passed to it (10) and also pushes the address of the next instruction onto the branch stack. The branch stack btw is Tachyon and Propeller specific. When NEXT is executed it decrements the loop parameter IX and jumps if the result is non-zero to the address that is on top of the branch stack. If the value was zero then the loop stack and branch stack are popped and discarded and execution continues with the instruction following NEXT. So taking the simple example of "10 FOR IX PRINT SPACE NEXT" the execution runs like this:

    10 --- push 10 onto the data stack
    FOR --- pop the value off the data stack and push it onto the loop stack while pushing the address of the next instruction onto the branch stack (which marks the start of the loop)
    --- this address here is on the top of the branch stack
    IX --- read the value of the top item on the loop stack and push it onto the data stack
    PRINT --- calls the number PRINT function which prints the number using the current base (radix).
    SPACE --- emits a space character
    NEXT --- decrement IX and if it's non-zero then jump back to the address which is held in the branch stack

    This is the PASM code for all the looping instructions which may give you some insight but it is readily available from the Tachyon source documents:
    ' DO ( to from -- )
    DO 			call	#_PUSHLP	        ' PUSH index onto loop stack
     ' FOR ( count -- ) Setup FOR...NEXT loop for count
    FOR 			call	#_PUSHBRANCH	        ' Push the IP onto the branch stack and setup loop count
    ' >L ( n -- ) Push n onto the loop stack
    PUSHL 			call	#_PUSHLP
     			jmp	unext
    
    ' L> ( -- n ) Pop n from the loop stack
    LPOP 			call	#LPOPX	                ' Pop loop stack into X
     			jmp	#PUSHX	                ' Push X onto the data stack as tos
    
    {HELP +LOOP ( n1 -- )
    DESC: adds n1 to the loop index and branches back if not equal to the loop limit
    }
    PLOOP			jmpret	POPX_ret,pDELTA wc	' DELTA calls POPX
    '
    ' The comparison above is between the call insn (wr) at DELTA and the jump insn (nr) at POPX_ret,
    ' this will always be carry set. The call itself is indirect.
    
    ' 400ns execution time including bytecode read and execute
    {HELP (LOOP)
    DESC: increment the loop index and branch back to after DO if not equal to loop limit
    }
    LOOP	if_nc		mov	X,#1	                ' default loop increment of 1
     			add	loopstk+1,X	        ' increment index
    			cmps     loopstk,loopstk+1 wz,wc
    BRANCH	if_a		mov	IP,branchstk 	        ' Branch to the address that is saved in branch
    	if_a		jmp	unext
    			jmpret	LPOPX_ret,forNEXT+1 wc	' discard top of loop index stack
    				                	' then next loop and its branch address
    
    ' The call above borrows an indirect jump target from the call #LPOPX following the djnz at forNEXT.
    ' IOW it's equivalent to a jmpret LPOPX_ret, #LPOPX or call #LPOPX (ignoring flag update).
    
    ' Average execution time = 400ns
    ' NEXT ( -- ) Decrement count (on loop stack) and loop until 0, then pop loop stack
    forNEXT 	if_nc	djnz	loopstk,#BRANCH wc,wz	' not done yet, jump to branch
    			call	#LPOPX
    ' POPBRANCH - pops the branch stack manually (use if forcing an exit from a stacked branch)
    POPBRANCH		call	#_POPBRANCH
     			jmp	unext
    
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 15:12
    Only just now did I read your explanation properly so just a few corrections on these words:

    FOR is not part of the NEXT loop but it does setup the loop stack with the value passed to it (10) and also pushes the address of the next instruction onto the branch stack. The branch stack btw is Tachyon and Propeller specific. When NEXT is executed it decrements the loop parameter IX and jumps if the result is non-zero to the address that is on top of the branch stack. If the value was zero then the loop stack and branch stack are popped and discarded and execution continues with the instruction following NEXT. So taking the simple example of "10 FOR IX PRINT SPACE NEXT" the execution runs like this:

    10 --- push 10 onto the data stack
    FOR --- pop the value off the data stack and push it onto the loop stack while pushing the address of the next instruction onto the branch stack (which marks the start of the loop)
    --- this address here is on the top of the branch stack
    IX --- read the value of the top item on the loop stack and push it onto the data stack
    PRINT --- calls the number PRINT function which prints the number using the current base (radix).
    SPACE --- emits a space character
    NEXT --- decrement IX and if it's non-zero then jump back to the address which is held in the branch stack

    What happens if I do this?
    0 FOR IX PRINT SPACE NEXT
    
    Does the loop execute at all?
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 15:33
    David Betz wrote: »
    What happens if I do this?
    0 FOR IX PRINT SPACE NEXT
    
    Does the loop execute at all?

    Since FOR does not do any testing or looping then the loop code will always execute at least once before testing. In this case an invalid value of zero will execute once just the same as a value of one. In a language that is compiled on a PC the compiler can check for this at compile time and "optimize" it or there may be code at runtime which checks for illegal conditions. In the first instance we are running in a tight embedded environment so there is no "optimization" and in fact you can count on your code being compiled the way you want it to, and besides it does it all in a single pass and on the fly. Secondly any extra runtime code that checked for legalities would be nice but besides taking up precious cog memory it would slow down execution which is not nice. Besides the following PASM sequence sets up with a loop count of zero yet executes 4 billion times:
    mov	loopcnt,#0
    myloop		nop
    		djnz	loopcnt,#myloop
    

    Where the code needs to be able to handle illegal conditions in cases where this might be reasonably expected it is a simple matter to test beforehand:
    ?DUP IF FOR IX PRINT SPACE NEXT THEN
  • David BetzDavid Betz Posts: 14,381
    edited 2015-03-04 15:36
    Since FOR does not do any testing or looping then the loop code will always execute at least once before testing. In this case an invalid value of zero will execute once just the same as a value of one. In a language that is compiled on a PC the compiler can check for this at compile time and "optimize" it or there may be code at runtime which checks for illegal conditions. In the first instance we are running in a tight embedded environment so there is no "optimization" and in fact you can count on your code being compiled the way you want it to, and besides it does it all in a single pass and on the fly. Secondly any extra runtime code that checked for legalities would be nice but besides taking up precious cog memory it would slow down execution which is not nice. Besides the following PASM sequence sets up with a loop count of zero yet executes 4 billion times:
    mov	loopcnt,#0
    myloop		nop
    		djnz	loopcnt,#myloop
    

    Where the code needs to be able to handle illegal conditions in cases where this might be reasonably expected it is a simple matter to test beforehand:
    ?DUP IF FOR IX PRINT SPACE NEXT THEN

    Umm. No need to be defensive. I wasn't complaining, just trying to understand.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-04 15:45
    David Betz wrote: »
    Umm. No need to be defensive. I wasn't complaining, just trying to understand.

    Not defensive at all, the manner of explanation might sound defensive but it comes from years of having to do comparisons with other "languages" to help people to understand. You know the number of times someone will ask something like "why doesn't Forth have floating point?" for instance and then you have to go into the difference between PCs and embedded targets, limited memory and processing capabilities, efficiencies of scaled integers and such like, it all sounds defensive when it fact it's an ongoing re-education process!

    It's kind of like having to explain binary to people who have no idea about number bases, they have never thought about why they write 123 as they do. As you know there are only 10 kinds of people in the world who understand binary, those who do and those who don't :)
  • Todd MarshallTodd Marshall Posts: 89
    edited 2015-03-05 06:33
    Re Structured programming in FORTH: I still have lots of learning curve climbing to do. But from experience, I don't like techniques that employ cute tricks to pretend to be natural languages and thus supposedly readable. When I get to where I can dissect the mechanisms of interpreting structured-programming-like code (and your use of a special stack to support it efficiently), I expect I will just want to use the mechanism explicitly and not try to hide it with words like FOR that don't do what their natural language would suggest but just arm the mechanism for words like NEXT that actually do the work.

    When I get to that point on my learning curve maybe I'll change my mind ... but for now I expect using the recommended mechanism directly would avoid questions, confusion, ambiguity, and incorrect assumptions to which trying to be a "natural language" leads.
  • livinlowelivinlowe Posts: 10
    edited 2015-03-05 17:25
    So Im trying to download Tychyon and Im getting undefined symbol errors? Sorry, long time lurker, am I missing something?

    Shawn
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-05 18:13
    livinlowe wrote: »
    So Im trying to download Tychyon and Im getting undefined symbol errors? Sorry, long time lurker, am I missing something?

    Shawn

    Hi Shawn, I am assuming you are trying to download serially to the running kernel. Have you set your terminal to 15ms or more LINE delay (not character)?

    Otherwise a little more information will help, it doesn't cost anything and saves a lot of time.
  • livinlowelivinlowe Posts: 10
    edited 2015-03-05 18:56
    Hi Shawn, I am assuming you are trying to download serially to the running kernel. Have you set your terminal to 15ms or more LINE delay (not character)?

    Otherwise a little more information will help, it doesn't cost anything and saves a lot of time.
    Peter-
    LOL, yeah more info would be good. I copied and pasted the source code into the propeller tool and was doing a compilation check when I got the errors. pwm32 is already defined. I have tried to copy and paste the whole google page versus just the source code section, but the prop tool found tons of errors when I did that.

    BTW, this is a pretty impressive thing you have created and you should feel proud of your hard work. I have downloaded tera term and set the line delay to 20, just cant get the program to compile so i can download it into the propeller.

    Looking forward to playing with tachyon( which I only barely understand because I used a HP48 in college so I understand the stack concept)

    Thank you for your time
    Shawn
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-05 20:15
    livinlowe wrote: »
    Peter-
    LOL, yeah more info would be good. I copied and pasted the source code into the propeller tool and was doing a compilation check when I got the errors. pwm32 is already defined. I have tried to copy and paste the whole google page versus just the source code section, but the prop tool found tons of errors when I did that.

    BTW, this is a pretty impressive thing you have created and you should feel proud of your hard work. I have downloaded tera term and set the line delay to 20, just cant get the program to compile so i can download it into the propeller.

    Looking forward to playing with tachyon( which I only barely understand because I used a HP48 in college so I understand the stack concept)

    Thank you for your time
    Shawn


    Thanks Shawn, don't forget you can download the binary to start off with. The files are in the Tachyon Dropbox and there are links in my sig.

    Just noticed that the link to V2.4 Google doc in the links page is incorrect. I have now fixed that up to point to the correct page and fixed a couple of little things that was upsetting the Propeller tool. Only thing is if you do copy and paste from this document you just need to delete the last line which says "Published by Google...." and it should compile fine. There are plain text sources in the Dropbox folder but the Google docs versions are always the master docs and always the most current.
  • livinlowelivinlowe Posts: 10
    edited 2015-03-06 16:04
    Peter & all that can or want to help-
    Thanks for the updated google docs page. That one compiled perfectly and I downloaded it into my PPDB. when I do a break on tera term, or press the reset on the PPDB, with 8n1 230400 baud all i get is gibberish. Any ideas? I did change the freqency to 5_000_000 even though your tutorial says tachyon will automatically change the setting. the program in the spin tool calls out 230400 baud so Im a little confused (I know, WOW he's confused! lol)

    Thanks!
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2015-03-06 18:27
    livinlowe wrote: »
    Peter & all that can or want to help-
    Thanks for the updated google docs page. That one compiled perfectly and I downloaded it into my PPDB. when I do a break on tera term, or press the reset on the PPDB, with 8n1 230400 baud all i get is gibberish. Any ideas? I did change the freqency to 5_000_000 even though your tutorial says tachyon will automatically change the setting. the program in the spin tool calls out 230400 baud so Im a little confused (I know, WOW he's confused! lol)

    Thanks!
    Did you change the frequency before you got the gibberish? You know what they say "if it ain't broke, don't fix it". The problem is that the PLL is set to x8 and if you manually changed the frequency then it will only run at 40MHz. Best to leave it unless you have something other than 5 or 10MHz.

    Now if you had left it as it was and it spat out gibberish then I'd be confused :)
  • livinlowelivinlowe Posts: 10
    edited 2015-03-07 07:43
    Did you change the frequency before you got the gibberish? You know what they say "if it ain't broke, don't fix it". The problem is that the PLL is set to x8 and if you manually changed the frequency then it will only run at 40MHz. Best to leave it unless you have something other than 5 or 10MHz.

    Now if you had left it as it was and it spat out gibberish then I'd be confused :)
    Well Peter, you da man. Its up and running. Thanks for your assistance! now to go play, he, he, he!
Sign In or Register to comment.