The demo presented here gives four variations of the Fibonacci test.
Fibonacci in Spin - Fib(28) takes 28.69 seconds |
Fibonacci in pure Forth - Fib(28) takes 6.48 seconds |
Fibonacci with a CORE: helper word - Fib(28) takes 2.78 seconds |
Fibonacci written entirely with PASM: - Fib(28) takes 0.86 seconds |
On this page you may have a look at:
The serial terminal display of the test result. |
The JDForth source code (FibTest.JD4) for the Fibonacci test. |
The result of running the Propeller Tool on FibTest.spin. |
The testbench code (FibDemo.spin) used to generate the terminal display. |
The output file (FibTest.spin) generated by JDForth. |
Download the spin files.
(FibTest.spin and FibDemo.spin)
Screen shot of FibDemo.spin on a Propeller
connected to HyperTerminal.
JDForth source code - FibTest.JD4 ![](forth.gif)
Propeller Tool compile of FibTest.spin
Propeller Tool testbench - FibDemo.spin ![](fibdemo.gif)
JDForth output code - FibTest.spin
connected to HyperTerminal.
![](terminal.gif)
![](forth.gif)
This screen shot was taken after compiling FibTest.spin in the
Propeller Tool.
![](compile.gif)
Plenty of space left for the rest of your spin objects!
![](compile.gif)
Plenty of space left for the rest of your spin objects!
![](fibdemo.gif)
CON ' This file was auto-generated by JDForth. ' See: www.JacobsDesign.com.au for more details. kPSPSize = 64 'longs kASPSize = 16 'longs kRSPSize = 48 'longs kTIBSize = 16 'bytes PUB Start(emit, key) : okay Stop FirstWord := 0 CodeBase := @Forth PSP0 := @ParStack[-1] RSP0 := @AuxStack ASP0 := @RetStack Base := 10 PutC := emit GetC := key TIB := @TIBSpace TIBSize := kTIBSize okay := Cog := CogNew(@Kernel, @FirstWord) + 1 PUB Stop if Cog CogStop(Cog~ - 1) PUB Push(val) ' Push a single value on the parameter stack repeat while FirstWord PSP0 += 4 long[PSP0] := Val PUB Pop : val ' Pop a single value on the parameter stack repeat while FirstWord val := long[PSP0] PSP0 -= 4 PUB Fib1(P1) ' 2 return values on parameter stack PushAll(1, @P1) FirstWord := @_Fib1 PUB Fib2(P1) ' 2 return values on parameter stack PushAll(1, @P1) FirstWord := @_Fib2 PUB Fib3(P1) ' 2 return values on parameter stack PushAll(1, @P1) FirstWord := @_Fib3 PUB FirstWordPtr : Ptr Ptr := @FirstWord PUB WaitForIdle repeat while FirstWord PRI PushAll(ctr, ptr) repeat while FirstWord LongMove(@ParStack, ptr, ctr) PSP0 := @ParStack[ctr-1] VAR long TOS ' Single element to support TOS in COG memory long ParStack[kPSPSize] long AuxStack[kASPSize] long RetStack[kRSPSize] long TIBSpace[(kTIBSize+3)/4] ' WARNING: ANY edits below this point will most likely result in ' a non-working program. Items above this point may be ' edited with caution. VAR long Cog ' The cog identity of this object word FirstWord ' The word to execute word CodeBase ' Memory offset to bytecodes word PSP0 ' Parameter Stack Address word RSP0 ' Return Stack Address word ASP0 ' Algorithm Stack Address word Base ' Number base for . word State ' Compiling or interpreting word Handler ' Used by catch/throw word PutC ' emit places chars into the word at address putc word GetC ' key gets chars from the word at address getc word ToIN ' We're processing this char in TIB word NumIN ' This is the number of chars in TIB word TIB ' Address of Terminal Input Buffer word TIBSize ' Amount of space in TIB DAT Forth word $0000,$000D,$0025,$0026,$0027,$002C,$0031,$0038 word $003C,$0042,$0044,$0047,$0049,$004B,$0050,$0054 word $0057,$005C,$005E,$0061,$0064,$0066,$006D,$0072 word $0078,$007C,$007E,$007F,$0081,$0083,$0085,$008A word $008C,$0090,$0095,$009A,$00A6,$0042,$01F1,$002C word $004A,$0030,$0024,$000E,$004A,$0030,$0026,$003E word $000C,$002C,$001E,$0016,$0040,$0042,$0010,$001E word $0036,$0062,$001C,$0034,$0062,$003C,$000C _Fib1 word $002C,$0010,$0062,$004E,$0002,$000C,$00AD,$002C word $008A,$008C,$001C,$008C,$003C,$000C _Fib2 word $002C,$0010,$008C,$004E,$0002,$000C,$00B5,$002C word $00A6,$000C _Fib3 word $002C,$0010,$00A8,$004E,$0002,$000C DAT long 0 'Make sure the rest is long aligned! Kernel word $0019,$5C7C,$0000,$0000,$0000,$0000,$0000,$0000 word $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 word $0000,$0000,$0000,$0000,$0000,$0000,$0200,$0000 word $FFFF,$FFFF,$0804,$80FC,$0E04,$083C,$0E03,$A0FC word $2604,$54FC,$1001,$A0BC,$1004,$80FC,$0008,$043C word $1002,$80FC,$260B,$80BC,$0E13,$E4FC,$0402,$6CBC word $0401,$043C,$03F0,$A0BC,$0401,$06BC,$001A,$5C68 word $0402,$80FC,$0E04,$A0FC,$4203,$54FC,$1001,$A0BC word $1002,$80FC,$0008,$04BC,$1002,$80FC,$420B,$80BC word $0E21,$E4FC,$0E04,$08BC,$0804,$84FC,$1002,$04BC word $0402,$80FC,$1003,$80BC,$1208,$04BC,$0009,$5C3C word $0A04,$80FC,$0405,$083C,$0408,$A0BC,$0402,$80FC word $0027,$5C7C,$0405,$08BC,$0A04,$84FC,$0027,$5C7C word $0804,$80FC,$0E04,$083C,$1002,$80FC,$0000,$5C7C word $1007,$A0BC,$0E04,$08BC,$0804,$84FC,$0029,$5C7C word $1202,$04BC,$0402,$80FC,$0804,$80FC,$0E04,$083C word $0E09,$A0BC,$0044,$5C7C,$6E34,$5CFC,$0E08,$04BC word $0E10,$2CFC,$0E10,$38FC,$0027,$5C7C,$1001,$A0FC word $004C,$5C7C,$1000,$A0FC,$004C,$5C7C,$100C,$A0BC word $0804,$80FC,$0E04,$083C,$0E08,$A0BC,$0027,$5C7C word $1207,$A0BC,$0E04,$08BC,$1204,$083C,$0027,$5C7C word $0804,$80FC,$0E04,$083C,$0027,$5C7C,$1004,$A0BC word $0E02,$2CFC,$1007,$84BC,$0E08,$08BC,$0027,$5C7C word $0C04,$84FC,$0027,$5C7C,$0A04,$80FC,$0E05,$083C word $0025,$5C7C,$0804,$80FC,$0E04,$083C,$0E05,$08BC word $0A04,$84FC,$0027,$5C7C,$1004,$08BC,$0A04,$80FC word $1005,$083C,$0A04,$80FC,$0E05,$083C,$0804,$84FC word $0025,$5C7C,$E008,$58FC,$1004,$08BC,$0804,$84FC word $1007,$043C,$0025,$5C7C,$ED41,$58FC,$EC07,$54BC word $1004,$08BC,$0804,$84FC,$0008,$A0BC,$0025,$5C7C word $F407,$50BC,$0000,$0000,$0E00,$A0BC,$0027,$5C7C word $0E01,$80FC,$0027,$5C7C,$0E01,$84FC,$0E01,$84FC word $0027,$5C7C,$0E01,$2CFC,$0027,$5C7C,$0E01,$38FC word $0027,$5C7C,$0F01,$58FD,$1004,$08BC,$1007,$80BC word $0E08,$A0BC,$0026,$5C7C,$0F09,$58FD,$0086,$5C7C word $1004,$08BC,$0E08,$C13C,$0E0C,$70BC,$0026,$5C7C word $0E00,$867C,$0E04,$08BC,$0804,$84FC,$0402,$80D4 word $0027,$5C54,$1002,$04BC,$1010,$2CFC,$1010,$38FC word $0408,$80BC,$0027,$5C7C,$1401,$A0FC,$1005,$08BC word $1205,$A0BC,$1204,$84FC,$1209,$08BC,$100A,$80BC word $1208,$863C,$1005,$083C,$0095,$5C54,$0402,$80FC word $0A08,$84FC,$0027,$5C7C,$57E0,$58FD,$1207,$A0BC word $1004,$08BC,$0804,$84FC,$0E04,$08BC,$1009,$F03C word $0026,$5C7C,$1201,$A0FC,$1207,$C13C,$0031,$5C4C word $0E01,$84FC,$0804,$80FC,$0E04,$083C,$0E01,$84FC word $0027,$5C7C,$96B8,$5CFD,$0027,$5C7C,$0001,$0000 word $6E07,$C13D,$00CB,$5C4C,$0E01,$84FC,$0804,$80FC word $0E04,$083C,$0E01,$84FC,$0A04,$80FC,$9605,$083D word $96B8,$5CFD,$0A04,$80FC,$0E05,$083C,$0E04,$08BC word $0804,$84FC,$96B8,$5CFD,$1005,$08BC,$0A04,$84FC word $0E08,$80BC,$9605,$08BD,$0A04,$84FC,$0000,$5C7C