I have a Spinneret sitting idle and I thought I'd load Tachyon on it. My question is about the Wiznet 5100 module, it appears to have been written for kernel 2.1, has it been brought forward to work with 2.3 or would I be better off using 2.1 and a 2.1 compatible EXTEND.fth to go with it? My budget doesn't include a Wiznet 5200 for the QuickStart just now.
So normally to reverse the lower 8-bits of a number we need to do a #24 REV
SPIWR is a simple word to clock out SPI data quickly but only at a fixed 8-bits at a time. SPI is normally sent MSB first so the data needs to be left justified to work so if you are sending 32-bits then it is already "left justified" in that the MSB is aligned with bit 31. To send all 32-bits just repeat the instruction like this SPIWR SPIWR SPIWR SPIWR after which there will be the shifted remains of the number left on the stack (always zero in this case). Execution time is 12us.
If you needed to shift 16-bits you would left justify first with a 16 SHL then SPIWR SPIWR which takes 8us
For 24 bits it's 8 SHL SPIWR SPIWR SPIWR which takes 11us
If you only need 8-bits there is the SPIWRB which left justifies the byte for you as this only takes one precious extra PASM instruction and is more efficient for an otherwise common operation which takes 3us
BTW, the SPIWR instruction has it's own pin mask registers, you can set them directly or else use SPIPINS ( ce-miso-mosi-clk -- ) where a long specifies the 4 pins to use.
i.e. Say we have chip enable on P27, clock on P24, MOSI on P25 and MISO on P26 (not used by SPIWR), the long is encoded as &27.26.25.24 SPIPINS which uses the Tachyon specific & byte encoded decimal notation as used in IP addresses to make it easier for us.
\ fibonacci - iterative method - but skip test for n = 0
: fibo ( n -- f )
0 1 \ Setup initial calculations "0 1"
ROT \ rotate n to top of stack - for n times
FOR
OVER + SWAP \ next iteration -> result prev
NEXT
DROP \ discard the prev result, leave the current result
;
\ fibonacci test - just a Q&D one liner
DECIMAL
1 26 ADO CR ." fibo(" I . ." ) = " NEWCNT I fibo .LAP ." result =" . LOOP
VS this Compile, Link, Download
/**
* This is the main fiboiterative program file.
*
* Fibonnaci numbers skipping fibo(0).
* Uses iterative (default) or recursive method.
* Saves results and times in an array, then prints them.
*/
#include <stdio.h>
#include <unistd.h>
#include <propeller.h>
#define LAST 26
inline int fiboi(int num)
{
int fibo = 1;
int fibo1 = 1;
int fibo2 = 1;
int j;
if(num < 3) {
return fibo;
}
else {
fibo1 = 1;
fibo2 = 1;
for(j = 3; j <= num; j++) {
fibo = fibo1 + fibo2;
fibo2 = fibo1;
fibo1 = fibo;
}
}
return fibo;
}
int fibor(int num)
{
if (num < 3) {
return 1;
}
return fibor(num-1) + fibor(num-2);
}
int main(void)
{
int n;
int times[LAST+1];
int result[LAST+1];
sleep(1); // startup time for SimpleIDE
for(n = 1; n <= LAST; n++) {
times[n] = CNT;
result[n] = fiboi(n); // replace with fibor(n) for recursive function
times[n] = CNT-times[n];
}
if(times[LAST]*125/10000 < 100) {
for(n = 1; n <= LAST; n++) {
printf("fibo(%2d) = %6d (%4d ticks) (%dus)\n", n, result[n], times[n], times[n]*125/10000);
}
}
else {
for(n = 1; n <= LAST; n++) {
printf("fibo(%2d) = %6d (%8d ticks) (%dms)\n", n, result[n], times[n], times[n]*125/10000000);
}
}
return 0;
}
If I need a sub 10us Fibo routine it's time for an assembler RUNMOD, until then I have a life to live, THANK YOU Peter!!
Also the comment "can you do a proper recursive version" as if the correct results are not correct because your syntax didn't curtsy correctly before emitting the results.
HA!
Also the comment "can you do a proper recursive version" as if the correct results are not correct because your syntax didn't curtsy correctly before emitting the results.
HA!
This is a stupid comment. The point of the benchmark was to be able to compare various languages. That isn't possible if they don't all use the same algorithm. It isn't a statement about which algorithm is best. Of course the iterative one is the one you'd actually use if you wanted to compute Fibonacci numbers.
This is a stupid comment. The point of the benchmark was to be able to compare various languages. That isn't possible if they don't all use the same algorithm. It isn't a statement about which algorithm is best. Of course the iterative one is the one you'd actually use if you wanted to compute Fibonacci numbers.
Don't go hostile, the thread was all over the place, you need to chill. Learn Forth, increase idea density, prevent alzheimer's. Go play somewhere else if you can take a joke or be nice.
Don't go hostile, the thread was all over the place, you need to chill. Learn Forth, increase idea density, prevent alzheimer's. Go play somewhere else if you can take a joke or be nice.
You don't think your comment sounded hostile or at least insulting? I'm sick of this "Forth is wonderful and better than anything else" mentality. I believe Forth has value but so do lots of other things including Spin and C/C++. This Forth cheerleading is getting tiresome.
It's been bashed merciouly here David, over and over again. Without anyone giving it a chance, all the "gibberish" comments as if ANY computer syntax is straight forward to those not skilled in the art! I work with people just trying to make the lights blink and a Tachyon terminal lets me get them started thinking about how a computer works. For me it's about productivity and maintenance of a entire system, not about the language part that was used to develop a part of a system. I'm sick and tired of all the language wars and mine is bigger than yours BS. I've really struggled to learn Tachyon and FORTH since I was never exposed to any TIL lanaguges. I like the way I can have all my tools on the micro controller and frob chips from the terminal to get them to talk SPI, I2C and all the various vendor's hybrids of these "standards" as opposed to compile->link-download test, didn't work, do it all again!!! Look at the simplicity of some of the drivers Peter has wrote, it really shines here I think.
If you took serious offense to my comment, appologies. People are dying all over the world every second, it's only the spoiled who get to argue about what language is better than the other, just like religion. I want to build simple devices to try to help people who are much less advantaged than us. I find Tachyon / Forth is easier for me to try and accomplish my goals. I will refrain from all the noise on these forums, people are really ticked off here it seems.
It's been bashed merciouly here David, over and over again. Without anyone giving it a chance, all the "gibberish" comments as if ANY computer syntax is straight forward to those not skilled in the art! I work with people just trying to make the lights blink and a Tachyon terminal lets me get them started thinking about how a computer works. For me it's about productivity and maintenance of a entire system, not about the language part that was used to develop a part of a system. I'm sick and tired of all the language wars and mine is bigger than yours BS. I've really struggled to learn Tachyon and FORTH since I was never exposed to any TIL lanaguges. I like the way I can have all my tools on the micro controller and frob chips from the terminal to get them to talk SPI, I2C and all the various vendor's hybrids of these "standards" as opposed to compile->link-download test, didn't work, do it all again!!! Look at the simplicity of some of the drivers Peter has wrote, it really shines here I think.
If you took serious offense to my comment, appologies. People are dying all over the world every second, it's only the spoiled who get to argue about what language is better than the other, just like religion. I want to build simple devices to try to help people who are much less advantaged than us. I find Tachyon / Forth is easier for me to try and accomplish my goals. I will refrain from all the noise on these forums, people are really ****** off here it seems.
I agree that Tachyon seems to be a very nice system. I never said otherwise as far as I can recall. I'd love to read about what cool things people are doing with it and with any other Propeller language or programming system. No need to try to push it on everyone else, just tell everyone about the great things you're doing with it and some will surely want to jump on board like you have.
Tachyon maintains it stacks in cog registers, and doesn't allow for deep recursion. This is by design to provide the highest execution speed. It would be possible to implement the recursive fibo algorithm in Tachyon by implementing a secondary data stack. Prior to calling itself, fibo could move the contents of the data stack and the return address to the secondary stack. It would restore the values upon return from the recursively called fibo. This would prevent the data and return stacks from growing. It would require a few extra cycles to do this, but it would be an interesting exercise that might be useful for other applications.
Tachyon maintains it stacks in cog registers, and doesn't allow for deep recursion. This is by design to provide the highest execution speed. It would be possible to implement the recursive fibo algorithm in Tachyon by implementing a secondary data stack. Prior to calling itself, fibo could move the contents of the data stack and the return address to the secondary stack. It would restore the values upon return from the recursively called fibo. This would prevent the data and return stacks from growing. It would require a few extra cycles to do this, but it would be an interesting exercise that might be useful for other applications.
No need to go to all that trouble. It's clear that Tachyon will be fast even with the recursive version of Fibo as is pfth. Both seem to be very capable languages for interactive programming of the Propeller! Congratulations to both of you!
Well as I said before, benchmarks are useful tools but they don't tell you everything. It is possible to compile down to PASM and dedicate a cog to nothing else but the benchmark. How about that same benchmark running in a TELNET session perhaps? Out of the same cog too? That would be a treat!
Here it is, the raw output including pasting and compiling through telnet...
[FONT=courier new]peter@peter-XPS-L702X-LM16 ~ $ telnet 192.168.16.151
Trying 192.168.16.151...
Connected to 192.168.16.151.
Escape character is '^]'.
WELCOME TO THE TACHYON WIZNET TELNET SESSION!
ok
\ fibonacci - iterative method - but skip test for n = 0
: fibo ( n -- f )
0 1 \ Setup initial calculations "0 1"
ROT \ for n times
FOR
OVER + SWAP \ next iteration -> result prev
NEXT
DROP \ discard the prev result, leave the current result
;
\ fibonacci test - just a Q&D one liner
DECIMAL
1 26 ADO CR ." fibo(" I . ." ) = " NEWCNT I fibo .LAP ." result =" . LOOP
ok
n -- f )
ok
ok
ok
fibo(") = " result ="
fibo(1) = 13us result =1
fibo(2) = 16us result =1
fibo(3) = 19us result =2
fibo(4) = 22us result =3
fibo(5) = 25us result =5
fibo(6) = 28us result =8
fibo(7) = 31us result =13
fibo(8) = 34us result =21
fibo(9) = 37us result =34
fibo(10) = 40us result =55
fibo(11) = 43us result =89
fibo(12) = 46us result =144
fibo(13) = 49us result =233
fibo(14) = 52us result =377
fibo(15) = 55us result =610
fibo(16) = 58us result =987
fibo(17) = 61us result =1597
fibo(18) = 64us result =2584
fibo(19) = 67us result =4181
fibo(20) = 70us result =6765
fibo(21) = 73us result =10946
fibo(22) = 76us result =17711
fibo(23) = 79us result =28657
fibo(24) = 82us result =46368
fibo(25) = 85us result =75025
fibo(26) = 88us result =121393 ok
[/FONT]
Note: looks like I've got some echoed stuff from the compile spitting out later than sooner in telnet, something for me to look into.
EDIT: I've done an extra test of opening and logging the results to a file then listing that. All interactively via telnet of course.
[FONT=courier new]peter@peter-XPS-L702X-LM16 ~ $ telnet 192.168.16.151
Trying 192.168.16.151...
Connected to 192.168.16.151.
Escape character is '^]'.
WELCOME TO THE TACHYON WIZNET TELNET SESSION!
\ fibonacci - iterative method - but skip test for n = 0
: fibo ( n -- f )
0 1 \ Setup initial calculations "0 1"
ROT \ for n times
FOR
OVER + SWAP \ next iteration -> result prev
NEXT
DROP \ discard the prev result, leave the current result
;
n -- f )
ok
\ fibonacci test - just a Q&D one liner
DECIMAL
1 26 ADO CR ." fibo(" I . ." ) = " NEWCNT I fibo .LAP ." result =" . LOOP
ok
fibo(") = " result ="
fibo(1) = 13us result =1
fibo(2) = 16us result =1
fibo(3) = 19us result =2
fibo(4) = 22us result =3
fibo(5) = 25us result =5
fibo(6) = 28us result =8
fibo(7) = 31us result =13
fibo(8) = 34us result =21
fibo(9) = 37us result =34
fibo(10) = 40us result =55
fibo(11) = 43us result =89
fibo(12) = 46us result =144
fibo(13) = 49us result =233
fibo(14) = 52us result =377
fibo(15) = 55us result =610
fibo(16) = 58us result =987
fibo(17) = 61us result =1597
fibo(18) = 64us result =2584
fibo(19) = 67us result =4181
fibo(20) = 70us result =6765
fibo(21) = 73us result =10946
fibo(22) = 76us result =17711
fibo(23) = 79us result =28657
fibo(24) = 82us result =46368
fibo(25) = 85us result =75025
fibo(26) = 88us result =121393 ok
FOPEN LOG0008.TXT
...opened at 0000.3B67 ok
FOUTPUT 1 26 ADO CR ." fibo(" I . ." ) = " NEWCNT I fibo .LAP ." result =" . LOOP CON
cat LOG0008.TXT
fibo(") = " result =" ok
...opened at 0000.3B67
fibo(1) = 13us result =1
fibo(2) = 16us result =1
fibo(3) = 19us result =2
fibo(4) = 22us result =3
fibo(5) = 25us result =5
fibo(6) = 28us result =8
fibo(7) = 31us result =13
fibo(8) = 34us result =21
fibo(9) = 37us result =34
fibo(10) = 40us result =55
fibo(11) = 43us result =89
fibo(12) = 46us result =144
fibo(13) = 49us result =233
fibo(14) = 52us result =377
fibo(15) = 55us result =610
fibo(16) = 58us result =987
fibo(17) = 61us result =1597
fibo(18) = 64us result =2584
fibo(19) = 67us result =4181
fibo(20) = 70us result =6765
fibo(21) = 73us result =10946
fibo(22) = 76us result =17711
fibo(23) = 79us result =28657
fibo(24) = 82us result =46368
fibo(25) = 85us result =75025
fibo(26) = 88us result =121393 ok
ok
[/FONT]
Telnet, a web server, fast execution, and on and on. I find it amazing that you've been able to squeeze so much into an unexpanded Propeller using Tachyon. It is certainly a work of art.
I've tried to modify the BLINKERS code to use the new linked timers but no joy so far
TABLE mytimers 8 8 * ALLOT \ allot for 8 doubles
: mytimers@ ( index -- addr ) 8 * mytimers + ;
#16 == ledpins
TABLE blinkrates
#50 || #500 ||
#50 || #300 ||
#50 || #150 ||
#50 || #285 ||
#50 || #175 ||
#50 || #335 ||
#50 || #100 ||
#50 || #195 ||
pub BLINKER ( accesses index of calling loop )
I 2* 2* blinkrates + I ledpins + DUP PIN@ IF PINCLR 2+ ELSE PINSET THEN W@ I mytimers@ TIMEOUT
;
pub clrpin I ledpins + PINCLR ;
pub BLINKERS ( flg -- ) IF ' BLINKER ELSE ' clrpin THEN 8 0 DO DUP I mytimers@ ALARM 1 I mytimers@ TIMEOUT LOOP DROP ;
{ Usage:
ON BLINKERS \ will activate the timers and blink functions
OFF BLINKERS \ will cause the timers to timeout in the next millisecond and turnoff the LEDs
}
." missing something here"
Yes, because in the old code BLINKERS could access the I index of the calling loop of TIMERTASK to ascertain which timer had timed out. With the new linked timers there is no index, however the address of the timer in question is available on the stack. The code would look like this then:
[FONT=courier new]TABLE mytimers 8 8 * ALLOT \ allot space for 8 doubles (leave next line blank!)
pub @mytimers 2* 2* 2* mytimers + ;
#16 == ledpins
TABLE blinkrates
#50 || #500 ||
#50 || #300 ||
#50 || #150 ||
#50 || #285 ||
#50 || #175 ||
#50 || #335 ||
#50 || #100 ||
#50 || #195 ||
pub BLINKER ( timeraddr -- timeraddr )
DUP mytimers - 2/ 2/ 2/ >L \ convert timeraddr to an IX index onto loop stack
IX 2* 2* blinkrates + \ point to a blinkrate for this timer
IX ledpins + \ point to the ledpin to use
DUP PIN@ IF PINCLR 2+ ELSE PINSET THEN \ toggle the pin and (re)point to blinkrate
W@ L> @mytimers TIMEOUT \ Fetch and set that blinkrate (either the on or off one)
;
pub clrpin I ledpins + PINCLR ;
pub BLINKERS ( flg -- )
IF ' BLINKER ELSE ' clrpin THEN
8 0 DO DUP I @mytimers ALARM 1 I @mytimers TIMEOUT LOOP DROP
;
[/FONT]
This is ugly though and there are better ways of doing this with the new linked timers but this provides the correction to the existing code so you can see how it works.
Yes, because in the old code BLINKERS could access the I index of the calling loop of TIMERTASK to ascertain which timer had timed out. With the new linked timers there is no index, however the address of the timer in question is available on the stack. The code would look like this then:
[FONT=courier new]TABLE mytimers 8 8 * ALLOT \ allot space for 8 doubles (leave next line blank!)
pub @mytimers 2* 2* 2* mytimers + ;
#16 == ledpins
TABLE blinkrates
#50 || #500 ||
#50 || #300 ||
#50 || #150 ||
#50 || #285 ||
#50 || #175 ||
#50 || #335 ||
#50 || #100 ||
#50 || #195 ||
pub BLINKER ( timeraddr -- timeraddr )
DUP mytimers - 2/ 2/ 2/ >L \ convert timeraddr to an IX index onto loop stack
IX 2* 2* blinkrates + \ point to a blinkrate for this timer
IX ledpins + \ point to the ledpin to use
DUP PIN@ IF PINCLR 2+ ELSE PINSET THEN \ toggle the pin and (re)point to blinkrate
W@ L> @mytimers TIMEOUT \ Fetch and set that blinkrate (either the on or off one)
;
pub clrpin I ledpins + PINCLR ;
pub BLINKERS ( flg -- )
IF ' BLINKER ELSE ' clrpin THEN
8 0 DO DUP I @mytimers ALARM 1 I @mytimers TIMEOUT LOOP DROP
;
[/FONT]
This is ugly though and there are better ways of doing this with the new linked timers but this provides the correction to the existing code so you can see how it works.
I would prefer the concept of "idea compresssion" as to ugly, this has given me insight not yet gleaned from the source, thanks.
I have loaded Tachyon in my QuickStart board EEPROM and it works. Now I would like to add the EXTEND.fth file. I read the tutorial explanations :
Select All and copy the text then paste this into your serial terminal which should have a line delay of around 20ms (no character delay) to allow time for Tachyon to process each line of source.
Well I think you have run afoul of one of my late night edits, I've fixed that now. Yes, just select the lot and a paste into minicom will automatically filter out any non-text and it should work fine. You can type ^A F to send a break from minicom which will reset the Prop to start a clean load. The Google docs webpage version that you have grabs the header and footer of the document as well when you select all and that is why the header title is in brackets while the footer is a "Published blah blah blah which triggers an ignore line in Tachyon.
BTW, there's always the dropbox versions but the link you have will always be the latest to work from, and sometimes, not work from
Propeller .:.:--TACHYON--:.:. Forth V23140203.0000
Cold start - no user code - setting defaults
----------------------------------------------------------------
TACHYON
Propeller .:.:--TACHYON--:.:. Forth V23140203.0000
ok
0000 ok
0001 ok.fth )
0002 ok
0003 okND.fth ." Primary extensions to TACHYON kernel - 140203-2145 " ;
0004 ok
0005 ok
0006 ok
\
0007 ok
0008 ok
0009 ok
0010 oko the latest Tachyon kernel web document )
0011 ok
0012 ok
0013 ok
0014 ok
0015 ok
0016 ok
0017 ok
0018 ok
\
0019 ok
0020 ok ( -- \ do nothing - vectorable ) ;
0021 ok
0022 ok
0023 ok
0024 K ( on/off -- \ enable/disable OK prompts including the autospace )
0025
0026 F 0 ELSE ' NOOP THEN prompt 2+ W!
0027
0028 ok
0029 ok
0030 CHO ( on/off -- \ set the ECHO flag on/off for controlling output )
0031
0032 1 flags ROT BIT!
0033
0034 ok
0035 ok
0036 ok
0037 ok
\
0038 ok
pri LEMIT DUP $0A <> IF (EMIT) ELSin --> ELSin <-- NOT FOUND
Thanks, I did not know where to put this line delay config. BTW, congrats for your 3000th forum post
Great! Have fun and don't think twice about asking a question or making a suggestion, I can always ignore it
My 3000th post!? yikes, I think I talk too much, but then I have a look at some other forum members and then I realize why they always seem to have an opinion...... but even 3000 posts are a lot, say if each one took 4 minutes average, that's 12,000 minutes or 200 hours....now I know where all the time goes, and yes, that erco character is to blame too.
SPIWR is clocking at 4MHz, way to fast for the devices I'm trying to talk with.
How can I slow this down, looking for 100ksps max.
It's easy enough to write one in Forth then, even then you might some extra delays. I will look at some code for you. Which device is it anyway? It doesn't sound right and also the ksps refers to the samples/second, not the bps.
It's easy enough to write one in Forth then, even then you might some extra delays. I will look at some code for you. Which device is it anyway? It doesn't sound right and also the ksps refers to the samples/second, not the bps.
Okay I can bit bang one out then, no worries. I thought there may be a way to (simply) down clock the current routine in the kernel The device is a legacy LCD that is built up on a custom board with multiple interface styles: ttl, rs232, SPI. The interface list 100kBps max for SPI.
Okay I can bit bang one out then, no worries. I thought there may be a way to (simply) down clock the current routine in the kernel The device is a legacy LCD that is built up on a custom board with multiple interface styles: ttl, rs232, SPI. The interface list 100kBps max for SPI.
There is the SPIOD module which works just like the SPIO module except you can specify a delay. I have been sprucing up the Intro page and I have a little section in there about it which I will expand upon. Otherwise there is some Forth code in there under the CLOCK instruction usage that you can adapt. The TTL interface for the LCD sounds the easiest though.
There is the SPIOD module which works just like the SPIO module except you can specify a delay. I have been sprucing up the Intro page and I have a little section in there about it which I will expand upon. Otherwise there is some Forth code in there under the CLOCK instruction usage that you can adapt. The TTL interface for the LCD sounds the easiest though.
Found it, got SPIOD to do the job, great! Thanks and nice work on the Intro page.
I've gotten back into doing a little bit more with the webserver and ftp, sorting out timeouts and ftp clients. Even though I am still doing some testing and adjusting I will probably leave a Prop hooked up at tachyonforth.com as it also hosts a straight clone of the "Introduction to Tachyon Forth" as the home page (although the TOC links still point to the Google doc at present). There are various types of files I leave on the card for testing including PDFs, and images etc and I will also include all the source code pages too. So a Tachyon Forth Prop is hosting a website about itself, for itself!
The unit will also have random text selections sent to it's RS232 port so it will be logging that also and normally you can see the text file by going to tachyonforth.com/log0001.txt etc. There have been some bugs I've noticed so I will probably log all console messages to the syslog.txt file as soon as I can including all those malware hack attacks I see coming in Please please hack the Prop, I wanna see you try.
I've gotten back into doing a little bit more with the webserver and ftp, sorting out timeouts and ftp clients. Even though I am still doing some testing and adjusting I will probably leave a Prop hooked up at tachyonforth.com as it also hosts a straight clone of the "Introduction to Tachyon Forth" as the home page (although the TOC links still point to the Google doc at present). There are various types of files I leave on the card for testing including PDFs, and images etc and I will also include all the source code pages too. So a Tachyon Forth Prop is hosting a website about itself, for itself!
The unit will also have random text selections sent to it's RS232 port so it will be logging that also and normally you can see the text file by going to tachyonforth.com/log0001.txt etc. There have been some bugs I've noticed so I will probably log all console messages to the syslog.txt file as soon as I can including all those malware hack attacks I see coming in Please please hack the Prop, I wanna see you try.
Probably got it between builds:
*No Card inserted!* *Card Error* *Card Error* *No Card inserted!* *Card Error* *Card Error* HTTP/1.1 200 OK
Date: Tue, 03 Dec 2013 04:19:05 GMT
Server: Tachyon Forth
Last Modified: Tue, 08 Nov 2011 05:41:05 GMT
Accept-Ranges: bytes
Content-Length: 0000
Connection: close
Content-Type: text/html
*No Card inserted!* *Card Error* *Card Error* *No Card inserted!* *Card Error* *Card Error* HTTP/1.1 200 OK
Date: Tue, 03 Dec 2013 04:19:05 GMT
Server: Tachyon Forth
Last Modified: Tue, 08 Nov 2011 05:41:05 GMT
Accept-Ranges: bytes
Content-Length: 0000
Connection: close
Content-Type: text/html
Yep, you did. I need to implement a STOR word now so I can transfer files to the card as well. That should take about 15 mins or so. So there will be times when it doesn't seem to work but just check back at random intervals (like now).
BTW, ROM.BIN contains the binary image made by SAVEROM so if your system is 10MHz you can probably load this otherwise all the current source files are there.
Comments
I have a Spinneret sitting idle and I thought I'd load Tachyon on it. My question is about the Wiznet 5100 module, it appears to have been written for kernel 2.1, has it been brought forward to work with 2.3 or would I be better off using 2.1 and a 2.1 compatible EXTEND.fth to go with it? My budget doesn't include a Wiznet 5200 for the QuickStart just now.
Thanks!
REV works exactly like the PASM REV, have a look at the kernel source here:
Here's a quick test loop:
So normally to reverse the lower 8-bits of a number we need to do a #24 REV
SPIWR is a simple word to clock out SPI data quickly but only at a fixed 8-bits at a time. SPI is normally sent MSB first so the data needs to be left justified to work so if you are sending 32-bits then it is already "left justified" in that the MSB is aligned with bit 31. To send all 32-bits just repeat the instruction like this SPIWR SPIWR SPIWR SPIWR after which there will be the shifted remains of the number left on the stack (always zero in this case). Execution time is 12us.
If you needed to shift 16-bits you would left justify first with a 16 SHL then SPIWR SPIWR which takes 8us
For 24 bits it's 8 SHL SPIWR SPIWR SPIWR which takes 11us
If you only need 8-bits there is the SPIWRB which left justifies the byte for you as this only takes one precious extra PASM instruction and is more efficient for an otherwise common operation which takes 3us
BTW, the SPIWR instruction has it's own pin mask registers, you can set them directly or else use SPIPINS ( ce-miso-mosi-clk -- ) where a long specifies the 4 pins to use.
i.e. Say we have chip enable on P27, clock on P24, MOSI on P25 and MISO on P26 (not used by SPIWR), the long is encoded as &27.26.25.24 SPIPINS which uses the Tachyon specific & byte encoded decimal notation as used in IP addresses to make it easier for us.
VS this Compile, Link, Download
If I need a sub 10us Fibo routine it's time for an assembler RUNMOD, until then I have a life to live, THANK YOU Peter!!
Also the comment "can you do a proper recursive version" as if the correct results are not correct because your syntax didn't curtsy correctly before emitting the results.
HA!
If you took serious offense to my comment, appologies. People are dying all over the world every second, it's only the spoiled who get to argue about what language is better than the other, just like religion. I want to build simple devices to try to help people who are much less advantaged than us. I find Tachyon / Forth is easier for me to try and accomplish my goals. I will refrain from all the noise on these forums, people are really ticked off here it seems.
Here it is, the raw output including pasting and compiling through telnet...
Note: looks like I've got some echoed stuff from the compile spitting out later than sooner in telnet, something for me to look into.
EDIT: I've done an extra test of opening and logging the results to a file then listing that. All interactively via telnet of course.
I've tried to modify the BLINKERS code to use the new linked timers but no joy so far
." missing something here"
Yes, because in the old code BLINKERS could access the I index of the calling loop of TIMERTASK to ascertain which timer had timed out. With the new linked timers there is no index, however the address of the timer in question is available on the stack. The code would look like this then:
This is ugly though and there are better ways of doing this with the new linked timers but this provides the correction to the existing code so you can see how it works.
I would prefer the concept of "idea compresssion" as to ugly, this has given me insight not yet gleaned from the source, thanks.
I have loaded Tachyon in my QuickStart board EEPROM and it works. Now I would like to add the EXTEND.fth file. I read the tutorial explanations :
The file is huge and contains spin comment, table of content, etc... is it the right file? https://docs.google.com/document/d/19t8NRAKQOdUNgcCKb6D3jGS3Y41l2IIxCUVjmWXqSCU/pub
When I do a copy paste of all the file in my terminal (minicom on linux) it fails. Any advice?
Well I think you have run afoul of one of my late night edits, I've fixed that now. Yes, just select the lot and a paste into minicom will automatically filter out any non-text and it should work fine. You can type ^A F to send a break from minicom which will reset the Prop to start a clean load. The Google docs webpage version that you have grabs the header and footer of the document as well when you select all and that is why the header title is in brackets while the footer is a "Published blah blah blah which triggers an ignore line in Tachyon.
BTW, there's always the dropbox versions but the link you have will always be the latest to work from, and sometimes, not work from
Sounds like you don't have line delay set. Type ^A T D in minicom and make sure it's set to 20
D - Newline tx delay (ms) : 20
Thanks, I did not know where to put this line delay config. BTW, congrats for your 3000th forum post
Great! Have fun and don't think twice about asking a question or making a suggestion, I can always ignore it
My 3000th post!? yikes, I think I talk too much, but then I have a look at some other forum members and then I realize why they always seem to have an opinion...... but even 3000 posts are a lot, say if each one took 4 minutes average, that's 12,000 minutes or 200 hours....now I know where all the time goes, and yes, that erco character is to blame too.
How can I slow this down, looking for 100ksps max.
Okay I can bit bang one out then, no worries. I thought there may be a way to (simply) down clock the current routine in the kernel The device is a legacy LCD that is built up on a custom board with multiple interface styles: ttl, rs232, SPI. The interface list 100kBps max for SPI.
There is the SPIOD module which works just like the SPIO module except you can specify a delay. I have been sprucing up the Intro page and I have a little section in there about it which I will expand upon. Otherwise there is some Forth code in there under the CLOCK instruction usage that you can adapt. The TTL interface for the LCD sounds the easiest though.
Found it, got SPIOD to do the job, great! Thanks and nice work on the Intro page.
The unit will also have random text selections sent to it's RS232 port so it will be logging that also and normally you can see the text file by going to tachyonforth.com/log0001.txt etc. There have been some bugs I've noticed so I will probably log all console messages to the syslog.txt file as soon as I can including all those malware hack attacks I see coming in Please please hack the Prop, I wanna see you try.
Probably got it between builds:
Yep, you did. I need to implement a STOR word now so I can transfer files to the card as well. That should take about 15 mins or so. So there will be times when it doesn't seem to work but just check back at random intervals (like now).
BTW, ROM.BIN contains the binary image made by SAVEROM so if your system is 10MHz you can probably load this otherwise all the current source files are there.