I just compiled the PropBasic 1.44 Project from GitHub successfully with Lazarus version 1.4.4 and one of my most complex (and longest) Propbasic programs compiled successfully with the new propbasic .exe - still have to test the program though. I did not change any Project Options in the Lazarus IDE other than the exe output path and the Optimization Level. Watch out for the Debugging Info Option - it must be off otherwise the exe is very big - mine was off by default. For those that want to play, here is the download link: http://www.lazarus-ide.org/
Have never seen or used Lazarus before this morning so I am no expert, but I made a reference doc for myself for future use after having figured what to do. Doc is attached.
I am thrilled by the fact that the source code is available because now I can actually see what changes have been made and what Bean is still going to work on - something that has not been freely available over the years.
But, I think it is an absolute requirement for the executable to be available on GitHub because we cannot expect newbies who are just starting out to go through the source code compiling exercise.
Sad news - the program I am testing with my compiled version of propbasic 1.44 does not work. Many things in the program do not work. Don't know if I compiled it incorrectly. Bummer, I was so excited :depressed:
I think I will wait for Bean to publish the latest exe. Will just stick to 1.42 for now.
I built 1.44 sources with Lazarus on Mac OS X and was able to compile a very small example program to a PASM .spin file, which I then built with PropellerIDE and loaded onto an Activity Board. It ran the simple blink pin 26 program successfully.
Not a complete test for sure, but does prove the ability to build with Lazarus and compile a basic source file.
Thanks Bean, Bob, Andre and David for discussing and making PropBasic source available!
Ths is most excellent news. It would be awesome if you could get releases working for propbasic.exe for Windows, and thank you very much for you work in getting something like this of the ground and implemented :-D
Regards
Andre
Ah I'll get something set up maybe this afternoon. It was already late yesterday. I'm glad to help. :P
Brett,
Thanks. I'll have to get familiar with github.
Let me know if there is anything I can do to help get PropBASIC in SimpleIDE.
P.S. What is the difference between "Pull Request" and "Fork" in Github ?
Bean
If you meant to say PropellerIDE, you can help by putting together a collection of PropBASIC code to use as demos and maybe some libraries. I haven't seen much PropBASIC code so I really need a better idea what the average project is like.
Forking a project is cloning the repository to your own account. You then download that version to work on it. After checking in your changes and pushing them back to github, a pull request notifies the original repository that you'd like to merge your changes in, where they can be reviewed and accepted or rejected.
It's confusing at first but it's actually pretty easy once you do it a couple times.
I just compiled the PropBasic 1.44 Project from GitHub successfully with Lazarus version 1.4.4 and one of my most complex (and longest) Propbasic programs compiled successfully with the new propbasic .exe - still have to test the program though. I did not change any Project Options in the Lazarus IDE other than the exe output path and the Optimization Level. Watch out for the Debugging Info Option - it must be off otherwise the exe is very big - mine was off by default. For those that want to play, here is the download link: http://www.lazarus-ide.org/
Have never seen or used Lazarus before this morning so I am no expert, but I made a reference doc for myself for future use after having figured what to do. Doc is attached.
I am thrilled by the fact that the source code is available because now I can actually see what changes have been made and what Bean is still going to work on - something that has not been freely available over the years.
But, I think it is an absolute requirement for the executable to be available on GitHub because we cannot expect newbies who are just starting out to go through the source code compiling exercise.
I'm happy to hear your excitement.
Relax, guys, I'll set up automated builds this afternoon! :P
If you meant to say PropellerIDE, you can help by putting together a collection of PropBASIC code to use as demos and maybe some libraries. I haven't seen much PropBASIC code so I really need a better idea what the average project is like.
Two examples I think is very good for showing what can be done is
The extension to 0.5Hz allows GPS 1pps to be used to check/calibrate the timebase.
Reciprocal Frequency Counters give very good resolutions, at all frequencies, but they do need a little more maths, which is what makes it a good example.
A useful extension to this would be to add a Frequency Generator (PLL Counter mode) that can be used to verify Counter operation without needing an external frequency source.
Perhaps they can also be loaded on GitHub? I am not sure what the rules and intentions are around what goes on GitHub and what not.
Cheers
Andre
Brett, thanks, I have just downloaded PropBasic 1.44.1 Win32 zip from GitHub ("propbasic" without file extension?). I will test and let everybody know how it goes. Interestingly, the propbasic 1.44.1 exe is quite a bit smaller than 1.42?
Nope, propbasic.exe 1.44.1 from GitHub does not work. Same problem as when I compiled the 1.44 source with Lazarus myself - my program compiles fine but it does not work properly. As stated in an earlier post by Bean, he is still testing 1.44.
Can we perhaps have the latest stable release of PropBasic (which seems to be 1.42) on GitHub? Can you perhaps differentiate between Stable Releases and Untested Releases on GitHub?
Your test case compiled properly under PropBasic 1.42 and a 1.44 I built from source with Lazarus 1.4.4. However, the generated .spin failed to compile using Homespun 0.31, with Homespun emitting the error message noted above. BSTC and PropTool digested and loaded both .spin files generated by the two PropBasic versions. The 1.42/1.44 .spin files were different - 1.44 automatically creates a Pause subroutine where 1.42 keeps the pause code inline. See attached.
'' *** COMPILED WITH PropBasic VERSION 00.01.42 Aug 25, 2013 ***
CON 'DEVICE P8X32A
_ClkMode = RCFAST
''DEVICE P8X32A, RCSLOW
'' ======================================================================
PUB __Program | __VarsPtr ' PROGRAM Start
__VarsPtr := 0
CogInit(0, @__Init, __VarsPtr)
DAT
org 0
__Init
__RAM
mov dira,__InitDirA
mov outa,__InitOutA
jmp #Start
'' ======================================================================
Start 'Start:
__DO_1 ' DO
mov __temp2,_60000 ' PAUSE 60000
mov __temp1,_1mSec
add __temp1,cnt
__L0001
waitcnt __temp1,_1mSec
djnz __temp2,#__L0001
jmp #__DO_1 ' LOOP
__LOOP_1
mov __temp1,#0 'END
waitpne __temp1,__temp1
'**********************************************************************
__InitDirA LONG %00000000_00000000_00000000_00000000
__InitOutA LONG %00000000_00000000_00000000_00000000
_1mSec LONG 12000
_60000 LONG 60000
_FREQ LONG 12000000
____STRING_adr LONG 0
__clkfreq_adr LONG 0
__remainder
__temp1 RES 1
__temp2 RES 1
__temp3 RES 1
__temp4 RES 1
__temp5 RES 1
__param1 RES 1
__param2 RES 1
__param3 RES 1
__param4 RES 1
__paramcnt RES 1
FIT 492
CON
LSBFIRST = 0
MSBFIRST = 1
MSBPRE = 0
LSBPRE = 1
MSBPOST = 2
LSBPOST = 3
DAT
__DATASTART
'' *** COMPILED WITH PropBasic VERSION 00.01.44 Jul 13, 2014 ***
CON 'DEVICE P8X32A
_ClkMode = RCFAST
''DEVICE P8X32A, RCSLOW
'' ======================================================================
PUB __Program | __VarsPtr ' PROGRAM Start
__VarsPtr := 0
CogInit(0, @__Init, __VarsPtr)
DAT
org 0
__Init
__RAM
mov dira,__InitDirA
mov outa,__InitOutA
jmp #Start
'' ======================================================================
Start 'Start:
__DO_1 ' DO
mov __temp1,_60000 ' PAUSE 60000
call #_PAUSE
jmp #__DO_1 ' LOOP
__LOOP_1
mov __temp1,#0 'END
waitpne __temp1,__temp1
'-------------------------------------------------------------------------------------------
'PAUSE SUBROUTINE (pass mSec in _temp1)
' ------------------------------------------------------------------------------------------
_PAUSE
shr __temp1,#0 WZ
mov __temp2,_1mSec
add __temp2,cnt
_PAUSE_1
IF_NZ waitcnt __temp2,_1mSec
IF_NZ djnz __temp1,#_PAUSE_1
_PAUSE_ret
ret
'**********************************************************************
__InitDirA LONG %00000000_00000000_00000000_00000000
__InitOutA LONG %00000000_00000000_00000000_00000000
_1mSec LONG 12000
_60000 LONG 60000
_FREQ LONG 12000000
____STRING_adr LONG 0
__clkfreq_adr LONG 0
__remainder
__temp1 RES 1
__temp2 RES 1
__temp3 RES 1
__temp4 RES 1
__temp5 RES 1
__param1 RES 1
__param2 RES 1
__param3 RES 1
__param4 RES 1
__paramcnt RES 1
FIT 492
CON
LSBFIRST = 0
MSBFIRST = 1
MSBPRE = 0
LSBPRE = 1
MSBPOST = 2
LSBPOST = 3
DAT
__DATASTART
You should be able to just add a FREQ line to prevent the error.
For RCSLOW use FREQ 20_000 and for RCFAST use FREQ 12_000_000.
Note that the default is RCFAST.
Another observation is the substantial exe size difference I'm seeing between the Propbasic.exe from github (490,496) and the Propbasic.exe from local compilation (548864) under Win32 Laz 1.4.4/FPC 2.6.4.
Unsuccessful attempts were made to change compiler options (-O3, -Os, etc..) to try to at least get in the ballpark with replicating the Github compiled exe size. This is more for curiousity's sake than anything else. Any thoughts?
pmrobert,
I get 542K, I'm not sure why the other exe is smaller ? Maybe from an older version of Laz ?
I don't have the computer that it was compiled on so I'm afraid I don't have an explaination.
@Bean FYI- I'm certain I tried manually adding both FREQ and then XIN values (one at a time, then both together "just for fun"). That didn't get me past the error.
So thanks both for your time on this. I'll try to follow this along with Homespun when time allows. I had tried Propellent on the spin files (that barked), but using PropTool in the meantime is a good enough fix.
Yes, you are right. FREQ generates a warning and does NOT put in a _XINFreq line.
I'm not sure why I don't but I purposefully do not.
If you want to change it, in the "Procedure ProcessFreq" there is a line that reads "If Not g_bInternalClock Then OutSpin(' _XInFreq = '+ sTemp);" just remove the "If Not g_bInternalClock Then" part.
Thanks, Terry, that works. Homespun compiles the .spin w/o complaint. PropBasic, as expected, gives a "NOT RECOMMENDED" warning. I think the base problem is with Homespun as alluded to above but this is a viable workaround.
-Mike
// PMR: Removed Conditional per Bean's advice so as to remove
// incompatibility w/ HomeSpun.
// Reference thread: http://forums.parallax.com/discussion/156252/propbasic-what-is-the-lastest-situation-please/p2
// Original code: If Not g_bInternalClock Then OutSpin(' _XInFreq = '+ sTemp);
OutSpin(' _XInFreq = '+ sTemp);
I've downloaded v1.42 along with Brad's programs, and figured out how to get it to work from either the cmd line and BST or with with Simple IDE (after following the instructions, I needed to make a Propbasic .SIDE project with "empty.pbas" that I use to copy or enter .pbas code into.)
I've read the manual and Jon's Spin Zone article and wrote a few "blink the LEDs" programs. I used Jon's Spin Zone program that uses input from the terminal (used "run with terminal" in Simple IDE) to turn LEDs on and off, but I can't figure out how to print to a terminal.
Is there an existing function or task that can be posted to print text and/or numbers to a terminal?
You want to use the SEROUT command, and build that into a string output function. The STR function is used to convert numbers into string form for printing to the serial port.
Comments
Thanks. I'll have to get familiar with github.
Let me know if there is anything I can do to help get PropBASIC in SimpleIDE.
P.S. What is the difference between "Pull Request" and "Fork" in Github ?
Bean
Have never seen or used Lazarus before this morning so I am no expert, but I made a reference doc for myself for future use after having figured what to do. Doc is attached.
I am thrilled by the fact that the source code is available because now I can actually see what changes have been made and what Bean is still going to work on - something that has not been freely available over the years.
But, I think it is an absolute requirement for the executable to be available on GitHub because we cannot expect newbies who are just starting out to go through the source code compiling exercise.
I think I will wait for Bean to publish the latest exe. Will just stick to 1.42 for now.
I will do some testing of 1.44 soon and make any corrections that are needed.
Bean
Not a complete test for sure, but does prove the ability to build with Lazarus and compile a basic source file.
Thanks Bean, Bob, Andre and David for discussing and making PropBasic source available!
dgately
Ah I'll get something set up maybe this afternoon. It was already late yesterday. I'm glad to help. :P
If you meant to say PropellerIDE, you can help by putting together a collection of PropBASIC code to use as demos and maybe some libraries. I haven't seen much PropBASIC code so I really need a better idea what the average project is like.
Forking a project is cloning the repository to your own account. You then download that version to work on it. After checking in your changes and pushing them back to github, a pull request notifies the original repository that you'd like to merge your changes in, where they can be reviewed and accepted or rejected.
It's confusing at first but it's actually pretty easy once you do it a couple times.
I'm happy to hear your excitement.
Relax, guys, I'll set up automated builds this afternoon! :P
Two examples I think is very good for showing what can be done is
http://forums.parallax.com/discussion/123170/propbasic-reciprocal-frequency-counter-0-5hz-to-40mhz-40mhz-now
The extension to 0.5Hz allows GPS 1pps to be used to check/calibrate the timebase.
Reciprocal Frequency Counters give very good resolutions, at all frequencies, but they do need a little more maths, which is what makes it a good example.
A useful extension to this would be to add a Frequency Generator (PLL Counter mode) that can be used to verify Counter operation without needing an external frequency source.
https://github.com/parallaxinc/PropBASIC/releases/tag/1.44.1
I have just posted my collection of PropBasic Libraries with sample code here: http://forums.parallax.com/discussion/163372/propbasic-libraries#latest
Perhaps they can also be loaded on GitHub? I am not sure what the rules and intentions are around what goes on GitHub and what not.
Cheers
Andre
Brett, thanks, I have just downloaded PropBasic 1.44.1 Win32 zip from GitHub ("propbasic" without file extension?). I will test and let everybody know how it goes. Interestingly, the propbasic 1.44.1 exe is quite a bit smaller than 1.42?
Can we perhaps have the latest stable release of PropBasic (which seems to be 1.42) on GitHub? Can you perhaps differentiate between Stable Releases and Untested Releases on GitHub?
with
DEVICE P8X32A
or
DEVICE P8X32A, RCSLOW
Cannot compile. Always error message:
_CLKFREQ or _XINFREQ must be specified
Bean
You should be able to just add a FREQ line to prevent the error.
For RCSLOW use FREQ 20_000 and for RCFAST use FREQ 12_000_000.
Note that the default is RCFAST.
Bean
Unsuccessful attempts were made to change compiler options (-O3, -Os, etc..) to try to at least get in the ballpark with replicating the Github compiled exe size. This is more for curiousity's sake than anything else. Any thoughts?
I get 542K, I'm not sure why the other exe is smaller ? Maybe from an older version of Laz ?
I don't have the computer that it was compiled on so I'm afraid I don't have an explaination.
Bean
@Bean FYI- I'm certain I tried manually adding both FREQ and then XIN values (one at a time, then both together "just for fun"). That didn't get me past the error.
So thanks both for your time on this. I'll try to follow this along with Homespun when time allows. I had tried Propellent on the spin files (that barked), but using PropTool in the meantime is a good enough fix.
Michael.
Bean
I'm not sure why I don't but I purposefully do not.
If you want to change it, in the "Procedure ProcessFreq" there is a line that reads "If Not g_bInternalClock Then OutSpin(' _XInFreq = '+ sTemp);" just remove the "If Not g_bInternalClock Then" part.
Bean
-Mike
Another fine example of why PropBasic should be fully integrated.
The dedication and support from Bean and the community is first class.
I've downloaded v1.42 along with Brad's programs, and figured out how to get it to work from either the cmd line and BST or with with Simple IDE (after following the instructions, I needed to make a Propbasic .SIDE project with "empty.pbas" that I use to copy or enter .pbas code into.)
I've read the manual and Jon's Spin Zone article and wrote a few "blink the LEDs" programs. I used Jon's Spin Zone program that uses input from the terminal (used "run with terminal" in Simple IDE) to turn LEDs on and off, but I can't figure out how to print to a terminal.
Is there an existing function or task that can be posted to print text and/or numbers to a terminal?
I appreciate your help.
Tom
You want to use the SEROUT command, and build that into a string output function. The STR function is used to convert numbers into string form for printing to the serial port.
Jon also wrote several libraries, including serial I/O. I don't remember if they're in the OBEX, but here's a link to a forum posting where he included them. http://forums.parallax.com/discussion/160865/propbasic-library-examples
Recently Andre Nieuwoudt also posted a number of PropBasic libraries. http://forums.parallax.com/discussion/163372/propbasic-libraries
There should be something in one of those offerings to get you going.
Bob
Tom