zeroflag / punyforth

Forth inspired programming language for the ESP8266
Other
403 stars 43 forks source link

request for Memory map of Punyforth #35

Open enriquepinedo opened 6 years ago

enriquepinedo commented 6 years ago

Dear Attila,

Sory if this is explained elsewhere I did not found it

I am very confused without a memory map of Punyforth, I need to understand what is happening with my reboot problems I am experimenting with different programs. It is also almost impossible to advance with Forth without having a memory map of the full system, I feel like shooting with a machinegun blindfolded ! It is tough.

I am copying below an example of a memory Map of MicroPhyton for ESP8266 please if you can edit it and correct it for Punyforth to help everybody visualize better how is Flash and Ram used in Punyforth, and were is our free space going after loading dependencies. The example of the internal of Micropython on ESP8266 helped me understand a bit further how the Rtos and Wifi will consume memory etc...

I have many questions left : 1) is Uber.forth at $51000 copyed from flash to RAM before execution ? because it does not make sense if we have 1 MB Flash , that 96 K or 64 K ram of ESP get so fast gone ! In my application 1 LCD with i2cbus and 1 wifi Repl , it consumes all my memory, I have left only 2K ! After that I can almost not add anything more without falling into constant reboots. 2) how can this 1MB or 4MB of internal flash been better used ? Is it now a wasted space ? 3) I suppose there is no way to add an external SD card, this would not help in any sense. What else can be done ?

Mphyton Memory MAP :


----------------------- 0X4030_0000

MEMORY MAPPED FLASH ROM (1M)

----------------------- 0X4020_0000 ] ] FLASH MEMORY MAPPING CACHE #1 ] 6 16 K INSTARAM ] 4 -------------------------0X4010_C000 ] ] K FLASH MEMORY MAPPING CACHE #0 ] 16 K INSTARAM ] ] ------------------------ 0X4011_0000 ]

FAST CODE INSTARAM (32K)

------------------------ 0X4010_0000

------------------------ 0X4001_0000

 BOOT ROM  (64)

------------------------ 0X4000_0000 ] ] 9 ] SYSTEM DATA RAM (16K) ] 6 ] ------------------------ 0X4001_0000 ]
] K ] USER DATA RAM (80 K) ]
] ------------------------ 0X3FFE_8000 ]


Kind regards Enrique

enriquepinedo commented 6 years ago

This was the picture of the memory map, I can not add it as such on my message.... https://ksr-ugc.imgix.net/assets/005/420/685/7942660fd0259ae699e373b25c5c6fec_original.png?w=639&fit=max&v=1456359366&auto=format&lossless=true&s=37936c9f7731bedc214afb9b94c7d455

enriquepinedo commented 6 years ago

I continue exploring punyforth and I have tests and results ( all numbers below in decimal.)

core.forth alone gives freemem of 16.776 bytes free on an empty system here points to 1073.653.560 ( i can not find any correlation with physical memory in this large number )

tcp-repl with all it dependencies and a bit of code for an i2c LCD gives me 2.200 bytes freemem
for programming anything else I try to include after that Punyforth will hang. I can only add very elementary forth operands. after a "screen" or a "block" of txt (1024 k text code)_ it will hang.

I have been looking at flash.forth dependencies, it has only 1 needs "core.forth"

Questions : is this editor working ? It seems it saves to Flash memory, like I previously asked if there is a way to "SAVE" a system interactively and incrementally...

I will try to understand more..... apparently having Rtos and open-boot in the system those calls are causing the lack of program memory, ( even when ESP8266 has such a large ram in terms of a forth system).

Kind regards Enrique

zeroflag commented 6 years ago

I have many questions left : 1) is Uber.forth at $51000 copyed from flash to RAM before execution

No, the text is not copied into the RAM. Punyforth compiles indirect thread code from the text and fills up the dictionary.

I have left only 2K

This sounds realistic. The freemem word shows the available forth dictionary space, not the free system memory. There is an osfreemem word for getting the free memory from RTOS. Punyforth allocates about 24k dictionary space which means that your program and its dependencies consume about 22k.

When I was experimenting with larger dictionary spaces in the past, the system became unstable because not enough memory was left for RTOS. It usually crashed inside the lwip (tcp stack) code when it tried to allocate netcon buffers. So I decided to allocate only 24 forth heap, and leave the rest to RTOS.

You can experiment with larger memory settings by changing this line and recompile Punyforth

https://github.com/zeroflag/punyforth/blob/master/generic/data.S#L32

If you don't use the wifi and the tcp stack then it'll probably Ok.

But an easier way to fix this is to remove unused words from the uber.forth.

Questions : is this editor working ? It seems it saves to Flash memory, like I previously asked if there is a way to "SAVE" a system interactively and incrementally...

There is an experimental editor in flash.forth but you need to use the --block-format parameter of modules.py when generating uber.forth.

enriquepinedo commented 6 years ago

Ok excellent !
Line 32 ......... .space 25152

In your opinion if I place .space to 50000 will it work ? 30000, 35000 ? which are the limits ?

Can we expect in future a memory map of punyforth within the ESP8266 ? I would like to help in anything related to documentation to your proyect if you whish. I am preparing for my own use a Spreadsheet with all the words of punyforth, like a glossary, the old systems used to have , with stack notation and if possible or needed for more complex words an example below so anybody can learn faster. As soon I have it ready I will pass this to you. Thanks again for your time !

zeroflag commented 6 years ago

In your opinion if I place .space to 50000 will it work ? 30000, 35000 ? which are the limits ?

As far as I remember 30k should work but it will become unstable if you use the WiFi a lot.

Can we expect in future a memory map of punyforth within the ESP8266 ?

Punyforth is not a bare metal Forth (at least currently) but it runs as an RTOS task. This task is created by calling xTaskCreate, which allocates some memory dynamically. But I don't know how the memory allocation is handled internally.

I am preparing for my own use a Spreadsheet with all the words of punyforth, like a glossary

That's great. I'm sure this will be useful for others too.

enriquepinedo commented 6 years ago

Thanks Attila ! I will try this and let you know.

zeroflag commented 6 years ago

FYI I made some optimalization in variable: and constant: that reduces their memory consumption. This should buy you some additional memory.

enriquepinedo commented 6 years ago

Excelent ! THank you very much !

GerardSontag commented 6 years ago

Hello Attila, If you want to reduce the code size you can consider moving to a version with TOS in register. The a2 register is the best candidate for TOS because it is the first parameter when calling OS function. A lot of these calls when moved to this new version will end with DPOP a2 NEXT sequence which can be replace by a: B PopNext and somewhere PopNext: DPOP a2 NEXT And for a lot of primitives you will save the final DPUSH.

zeroflag commented 6 years ago

Hi Gerard,

I was thinking about TOS to register optimization earlier (mainly because of speed) but decided not to do it because some of the caveats. There are words like sp@ and sp! which would be difficult to use if TOS was in a register. Also one can write a code that treats the stack as an array which would likely break with TOS optimization. Task switching and exception handling would likely be more complicated as well. And I'm not worried about the size of the compiled primitives as much because they're not stored in the same (~24K) dictionary space like the user defined words.

Attila

GerardSontag commented 6 years ago

Hello Attila, sp@ sp! will become:

defprimitive "sp@",3,spat,REGULAR DPUSH a2 mov a2, a15 NEXT

defprimitive "sp!",3,spstore,REGULAR mov a15, a2 DPOP a2 NEXT

Gérard

zeroflag commented 6 years ago

Right. I just don't think the extra complexity would worth the effort. But if you think so feel free to send a PR with the changes required. I'm not against it, I know other Forths do this but mainly because of speed (which is not the main concern) and not memory usage.

GerardSontag commented 6 years ago

Hello Attila, I have done this work some months ago but at that time was unable to assemble the source (some weird things in ubuntu under w10) and know I am unable to merge in Github... I may be give a try again by bypassing github. BTW do you know good documentation about the ESP8266 I got the Xtensa Instruction Set Architecture but i miss some documentation about how 8266 is implementing over LX106 Gérard

zeroflag commented 6 years ago

@GerardSontag no I don't know any unfortunately. But there are some projects in github like the esp port of microphython or forthright which can be used as an example. The API of FreeRTOS is well documented (http://www.freertos.org/a00106.html).

holinepu commented 5 years ago

It seems that the flash rom is so big enough to add more compiled code into it. So if someone can design the metacompiler to append the code to it that would be great, right? I'll try, and you.

holinepu commented 5 years ago

Hi, everybody, I've developed the esp8266 assembler as well as dis-assembler under win32forth 4.2.671 in order to develop cross-compiler for the chip. For now it is almost completed with some difficult problem of dealing with create dose>. The variable header containing in flashrom causes the variable address to be in the same area. I can deal it well with some tricks to put in the ram area. But when it comes to put together with does> I was surrendered. Can anyone do the help? I can compile the program in ram as well as in flashrom area so as we can expand the program to the maximum under my cross-compiler. Or if we don't use the cross-compiler we still can copy the code from ram area to the flashrom area with the same address except the higher 4 digits changed by executing the word 3FFE>4026. Of course, you can change whatever address you like by modifying 4026 to 4027, 4028, 4029, 402A, ....402F. That can expand limited spaces for now, achieving about 240K. That's not too bad. But still you have to solve the problem of variable and does>. : 3FFE>4026 ( -- ) 3FFE88C0 ( lfa'.of.interpret? ) 402688C0 10000 88C0 - cmove' 402688C0 10000 88C0 - BOUNDS DO i 32@' FFFF0000 AND 3FFE0000 = if i 32@' ffff and 40260000 or i 32!' then 4 +LOOP 40219854 ( LFA'.OF.immediate ) 402688C0 ( lfa'.of.interpret? ) 2dup 32!' lfa'->lfa* ! \ ` 4026DAEC var-lastword ! ;

zeroflag commented 5 years ago

Hi holinepu,

Could you elaborate the problem with create does>? I'm trying to recall how it works.

create: always creates a new word with an enterdoes codeword/entrypoint instead of entercol (which is the usual entrypoint for colon definitions).

The enterdoes expects a behaviour pointer (which is an execution token of an other word) after the codeword and some arbitrary data after this. It'll push the location of the data part onto the stack and invoke the behaviour word. The default behaviour word is nop, but does> overwrites it with a user supplied word.

: create: createheader enterdoes , ['] nop cell + , ; \ default behaviour is nop, does> overwrites this

Here you can see that it creates a dictionary header and inserts the enterdoes codeword as an entry point. After that it inserts the xt of nop. The data part is not initialized.

: does> r> lastword link>body ! ;

does> replaces the behaviour part with the user supplied word (from the return stack).

So a constant for example can be defined:

: constant: cerate: , does> @ ;

But punyforth uses distinct codewords for variable/constants to save some space.

holinepu commented 5 years ago

Dear Attila, Thanks for the reply. I've been trying to compile the program in the rom area. It is succefull to do now. But still we have to solve the problem of variables residing in rom/ram area. The nop instruction is just to provide a ( random ) address in RAM where is a safe place. Why not just give it a fixed RAM address ( 3FFFF800, for example )? I'd like to put create: and does> in flash rom ( or ram ), that way there is no need nop accompaning to the twos.

variable: can be defined in rom area too, so long as it can provide a number which is a ram address.

: variable.base.address hex: 3FFFF800 ; \ 3FFFF800 can be changed according to need. : ram.address.replacing.nop variable.base.address : variable.counter variable.base.address 4 ; \ 0 variable.counter ! <-- how to intialize it? : variable.area variable.base.address 8 + ; : variable.area.wide hex: 400 ; \ 400 can be changed according to need. : var(ram) ( -- )

 createheader  hex:  40239B2C ,         variable.area     variable.counter  @   +  ['],  ,
 4  variable.counter  +!  hex: 402182C8 ( exit )  ,   ;

: create:(ram) var(ram) -4 variable.counter +! ; : allot(ram) ( -- n ) align variable.counter +! ;

var(ram) v1 var(ram) v2 var(ram) v3

see v1 see v2 see v3

\ ** ( 3FFE9098 3FFE9088 ) \ 3FFE909C 07 63 72 65 61 74 65 2F : create/ \ ------------------------------------------------------------------------------------------ ( 3FFE90A4 40239B2C ) ( docolon ) ( 3FFE90A8 40218E0C ) createheader ( 3FFE90AC 40219660 ) enterdoes ( 3FFE90B0 40218AB4 ) , ( 3FFE90B4 4021824C ) ( dolit ) 3FFE9090 ( 3FFE90BC 40218A9C ) cell ( 3FFE90C0 40218174 ) + ( 3FFE90C4 40218AB4 ) , ( 3FFE90C8 402182C8 ) exit

see create: \ ** ( 40279098 40279088 ) \ 4027909C 07 63 72 65 61 74 65 3A : create: \ ------------------------------------------------------------------------------------------ ( 402790A4 40239B2C ) ( docolon ) ( 402790A8 40218E0C ) createheader ( 402790AC 40219660 ) enterdoes ( 402790B0 40218AB4 ) , ( 402790B4 4021824C ) ( dolit ) 3FFFF800 ( 402790BC 40218A9C ) cell ( 402790C0 40218174 ) + ( 402790C4 40218AB4 ) , ( 402790C8 402182C8 ) exit

\ **

holinepu commented 5 years ago

The decompiler program compiled by punyForth in RAM can be relocated in any address of flash rom now. So, the application program can be compiled in RAM and then transfered to flash ROM for further use. \ lastword FFFF and 40260000 or 3FFE88C0 ! 4026DDCC 3FFE88C0 ! \ only interpret? remains left in RAM for linking purpose 3FFE88C0 var-lastword ! \ lastword change to interpret? where is in RAM ` 3FFE88E8 var-dp ! \ here can be changed to allow more RAM spaces for further use see see see words7 : t1 8 . ; : t2 88 . ; see t8

zeroflag commented 5 years ago

@holinepu is the source code of this project available on github?

holinepu commented 5 years ago

hi, Attila Magyar        Thank you for your interest in the source code of punyForth development system. Please bear in mind that the system is still under development so it looks not very clean. We need the help to promote the system so as most users will like it.  you can find the code here:https://groups.yahoo.com/neo/groups/armForth/files/esp8266%20punyForth/ 在 2018年9月11日 星期二 下午9:14:57 [GMT+8], Attila Magyarnotifications@github.com 寫道:

@holinepu is the source code of this project available on github?

holinepu commented 5 years ago

The program compiled by punyforth in RAM area can now be moved to any flash rom area by executing 40280000 3FFE88C0>402xxxxx under esp8266 punyforth development system. After flashing it into the chip we can execute words7 to see the org of each word. Likewise we can execute words6 to decompile the whole words.
visit --> https://groups.yahoo.com/neo/groups/armForth/files/esp8266%20punyForth/ words7

( lfa= ) 40218114 ( 00000000 ) ( cfa= 4021811C = 40239800 ) org t:+ dup ( lfa= ) 40218120 ( 40218114 ) ( cfa= 4021812C = 40239810 ) org t:+ drop ( lfa= ) 40218130 ( 40218120 ) ( cfa= 4021813C = 4023981C ) org t:+ swap ( lfa= ) 40218140 ( 40218130 ) ( cfa= 40218148 = 40239830 ) org t:+ rot ( lfa= ) 4021814C ( 40218140 ) ( cfa= 40218158 = 40239848 ) org t:+ 2swap ( lfa= ) 4021815C ( 4021814C ) ( cfa= 40218168 = 40239864 ) org t:+ 2over ( lfa= ) 4021816C ( 4021815C ) ( cfa= 40218174 = 4023987C ) org t:+ + ( lfa= ) 40218178 ( 4021816C ) ( cfa= 40218180 = 40239890 ) org t:+ - ( lfa= ) 40218184 ( 40218178 ) ( cfa= 4021818C = 402398A4 ) org t:+ * ( lfa= ) 40218190 ( 40218184 ) ( cfa= 4021819C = 402398BC ) org t:+ /mod ( lfa= ) 402181A0 ( 40218190 ) ( cfa= 402181A8 = 402398F8 ) org t:+ or ( lfa= ) 402181AC ( 402181A0 ) ( cfa= 402181B4 = 4023990C ) org t:+ and ( lfa= ) 402181B8 ( 402181AC ) ( cfa= 402181C0 = 40239920 ) org t:+ xor ( lfa= ) 402181C4 ( 402181B8 ) ( cfa= 402181D0 = 40239934 ) org t:+ invert ( lfa= ) 402181D4 ( 402181C4 ) ( cfa= 402181E0 = 40239948 ) org t:+ lshift ( lfa= ) 402181E4 ( 402181D4 ) ( cfa= 402181F0 = 40239960 ) org t:+ rshift ( lfa= ) 402181F4 ( 402181E4 ) ( cfa= 40218200 = 40239994 ) org t:+ _emit ( lfa= ) 40218204 ( 402181F4 ) ( cfa= 40218210 = 402399C4 ) org t:+ abort ( lfa= ) 40218214 ( 40218204 ) ( cfa= 4021821C = 402399F0 ) org t:+ @ ( lfa= ) 40218220 ( 40218214 ) ( cfa= 40218228 = 40239A00 ) org t:+ c@ ( lfa= ) 4021822C ( 40218220 ) ( cfa= 40218234 = 40239A10 ) org t:+ ! ( lfa= ) 40218238 ( 4021822C ) ( cfa= 40218240 = 40239A24 ) org t:+ c! ( lfa= ) 40218244 ( 40218238 ) ( cfa= 4021824C = 40239A38 ) org t:+ ['] ( lfa= ) 40218250 ( 40218244 ) ( cfa= 40218258 = 40239A4C ) org t:+ < ( lfa= ) 4021825C ( 40218250 ) ( cfa= 40218268 = 40239A64 ) org t:+ branch ( lfa= ) 4021826C ( 4021825C ) ( cfa= 40218278 = 40239A74 ) org t:+ branch0 ( lfa= ) 4021827C ( 4021826C ) ( cfa= 40218284 = 40239A88 ) org t:+ >r ( lfa= ) 40218288 ( 4021827C ) ( cfa= 40218290 = 40239A9C ) org t:+ r> ( lfa= ) 40218294 ( 40218288 ) ( cfa= 4021829C = 40239AB0 ) org t:+ i ( lfa= ) 402182A0 ( 40218294 ) ( cfa= 402182A8 = 40239AC0 ) org t:+ j ( lfa= ) 402182AC ( 402182A0 ) ( cfa= 402182B8 = 40239AD0 ) org t:+ execute ( lfa= ) 402182BC ( 402182AC ) ( cfa= 402182C8 = 40239ADC ) org t:+ exit ( lfa= ) 402182CC ( 402182BC ) ( cfa= 402182D4 = 40239AEC ) org t:+ sp@ ( lfa= ) 402182D8 ( 402182CC ) ( cfa= 402182E0 = 40239AFC ) org t:+ sp! ( lfa= ) 402182E4 ( 402182D8 ) ( cfa= 402182EC = 40239B0C ) org t:+ rp@ ( lfa= ) 402182F0 ( 402182E4 ) ( cfa= 402182F8 = 40239B1C ) org t:+ rp! ( lfa= ) 402182FC ( 402182F0 ) ( cfa= 4021830C = 40239B2C ) org t:+ readchar ( lfa= ) 40218360 ( 402182FC ) ( cfa= 4021836C = 40239B2C ) org t:+ xpause ( lfa= ) 4021837C ( 40218360 ) ( cfa= 40218390 = 40239B58 ) org t:+ readchar-wait ( lfa= ) 40218394 ( 4021837C ) ( cfa= 402183A8 = 40239B88 ) org t:+ readchar-nowait ( lfa= ) 402183AC ( 40218394 ) ( cfa= 402183B8 = 40239BB8 ) org t:+ over ( lfa= ) 402183BC ( 402183AC ) ( cfa= 402183C8 = 40239BC8 ) org t:+ -rot ( lfa= ) 402183CC ( 402183BC ) ( cfa= 402183D8 = 40239BE0 ) org t:+ 2dup ( lfa= ) 402183DC ( 402183CC ) ( cfa= 402183E8 = 40239BF8 ) org t:+ 2drop ( lfa= ) 402183EC ( 402183DC ) ( cfa= 402183F8 = 40239C04 ) org t:+ 4drop ( lfa= ) 402183FC ( 402183EC ) ( cfa= 40218408 = 40239C10 ) org t:+ cells ( lfa= ) 4021840C ( 402183FC ) ( cfa= 40218414 = 40239C28 ) org t:+ > ( lfa= ) 40218418 ( 4021840C ) ( cfa= 40218420 = 40239C40 ) org t:+ = ( lfa= ) 40218424 ( 40218418 ) ( cfa= 4021842C = 40239C58 ) org t:+ <> ( lfa= ) 40218430 ( 40218424 ) ( cfa= 40218438 = 40239C70 ) org t:+ <= ( lfa= ) 4021843C ( 40218430 ) ( cfa= 40218444 = 40239C88 ) org t:+ >= ( lfa= ) 40218448 ( 4021843C ) ( cfa= 40218450 = 40239CA0 ) org t:+ 1+ ( lfa= ) 40218454 ( 40218448 ) ( cfa= 4021845C = 40239CB0 ) org t:+ 1- ( lfa= ) 40218460 ( 40218454 ) ( cfa= 40218468 = 40239CC0 ) org t:+ 0= ( lfa= ) 4021846C ( 40218460 ) ( cfa= 40218474 = 40239CD4 ) org t:+ 0<> ( lfa= ) 40218478 ( 4021846C ) ( cfa= 40218480 = 40239CE8 ) org t:+ 0< ( lfa= ) 40218484 ( 40218478 ) ( cfa= 4021848C = 40239CFC ) org t:+ 0> ( lfa= ) 40218490 ( 40218484 ) ( cfa= 40218498 = 40239D14 ) org t:+ ms@ ( lfa= ) 4021849C ( 40218490 ) ( cfa= 402184A8 = 40239D44 ) org t:+ _type ( lfa= ) 402184AC ( 4021849C ) ( cfa= 402184C0 = 40239D74 ) org t:+ uart-set-bps ( lfa= ) 402184C4 ( 402184AC ) ( cfa= 402184D4 = 40239DA8 ) org t:+ gpio-mode ( lfa= ) 402184D8 ( 402184C4 ) ( cfa= 402184F0 = 40239DDC ) org t:+ gpio-set-interrupt ( lfa= ) 402184F4 ( 402184D8 ) ( cfa= 40218504 = 40239E10 ) org t:+ gpio-write ( lfa= ) 40218508 ( 402184F4 ) ( cfa= 40218518 = 40239E44 ) org t:+ gpio-read ( lfa= ) 4021851C ( 40218508 ) ( cfa= 4021852C = 40239E78 ) org t:+ adc-read ( lfa= ) 40218530 ( 4021851C ) ( cfa= 40218540 = 40239EA8 ) org t:+ pwm-init ( lfa= ) 40218544 ( 40218530 ) ( cfa= 40218554 = 40239EDC ) org t:+ pwm-freq ( lfa= ) 40218558 ( 40218544 ) ( cfa= 40218568 = 40239F0C ) org t:+ pwm-duty ( lfa= ) 4021856C ( 40218558 ) ( cfa= 4021857C = 40239F3C ) org t:+ pwm-start ( lfa= ) 40218580 ( 4021856C ) ( cfa= 40218590 = 40239F68 ) org t:+ pwm-stop ( lfa= ) 40218594 ( 40218580 ) ( cfa= 4021859C = 40239F94 ) org t:+ ms ( lfa= ) 402185A0 ( 40218594 ) ( cfa= 402185BC = 40239FC4 ) org t:+ netcon-set-recvtimeout ( lfa= ) 402185C0 ( 402185A0 ) ( cfa= 402185DC = 40239FF8 ) org t:+ netcon-read-timeout@ ( lfa= ) 402185E0 ( 402185C0 ) ( cfa= 402185FC = 4023A02C ) org t:+ netcon-read-timeout! ( lfa= ) 40218600 ( 402185E0 ) ( cfa= 40218610 = 4023A060 ) org t:+ netcon-new ( lfa= ) 40218614 ( 40218600 ) ( cfa= 40218628 = 4023A094 ) org t:+ netcon-connect ( lfa= ) 4021862C ( 40218614 ) ( cfa= 4021863C = 4023A0D0 ) org t:+ netcon-bind ( lfa= ) 40218640 ( 4021862C ) ( cfa= 40218654 = 4023A10C ) org t:+ netcon-listen ( lfa= ) 40218658 ( 40218640 ) ( cfa= 40218668 = 4023A140 ) org t:+ netcon-send ( lfa= ) 4021866C ( 40218658 ) ( cfa= 40218680 = 4023A17C ) org t:+ netcon-write ( lfa= ) 40218684 ( 4021866C ) ( cfa= 40218698 = 4023A1B8 ) org t:+ netcon-recvinto ( lfa= ) 4021869C ( 40218684 ) ( cfa= 402186AC = 4023A1F8 ) org t:+ netbuf-del ( lfa= ) 402186B0 ( 4021869C ) ( cfa= 402186C0 = 4023A228 ) org t:+ netbuf-next ( lfa= ) 402186C4 ( 402186B0 ) ( cfa= 402186D4 = 4023A25C ) org t:+ netbuf-data ( lfa= ) 402186D8 ( 402186C4 ) ( cfa= 402186E8 = 4023A294 ) org t:+ netcon-recv ( lfa= ) 402186EC ( 402186D8 ) ( cfa= 40218700 = 4023A2CC ) org t:+ netcon-accept ( lfa= ) 40218704 ( 402186EC ) ( cfa= 40218718 = 4023A304 ) org t:+ netcon-close ( lfa= ) 4021871C ( 40218704 ) ( cfa= 40218730 = 4023A334 ) org t:+ netcon-delete ( lfa= ) 40218734 ( 4021871C ) ( cfa= 40218744 = 4023A364 ) org t:+ task-yield ( lfa= ) 40218748 ( 40218734 ) ( cfa= 40218760 = 4023A390 ) org t:+ os-enter-critical ( lfa= ) 40218764 ( 40218748 ) ( cfa= 4021877C = 4023A3BC ) org t:+ os-exit-critical ( lfa= ) 40218780 ( 40218764 ) ( cfa= 40218790 = 4023A3E8 ) org t:+ wait-event ( lfa= ) 40218794 ( 40218780 ) ( cfa= 402187A0 = 4023A420 ) org t:+ random ( lfa= ) 402187A4 ( 40218794 ) ( cfa= 402187B4 = 4023A450 ) org t:+ erase-flash ( lfa= ) 402187B8 ( 402187A4 ) ( cfa= 402187C8 = 4023A484 ) org t:+ read-flash ( lfa= ) 402187CC ( 402187B8 ) ( cfa= 402187DC = 4023A4C0 ) org t:+ write-flash ( lfa= ) 402187E0 ( 402187CC ) ( cfa= 402187F0 = 4023A4FC ) org t:+ spi-init ( lfa= ) 402187F4 ( 402187E0 ) ( cfa= 40218804 = 4023A544 ) org t:+ spi-send8 ( lfa= ) 40218808 ( 402187F4 ) ( cfa= 40218818 = 4023A57C ) org t:+ spi-send ( lfa= ) 4021881C ( 40218808 ) ( cfa= 40218830 = 4023A5C0 ) org t:+ wifi-set-mode ( lfa= ) 40218834 ( 4021881C ) ( cfa= 40218850 = 4023A5F4 ) org t:+ wifi-set-station-config ( lfa= ) 40218854 ( 40218834 ) ( cfa= 40218870 = 4023A62C ) org t:+ wifi-set-softap-config ( lfa= ) 40218874 ( 40218854 ) ( cfa= 40218884 = 4023A674 ) org t:+ wifi-set-ip ( lfa= ) 40218888 ( 40218874 ) ( cfa= 40218898 = 4023A6A4 ) org t:+ wifi-ip-str ( lfa= ) 4021889C ( 40218888 ) ( cfa= 402188B8 = 4023A6DC ) org t:+ wifi-station-connect ( lfa= ) 402188BC ( 4021889C ) ( cfa= 402188D8 = 4023A70C ) org t:+ wifi-station-disconnect ( lfa= ) 402188DC ( 402188BC ) ( cfa= 402188EC = 4023A73C ) org t:+ dhcpd-start ( lfa= ) 402188F0 ( 402188DC ) ( cfa= 40218900 = 4023A770 ) org t:+ dhcpd-stop ( lfa= ) 40218904 ( 402188F0 ) ( cfa= 40218914 = 4023A79C ) org t:+ push-enter ( lfa= ) 40218918 ( 40218904 ) ( cfa= 40218928 = 4023A7C8 ) org t:+ osfreemem ( lfa= ) 4021892C ( 40218918 ) ( cfa= 40218934 = 4023A7F8 ) org t:+ us@ ( lfa= ) 40218938 ( 4021892C ) ( cfa= 40218940 = 4023A828 ) org t:+ us ( lfa= ) 40218944 ( 40218938 ) ( cfa= 40218954 = 4023A858 ) org t:+ deep-sleep ( lfa= ) 40218958 ( 40218944 ) ( cfa= 40218968 = 4023A888 ) org t:+ pulse-in ( lfa= ) 4021896C ( 40218958 ) ( cfa= 40218974 = 4023A8C4 ) org t:+ r@ ( lfa= ) 40218978 ( 4021896C ) ( cfa= 40218988 = 4023A8D4 ) org t:+ i2c-start ( lfa= ) 4021898C ( 40218978 ) ( cfa= 4021899C = 4023A900 ) org t:+ i2c-stop ( lfa= ) 402189A0 ( 4021898C ) ( cfa= 402189B0 = 4023A92C ) org t:+ i2c-init ( lfa= ) 402189B4 ( 402189A0 ) ( cfa= 402189C4 = 4023A960 ) org t:+ i2c-read ( lfa= ) 402189C8 ( 402189B4 ) ( cfa= 402189D8 = 4023A994 ) org t:+ i2c-write ( lfa= ) 402189DC ( 402189C8 ) ( cfa= 402189F0 = 4023A9C8 ) org t:+ i2c-read-slave ( lfa= ) 402189F4 ( 402189DC ) ( cfa= 40218A08 = 4023AA08 ) org t:+ i2c-write-slave ( lfa= ) 40218A0C ( 402189F4 ) ( cfa= 40218A14 = 40239B2C ) org t:+ nip ( lfa= ) 40218A24 ( 40218A0C ) ( cfa= 40218A30 = 40239B2C ) org t:+ tuck ( lfa= ) 40218A40 ( 40218A24 ) ( cfa= 40218A48 = 40239B2C ) org t:+ _s0 ( lfa= ) 40218A5C ( 40218A40 ) ( cfa= 40218A64 = 40239B2C ) org t:+ _r0 ( lfa= ) 40218A74 ( 40218A5C ) ( cfa= 40218A7C = 40239B2C ) org t:+ 1= ( lfa= ) 40218A90 ( 40218A74 ) ( cfa= 40218A9C = 40239B2C ) org t:+ cell ( lfa= ) 40218AAC ( 40218A90 ) ( cfa= 40218AB4 = 40239B2C ) org t:+ , ( lfa= ) 40218AD8 ( 40218AAC ) ( cfa= 40218AE0 = 40239B2C ) org t:+ c, ( lfa= ) 40218B00 ( 40218AD8 ) ( cfa= 40218B08 = 40239B2C ) org t:+ >in ( lfa= ) 40218B18 ( 40218B00 ) ( cfa= 40218B24 = 40239B2C ) org t:+ #tib ( lfa= ) 40218B34 ( 40218B18 ) ( cfa= 40218B3C = 40239B2C ) org t:+ tib ( lfa= ) 40218B4C ( 40218B34 ) ( cfa= 40218B58 = 40239B2C ) org t:+ state ( lfa= ) 40218B68 ( 40218B4C ) ( cfa= 40218B74 = 40239B2C ) org t:+ literal ( lfa= ) 40218B8C ( 40218B68 ) ( cfa= 40218B98 = 40239B2C ) org t:+ compare ( lfa= ) 40218C50 ( 40218B8C ) ( cfa= 40218C5C = 40239B2C ) org t:+ find ( lfa= ) 40218CEC ( 40218C50 ) ( cfa= 40218CF8 = 40239B2C ) org t:+ align ( lfa= ) 40218D1C ( 40218CEC ) ( cfa= 40218D28 = 40239B2C ) org t:+ here ( lfa= ) 40218D38 ( 40218D1C ) ( cfa= 40218D40 = 40239B2C ) org t:+ dp ( lfa= ) 40218D50 ( 40218D38 ) ( cfa= 40218D5C = 40239B2C ) org t:+ var-dp ( lfa= ) 40218D6C ( 40218D50 ) ( cfa= 40218D7C = 40239B2C ) org t:+ heap-start ( lfa= ) 40218D8C ( 40218D6C ) ( cfa= 40218D9C = 40239B2C ) org t:+ heap-end ( lfa= ) 40218DAC ( 40218D8C ) ( cfa= 40218DB8 = 40239B2C ) org t:+ align! ( lfa= ) 40218DD0 ( 40218DAC ) ( cfa= 40218DDC = 40239B2C ) org t:+ allot ( lfa= ) 40218DF8 ( 40218DD0 ) ( cfa= 40218E0C = 40239B2C ) org t:+ createheader ( lfa= ) 40218EA0 ( 40218DF8 ) ( cfa= 40218EAC = 40239B2C ) org t:+ >number ( lfa= ) 40218FD8 ( 40218EA0 ) ( cfa= 40218FE4 = 40239B2C ) org t:+ word ( lfa= ) 40219138 ( 40218FD8 ) ( cfa= 40219140 = 40239B2C ) org t:+ : ( lfa= ) 4021915C ( 40219138 ) ( cfa= 40219168 = 40239B2C ) org t:+ eundef ( lfa= ) 402191B0 ( 4021915C ) ( cfa= 402191B8 = 40239B2C ) org t:+ ] ( lfa= ) 40219310 ( 402191B0 ) ( cfa= 4021931C = 40239B2C ) org t:+ eundefi ( lfa= ) 4021932C ( 40219310 ) ( cfa= 40219338 = 40239B2C ) org t:+ eundefc ( lfa= ) 40219348 ( 4021932C ) ( cfa= 40219354 = 40239B2C ) org t:+ xemit ( lfa= ) 40219364 ( 40219348 ) ( cfa= 40219370 = 40239B2C ) org t:+ emit ( lfa= ) 4021939C ( 40219364 ) ( cfa= 402193A8 = 40239B2C ) org t:+ xtype ( lfa= ) 402193B8 ( 4021939C ) ( cfa= 402193C4 = 40239B2C ) org t:+ type ( lfa= ) 402193F0 ( 402193B8 ) ( cfa= 40219404 = 40239B2C ) org t:+ type-counted ( lfa= ) 40219440 ( 402193F0 ) ( cfa= 4021944C = 40239B2C ) org t:+ chr>in ( lfa= ) 402194B4 ( 40219440 ) ( cfa= 402194C0 = 40239B2C ) org t:+ in>char ( lfa= ) 402194E8 ( 402194B4 ) ( cfa= 402194F4 = 40239B2C ) org t:+ prompt ( lfa= ) 40219504 ( 402194E8 ) ( cfa= 40219514 = 40239B2C ) org t:+ show_prompt ( lfa= ) 4021953C ( 40219504 ) ( cfa= 40219544 = 40239B2C ) org t:+ key ( lfa= ) 402195C4 ( 4021953C ) ( cfa= 402195D8 = 40239B2C ) org t:+ compile-time ( lfa= ) 4021960C ( 402195C4 ) ( cfa= 40219620 = 40239B2C ) org t:+ var-lastword ( lfa= ) 40219630 ( 4021960C ) ( cfa= 40219640 = 40239B2C ) org t:+ lastword ( lfa= ) 40219650 ( 40219630 ) ( cfa= 40219660 = 40239B2C ) org t:+ enterdoes ( lfa= ) 40219670 ( 40219650 ) ( cfa= 40219680 = 40239B2C ) org t:+ entercol ( lfa= ) 40219690 ( 40219670 ) ( cfa= 402196A0 = 40239B2C ) org t:+ link>flb ( lfa= ) 402196B0 ( 40219690 ) ( cfa= 402196C0 = 40239B2C ) org t:+ link>len ( lfa= ) 402196DC ( 402196B0 ) ( cfa= 402196EC = 40239B2C ) org t:+ link>flags ( lfa= ) 40219708 ( 402196DC ) ( cfa= 40219718 = 40239B2C ) org t:+ link>name ( lfa= ) 4021972C ( 40219708 ) ( cfa= 40219738 = 40239B2C ) org t:+ link>xt ( lfa= ) 40219758 ( 4021972C ) ( cfa= 40219768 = 40239B2C ) org t:+ link>body ( lfa= ) 4021977C ( 40219758 ) ( cfa= 40219788 = 40239B2C ) org t:+ hidden? ( lfa= ) 402197AC ( 4021977C ) ( cfa= 402197B8 = 40239B2C ) org t:+ hide ( lfa= ) 402197E4 ( 402197AC ) ( cfa= 402197F0 = 40239B2C ) org t:+ reveal ( lfa= ) 40219820 ( 402197E4 ) ( cfa= 40219830 = 40239B2C ) org t:+ immediate? ( lfa= ) 40219854 ( 40219820 ) ( cfa= 40219864 = 40239B2C ) org t:+ immediate ( lfa= ) 40280000 ( 40219854 ) ( cfa= 40280010 = 40239B2C ) org t:+ interpret? ( lfa= ) 40280024 ( 40280000 ) ( cfa= 40280034 = 40239B2C ) org t:+ backref, ( lfa= ) 40280048 ( 40280024 ) ( cfa= 40280054 = 40239B2C ) org t:+ begin ( lfa= ) 40280064 ( 40280048 ) ( cfa= 40280070 = 40239B2C ) org t:+ again ( lfa= ) 4028008C ( 40280064 ) ( cfa= 40280098 = 40239B2C ) org t:+ until ( lfa= ) 402800B4 ( 4028008C ) ( cfa= 402800C4 = 40239B2C ) org t:+ line-break? ( lfa= ) 402800F0 ( 402800B4 ) ( cfa= 402800F8 = 40239B2C ) org t:+ ( ( lfa= ) 40280118 ( 402800F0 ) ( cfa= 40280120 = 40239B2C ) org t:+ \ ( lfa= ) 40280138 ( 40280118 ) ( cfa= 40280140 = 40239B2C ) org t:+ dip ( lfa= ) 40280158 ( 40280138 ) ( cfa= 40280164 = 40239B2C ) org t:+ keep ( lfa= ) 4028017C ( 40280158 ) ( cfa= 40280184 = 40239B2C ) org t:+ bi ( lfa= ) 4028019C ( 4028017C ) ( cfa= 402801A4 = 40239B2C ) org t:+ bi ( lfa= ) 402801BC ( 4028019C ) ( cfa= 402801C4 = 40239B2C ) org t:+ bi@ ( lfa= ) 402801D4 ( 402801BC ) ( cfa= 402801E0 = 40239B2C ) org t:+ 3dup ( lfa= ) 402801F4 ( 402801D4 ) ( cfa= 40280200 = 40239B2C ) org t:+ 3drop ( lfa= ) 40280210 ( 402801F4 ) ( cfa= 40280218 = 40239B2C ) org t:+ cr ( lfa= ) 40280238 ( 40280210 ) ( cfa= 40280244 = 40239B2C ) org t:+ space ( lfa= ) 40280258 ( 40280238 ) ( cfa= 40280260 = 40239B2C ) org t:+ % ( lfa= ) 40280270 ( 40280258 ) ( cfa= 40280278 = 40239B2C ) org t:+ / ( lfa= ) 40280288 ( 40280270 ) ( cfa= 40280290 = 40239B2C ) org t:+ +! ( lfa= ) 402802AC ( 40280288 ) ( cfa= 402802B4 = 40239B2C ) org t:+ -! ( lfa= ) 402802D4 ( 402802AC ) ( cfa= 402802DC = 40239B2C ) org t:+ c+! ( lfa= ) 402802F8 ( 402802D4 ) ( cfa= 40280310 = 40239B2C ) org t:+ prepare-forward-ref ( lfa= ) 40280328 ( 402802F8 ) ( cfa= 40280340 = 40239B2C ) org t:+ resolve-forward-ref ( lfa= ) 4028035C ( 40280328 ) ( cfa= 40280364 = 40239B2C ) org t:+ if ( lfa= ) 40280380 ( 4028035C ) ( cfa= 4028038C = 40239B2C ) org t:+ else ( lfa= ) 402803B0 ( 40280380 ) ( cfa= 402803BC = 40239B2C ) org t:+ then ( lfa= ) 402803CC ( 402803B0 ) ( cfa= 402803D8 = 40239B2C ) org t:+ ?dup ( lfa= ) 402803F0 ( 402803CC ) ( cfa= 402803F8 = 40239B2C ) org t:+ . ( lfa= ) 40280454 ( 402803F0 ) ( cfa= 4028045C = 40239B2C ) org t:+ ? ( lfa= ) 4028046C ( 40280454 ) ( cfa= 40280478 = 40239B2C ) org t:+ unloop ( lfa= ) 40280494 ( 4028046C ) ( cfa= 4028049C = 40239B2C ) org t:+ do ( lfa= ) 402804D0 ( 40280494 ) ( cfa= 402804DC = 40239B2C ) org t:+ bounds ( lfa= ) 402804F0 ( 402804D0 ) ( cfa= 402804FC = 40239B2C ) org t:+ loop ( lfa= ) 40280590 ( 402804F0 ) ( cfa= 4028059C = 40239B2C ) org t:+ end? ( lfa= ) 402805E4 ( 40280590 ) ( cfa= 402805F0 = 40239B2C ) org t:+ +loop ( lfa= ) 40280648 ( 402805E4 ) ( cfa= 40280654 = 40239B2C ) org t:+ while ( lfa= ) 40280670 ( 40280648 ) ( cfa= 4028067C = 40239B2C ) org t:+ repeat ( lfa= ) 402806A0 ( 40280670 ) ( cfa= 402806AC = 40239B2C ) org t:+ case ( lfa= ) 402806C0 ( 402806A0 ) ( cfa= 402806C8 = 40239B2C ) org t:+ of ( lfa= ) 40280708 ( 402806C0 ) ( cfa= 40280714 = 40239B2C ) org t:+ endof ( lfa= ) 40280748 ( 40280708 ) ( cfa= 40280754 = 40239B2C ) org t:+ endcase ( lfa= ) 402807A8 ( 40280748 ) ( cfa= 402807B8 = 40239B2C ) org t:+ override ( lfa= ) 402807C8 ( 402807A8 ) ( cfa= 402807D4 = 40239B2C ) org t:+ create ( lfa= ) 402807F0 ( 402807C8 ) ( cfa= 402807F8 = 40239B2C ) org t:+ nop ( lfa= ) 40280800 ( 402807F0 ) ( cfa= 4028080C = 40239B2C ) org t:+ create: ( lfa= ) 40280834 ( 40280800 ) ( cfa= 40280840 = 40239B2C ) org t:+ does> ( lfa= ) 40280858 ( 40280834 ) ( cfa= 40280868 = 40239B2C ) org t:+ constant: ( lfa= ) 40280880 ( 40280858 ) ( cfa= 40280894 = 40239B2C ) org t:+ init-variable: ( lfa= ) 402808A4 ( 40280880 ) ( cfa= 402808B4 = 40239B2C ) org t:+ variable: ( lfa= ) 402808C8 ( 402808A4 ) ( cfa= 402808D4 = 40239B2C ) org t:+ TRUE ( lfa= ) 402808E4 ( 402808C8 ) ( cfa= 402808F0 = 40239B2C ) org t:+ FALSE ( lfa= ) 40280900 ( 402808E4 ) ( cfa= 40280910 = 40239B2C ) org t:+ exception: ( lfa= ) 4028092C ( 40280900 ) ( cfa= 4028093C = 40239B3C ) org t:+ EUNDERFLOW ( lfa= ) 40280948 ( 4028092C ) ( cfa= 40280958 = 40239B3C ) org t:+ EOVERFLOW ( lfa= ) 40280964 ( 40280948 ) ( cfa= 40280970 = 40239B3C ) org t:+ EASSERT ( lfa= ) 4028097C ( 40280964 ) ( cfa= 4028098C = 40239B3C ) org t:+ ENOTFOUND ( lfa= ) 40280998 ( 4028097C ) ( cfa= 402809A8 = 40239B3C ) org t:+ ECONVERT ( lfa= ) 402809B4 ( 40280998 ) ( cfa= 402809C0 = 40239B3C ) org t:+ EESCAPE ( lfa= ) 402809CC ( 402809B4 ) ( cfa= 402809D8 = 40239B2C ) org t:+ defer: ( lfa= ) 402809F8 ( 402809CC ) ( cfa= 40280A04 = 40239B2C ) org t:+ defer! ( lfa= ) 40280A24 ( 402809F8 ) ( cfa= 40280A34 = 40239B3C ) org t:+ unhandled ( lfa= ) 40280A40 ( 40280A24 ) ( cfa= 40280A4C = 40239B3C ) org t:+ handler ( lfa= ) 40280A58 ( 40280A40 ) ( cfa= 40280A68 = 40239B3C ) org t:+ var-handler ( lfa= ) 40280A74 ( 40280A58 ) ( cfa= 40280A88 = 40239B2C ) org t:+ single-handler ( lfa= ) 40280A94 ( 40280A74 ) ( cfa= 40280AA0 = 40239B2C ) org t:+ catch ( lfa= ) 40280AE8 ( 40280A94 ) ( cfa= 40280AF4 = 40239B2C ) org t:+ throw ( lfa= ) 40280B5C ( 40280AE8 ) ( cfa= 40280B64 = 40239B2C ) org t:+ ' ( lfa= ) 40280B94 ( 40280B5C ) ( cfa= 40280BA4 = 40239B2C ) org t:+ postpone: ( lfa= ) 40280BB4 ( 40280B94 ) ( cfa= 40280BC0 = 40239B2C ) org t:+ ['], ( lfa= ) 40280BD4 ( 40280BB4 ) ( cfa= 40280BDC = 40239B2C ) org t:+ { ( lfa= ) 40280C1C ( 40280BD4 ) ( cfa= 40280C24 = 40239B2C ) org t:+ } ( lfa= ) 40280C40 ( 40280C1C ) ( cfa= 40280C48 = 40239B2C ) org t:+ is: ( lfa= ) 40280C84 ( 40280C40 ) ( cfa= 40280C90 = 40239B2C ) org t:+ array: ( lfa= ) 40280CB4 ( 40280C84 ) ( cfa= 40280CC4 = 40239B2C ) org t:+ byte-array: ( lfa= ) 40280CE0 ( 40280CB4 ) ( cfa= 40280CEC = 40239B2C ) org t:+ buffer: ( lfa= ) 40280CFC ( 40280CE0 ) ( cfa= 40280D08 = 40239B2C ) org t:+ struct ( lfa= ) 40280D18 ( 40280CFC ) ( cfa= 40280D24 = 40239B2C ) org t:+ field: ( lfa= ) 40280D48 ( 40280D18 ) ( cfa= 40280D50 = 40239B2C ) org t:+ abs ( lfa= ) 40280D70 ( 40280D48 ) ( cfa= 40280D78 = 40239B2C ) org t:+ max ( lfa= ) 40280D94 ( 40280D70 ) ( cfa= 40280D9C = 40239B2C ) org t:+ min ( lfa= ) 40280DB8 ( 40280D94 ) ( cfa= 40280DC8 = 40239B2C ) org t:+ between? ( lfa= ) 40280DE4 ( 40280DB8 ) ( cfa= 40280DF0 = 40239B2C ) org t:+ cmove ( lfa= ) 40280E98 ( 40280DE4 ) ( cfa= 40280EA4 = 40239B2C ) org t:+ char: ( lfa= ) 40280ECC ( 40280E98 ) ( cfa= 40280ED8 = 40239B2C ) org t:+ [str ( lfa= ) 40280F0C ( 40280ECC ) ( cfa= 40280F18 = 40239B2C ) org t:+ str] ( lfa= ) 40280F30 ( 40280F0C ) ( cfa= 40280F3C = 40239B2C ) org t:+ eschr ( lfa= ) 40281074 ( 40280F30 ) ( cfa= 40281084 = 40239B2C ) org t:+ whitespace? ( lfa= ) 40281144 ( 40281074 ) ( cfa= 40281154 = 40239B2C ) org t:+ c,-until ( lfa= ) 402811A0 ( 40281144 ) ( cfa= 402811B0 = 40239B2C ) org t:+ hexchar>int ( lfa= ) 40281250 ( 402811A0 ) ( cfa= 40281260 = 40239B2C ) org t:+ hex>int' ( lfa= ) 40281324 ( 40281250 ) ( cfa= 40281330 = 40239B2C ) org t:+ str, ( lfa= ) 4028134C ( 40281324 ) ( cfa= 40281358 = 40239B2C ) org t:+ chr? ( lfa= ) 40281384 ( 4028134C ) ( cfa= 40281390 = 40239B2C ) org t:+ str? ( lfa= ) 402813A8 ( 40281384 ) ( cfa= 402813B4 = 40239B2C ) org t:+ hex? ( lfa= ) 40281420 ( 402813A8 ) ( cfa= 40281428 = 40239B2C ) org t:+ ( lfa= ) 402814C8 ( 40281420 ) ( cfa= 402814D0 = 40239B2C ) org t:+ ( lfa= ) 40281568 ( 402814C8 ) ( cfa= 40281578 = 40239B2C ) org t:+ separator ( lfa= ) 402815A0 ( 40281568 ) ( cfa= 402815AC = 40239B2C ) org t:+ str: ( lfa= ) 402815F4 ( 402815A0 ) ( cfa= 40281600 = 40239B2C ) org t:+ strlen ( lfa= ) 40281630 ( 402815F4 ) ( cfa= 4028163C = 40239B2C ) org t:+ =str ( lfa= ) 402816AC ( 40281630 ) ( cfa= 402816BC = 40239B2C ) org t:+ str-starts? ( lfa= ) 4028173C ( 402816AC ) ( cfa= 40281748 = 40239B2C ) org t:+ str-in? ( lfa= ) 402817A0 ( 4028173C ) ( cfa= 402817A8 = 40239B2C ) org t:+ >s' ( lfa= ) 402817F0 ( 402817A0 ) ( cfa= 402817FC = 40239B2C ) org t:+ >str ( lfa= ) 40281858 ( 402817F0 ) ( cfa= 40281864 = 40239B2C ) org t:+ hex>int ( lfa= ) 40281878 ( 40281858 ) ( cfa= 40281884 = 40239B2C ) org t:+ hex: ( lfa= ) 402818A8 ( 40281878 ) ( cfa= 402818BC = 40239B2C ) org t:+ var.area.wide ( lfa= ) 402818CC ( 402818A8 ) ( cfa= 402818E4 = 40239B2C ) org t:+ var.base.address ( lfa= ) 402818F8 ( 402818CC ) ( cfa= 40281918 = 40239B2C ) org t:+ ram.address.replacing.nop ( lfa= ) 40281924 ( 402818F8 ) ( cfa= 40281934 = 40239B2C ) org t:+ var.counter ( lfa= ) 4028194C ( 40281924 ) ( cfa= 4028195C = 40239B2C ) org t:+ var.area ( lfa= ) 40281974 ( 4028194C ) ( cfa= 4028197C = 40239B2C ) org t:+ var ( lfa= ) 402819C8 ( 40281974 ) ( cfa= 402819D8 = 40239B2C ) org t:+ var.create ( lfa= ) 402819F4 ( 402819C8 ) ( cfa= 40281A04 = 40239B2C ) org t:+ var.allot ( lfa= ) 40281A18 ( 402819F4 ) ( cfa= 40281A24 = 40239B2C ) org t:+ print: ( lfa= ) 40281A7C ( 40281A18 ) ( cfa= 40281A8C = 40239B2C ) org t:+ println: ( lfa= ) 40281ACC ( 40281A7C ) ( cfa= 40281AD4 = 40239B3C ) org t:+ s0 ( lfa= ) 40281AE0 ( 40281ACC ) ( cfa= 40281AE8 = 40239B3C ) org t:+ r0 ( lfa= ) 40281AF4 ( 40281AE0 ) ( cfa= 40281B00 = 40239B2C ) org t:+ depth ( lfa= ) 40281B20 ( 40281AF4 ) ( cfa= 40281B2C = 40239B2C ) org t:+ rdepth ( lfa= ) 40281B4C ( 40281B20 ) ( cfa= 40281B58 = 40239B2C ) org t:+ marker: ( lfa= ) 40281B8C ( 40281B4C ) ( cfa= 40281B9C = 40239B2C ) org t:+ link-type ( lfa= ) 40281BBC ( 40281B8C ) ( cfa= 40281BC8 = 40239B2C ) org t:+ help ( lfa= ) 40281BF8 ( 40281BBC ) ( cfa= 40281C08 = 40239B2C ) org t:+ stack-print ( lfa= ) 40281CC4 ( 40281BF8 ) ( cfa= 40281CD4 = 40239B2C ) org t:+ stack-clear ( lfa= ) 40281CF8 ( 40281CC4 ) ( cfa= 40281D08 = 40239B2C ) org t:+ stack-show ( lfa= ) 40281DA4 ( 40281CF8 ) ( cfa= 40281DB4 = 40239B2C ) org t:+ stack-hide ( lfa= ) 40281DCC ( 40281DA4 ) ( cfa= 40281DD8 = 40239B2C ) org t:+ heap? ( lfa= ) 40281DF0 ( 40281DCC ) ( cfa= 40281DFC = 40239B2C ) org t:+ freemem ( lfa= ) 40281E10 ( 40281DF0 ) ( cfa= 40281E1C = 40239B2C ) org t:+ usedmem ( lfa= ) 40281E30 ( 40281E10 ) ( cfa= 40281E3C = 40239B2C ) org t:+ ex-type ( lfa= ) 40281E64 ( 40281E30 ) ( cfa= 40281E74 = 40239B2C ) org t:+ traceback ( lfa= ) 40282014 ( 40281E64 ) ( cfa= 4028201C = 40239B2C ) org t:+ on ( lfa= ) 40282034 ( 40282014 ) ( cfa= 4028203C = 40239B2C ) org t:+ off ( lfa= ) 40282054 ( 40282034 ) ( cfa= 40282060 = 40239B2C ) org t:+ words ( lfa= ) 40282094 ( 40282054 ) ( cfa= 402820A0 = 40239B2C ) org t:+ words' ( lfa= ) 402820AC ( 40282094 ) ( cfa= 402820BC = 40239B2C ) org t:+ constant ( lfa= ) 402820C8 ( 402820AC ) ( cfa= 402820D8 = 40239B2C ) org t:+ variable ( lfa= ) 402820E4 ( 402820C8 ) ( cfa= 402820F0 = 40239B2C ) org t:+ create ( lfa= ) 402820FC ( 402820E4 ) ( cfa= 40282104 = 40239B2C ) org t:+ h ( lfa= ) 4028212C ( 402820FC ) ( cfa= 40282134 = 40239B2C ) org t:+ ` ( lfa= ) 4028215C ( 4028212C ) ( cfa= 4028216C = 40239B2C ) org t:+ 0~F>'0'~'F' ( lfa= ) 402821A4 ( 4028215C ) ( cfa= 402821AC = 40239B2C ) org t:+ .n ( lfa= ) 402821C8 ( 402821A4 ) ( cfa= 402821D0 = 40239B2C ) org t:+ .8n ( lfa= ) 40282268 ( 402821C8 ) ( cfa= 40282274 = 40239B2C ) org t:+ code ( lfa= ) 4028228C ( 40282268 ) ( cfa= 40282294 = 40282298 ) org t:+ r@ ( lfa= ) 402822A8 ( 4028228C ) ( cfa= 402822B0 = 40239B2C ) org t:+ .?n ( lfa= ) 40282430 ( 402822A8 ) ( cfa= 40282438 = 40239B2C ) org t:+ .2n ( lfa= ) 4028244C ( 40282430 ) ( cfa= 40282454 = 40239B2C ) org t:+ .3n ( lfa= ) 40282468 ( 4028244C ) ( cfa= 40282470 = 40239B2C ) org t:+ .4n ( lfa= ) 40282484 ( 40282468 ) ( cfa= 4028248C = 40239B2C ) org t:+ .5n ( lfa= ) 402824A0 ( 40282484 ) ( cfa= 402824A8 = 40239B2C ) org t:+ .6n ( lfa= ) 402824BC ( 402824A0 ) ( cfa= 402824C4 = 40239B2C ) org t:+ .7n ( lfa= ) 402824D8 ( 402824BC ) ( cfa= 402824E0 = 40239B2C ) org t:+ .8n ( lfa= ) 402824F4 ( 402824D8 ) ( cfa= 402824FC = 40239B2C ) org t:+ not ( lfa= ) 40282508 ( 402824F4 ) ( cfa= 40282514 = 40239B2C ) org t:+ between ( lfa= ) 4028253C ( 40282508 ) ( cfa= 40282548 = 40239B2C ) org t:+ hex? ( lfa= ) 40282558 ( 4028253C ) ( cfa= 40282560 = 40239B2C ) org t:+ hex ( lfa= ) 40282578 ( 40282558 ) ( cfa= 40282584 = 40239B2C ) org t:+ decimal ( lfa= ) 4028259C ( 40282578 ) ( cfa= 402825A8 = 40239B2C ) org t:+ .8n/. ( lfa= ) 402825D0 ( 4028259C ) ( cfa= 402825E8 = 40239B2C ) org t:+ stack-print(hex) ( lfa= ) 402826B4 ( 402825D0 ) ( cfa= 402826BC = 40239B2C ) org t:+ .s ( lfa= ) 40282754 ( 402826B4 ) ( cfa= 4028275C = 40239B2C ) org t:+ mod ( lfa= ) 40282768 ( 40282754 ) ( cfa= 40282774 = 40239B2C ) org t:+ spaces ( lfa= ) 402827D0 ( 40282768 ) ( cfa= 402827D8 = 40239B2C ) org t:+ .h ( lfa= ) 402827E4 ( 402827D0 ) ( cfa= 402827F0 = 40239B2C ) org t:+ fill ( lfa= ) 40282864 ( 402827E4 ) ( cfa= 4028286C = 40239B2C ) org t:+ x? ( lfa= ) 4028287C ( 40282864 ) ( cfa= 40282888 = 40239B2C ) org t:+ dump.xn ( lfa= ) 40282988 ( 4028287C ) ( cfa= 40282994 = 40239B2C ) org t:+ dump.2n ( lfa= ) 402829B0 ( 40282988 ) ( cfa= 402829BC = 40239B2C ) org t:+ dump.4n ( lfa= ) 402829D8 ( 402829B0 ) ( cfa= 402829E4 = 40239B2C ) org t:+ dump.6n ( lfa= ) 40282A00 ( 402829D8 ) ( cfa= 40282A0C = 40239B2C ) org t:+ dump.8n ( lfa= ) 40282A28 ( 40282A00 ) ( cfa= 40282A34 = 40239B2C ) org t:+ dump ( lfa= ) 40282C34 ( 40282A28 ) ( cfa= 40282C40 = 40239B2C ) org t:+ ?key ( lfa= ) 40282C4C ( 40282C34 ) ( cfa= 40282C54 = 40239B2C ) org t:+ key ( lfa= ) 40282C60 ( 40282C4C ) ( cfa= 40282C6C = 40239B2C ) org t:+ help' ( lfa= ) 40282D38 ( 40282C60 ) ( cfa= 40282D44 = 40239B2C ) org t:+ help' ( lfa= ) 40282DF0 ( 40282D38 ) ( cfa= 40282E00 = 40239B2C ) org t:+ total.words ( lfa= ) 40282E10 ( 40282DF0 ) ( cfa= 40282E1C = 40239B2C ) org t:+ word.# ( lfa= ) 40282E2C ( 40282E10 ) ( cfa= 40282E40 = 40239B2C ) org t:+ get.total.words ( lfa= ) 40282E8C ( 40282E2C ) ( cfa= 40282EA0 = 40239B2C ) org t:+ normal.words? ( lfa= ) 40282EB0 ( 40282E8C ) ( cfa= 40282EC4 = 40239B2C ) org t:+ print.a.word ( lfa= ) 40282F54 ( 40282EB0 ) ( cfa= 40282F64 = 40239B2C ) org t:+ dump.cfa? ( lfa= ) 40282F74 ( 40282F54 ) ( cfa= 40282F84 = 40239B2C ) org t:+ aligned.4 ( lfa= ) 40282FA4 ( 40282F74 ) ( cfa= 40282FAC = 40239B2C ) org t:+ 1+ ( lfa= ) 40282FC0 ( 40282FA4 ) ( cfa= 40282FCC = 40239B2C ) org t:+ count ( lfa= ) 40282FE8 ( 40282FC0 ) ( cfa= 40282FF4 = 40239B2C ) org t:+ type ( lfa= ) 40283058 ( 40282FE8 ) ( cfa= 4028306C = 40239B2C ) org t:+ check.valid.lfa ( lfa= ) 402830BC ( 40283058 ) ( cfa= 402830C8 = 40239B2C ) org t:+ nfa>lfa ( lfa= ) 402830DC ( 402830BC ) ( cfa= 402830E8 = 40239B2C ) org t:+ nfa>cfa ( lfa= ) 40283108 ( 402830DC ) ( cfa= 40283114 = 40239B2C ) org t:+ lfa>nfa ( lfa= ) 40283128 ( 40283108 ) ( cfa= 40283134 = 40239B2C ) org t:+ lfa>cfa ( lfa= ) 40283144 ( 40283128 ) ( cfa= 40283150 = 40239B2C ) org t:+ cfa>lfa ( lfa= ) 402831A8 ( 40283144 ) ( cfa= 402831B4 = 40239B2C ) org t:+ cfa>nfa ( lfa= ) 402831C4 ( 402831A8 ) ( cfa= 402831D4 = 40239B2C ) org t:+ .id(lfa) ( lfa= ) 402831E0 ( 402831C4 ) ( cfa= 402831F0 = 40239B2C ) org t:+ .id(nfa) ( lfa= ) 40283200 ( 402831E0 ) ( cfa= 40283210 = 40239B2C ) org t:+ .id(cfa) ( lfa= ) 40283220 ( 40283200 ) ( cfa= 40283230 = 40239B2C ) org t:+ decompile? ( lfa= ) 40283240 ( 40283220 ) ( cfa= 40283254 = 40239B2C ) org t:+ next.word's.lfa ( lfa= ) 40283264 ( 40283240 ) ( cfa= 4028327C = 40239B2C ) org t:+ current.word's.lfa ( lfa= ) 4028328C ( 40283264 ) ( cfa= 402832AC = 40239B2C ) org t:+ get.next.word's.lfa/here ( lfa= ) 40283354 ( 4028328C ) ( cfa= 40283370 = 40239B2C ) org t:+ (.12345678..12345678.) ( lfa= ) 402833D0 ( 40283354 ) ( cfa= 402833DC = 40239B2C ) org t:+ .string ( lfa= ) 40283434 ( 402833D0 ) ( cfa= 40283448 = 40239B2C ) org t:+ print:."string" ( lfa= ) 40283504 ( 40283434 ) ( cfa= 40283510 = 40239B2C ) org t:+ cfa? ( lfa= ) 40283520 ( 40283504 ) ( cfa= 4028352C = 40239B2C ) org t:+ (r)' ( lfa= ) 4028353C ( 40283520 ) ( cfa= 40283548 = 40239B2C ) org t:+ (r)'' ( lfa= ) 40283558 ( 4028353C ) ( cfa= 40283564 = 40239B2C ) org t:+ >r'' ( lfa= ) 40283574 ( 40283558 ) ( cfa= 40283580 = 40239B2C ) org t:+ r>'' ( lfa= ) 40283590 ( 40283574 ) ( cfa= 4028359C = 40239B2C ) org t:+ r@'' ( lfa= ) 402835AC ( 40283590 ) ( cfa= 402835B4 = 40239B2C ) org t:+ >r' ( lfa= ) 402835C4 ( 402835AC ) ( cfa= 402835CC = 40239B2C ) org t:+ r>' ( lfa= ) 402835DC ( 402835C4 ) ( cfa= 402835E4 = 40239B2C ) org t:+ r@' ( lfa= ) 402835F4 ( 402835DC ) ( cfa= 40283600 = 40239B2C ) org t:+ r.stack ( lfa= ) 40283630 ( 402835F4 ) ( cfa= 40283644 = 40239B2C ) org t:+ r.stack.counter ( lfa= ) 40283654 ( 40283630 ) ( cfa= 4028365C = 40239B2C ) org t:+ >r ( lfa= ) 40283688 ( 40283654 ) ( cfa= 40283690 = 40239B2C ) org t:+ r> ( lfa= ) 402836BC ( 40283688 ) ( cfa= 402836C4 = 40239B2C ) org t:+ r@* ( lfa= ) 402836E0 ( 402836BC ) ( cfa= 402836F0 = 40239B2C ) org t:+ .freemem ( lfa= ) 40283728 ( 402836E0 ) ( cfa= 40283734 = 40239B2C ) org t:+ words ( lfa= ) 4028383C ( 40283728 ) ( cfa= 40283844 = 40239B2C ) org t:+ ws ( lfa= ) 40283850 ( 4028383C ) ( cfa= 4028385C = 40239B2C ) org t:+ is.cfa? ( lfa= ) 402838B0 ( 40283850 ) ( cfa= 402838BC = 40239B2C ) org t:+ is.cfa? ( lfa= ) 40283910 ( 402838B0 ) ( cfa= 40283924 = 40239B2C ) org t:+ .id(cfa)/code ( lfa= ) 4028394C ( 40283910 ) ( cfa= 40283958 = 40239B2C ) org t:+ +1(...) ( lfa= ) 40283998 ( 4028394C ) ( cfa= 402839A4 = 40239B2C ) org t:+ +2(...) ( lfa= ) 402839F0 ( 40283998 ) ( cfa= 40283A08 = 40239B2C ) org t:+ print.variable... ( lfa= ) 40283B6C ( 402839F0 ) ( cfa= 40283B80 = 40239B2C ) org t:+ .print:"xxx..." ( lfa= ) 40283C98 ( 40283B6C ) ( cfa= 40283CB8 = 40239B2C ) org t:+ decompile.an.instruction ( lfa= ) 40283F28 ( 40283C98 ) ( cfa= 40283F44 = 40239B2C ) org t:+ assembly.coded.word? ( lfa= ) 40283FBC ( 40283F28 ) ( cfa= 40283FD0 = 40239B2C ) org t:+ .assembly.code ( lfa= ) 402840F8 ( 40283FBC ) ( cfa= 40284104 = 40239B2C ) org t:+ .90 ( lfa= ) 40284178 ( 402840F8 ) ( cfa= 40284184 = 40239B2C ) org t:+ .90--- ( lfa= ) 402841F8 ( 40284178 ) ( cfa= 4028421C = 40239B2C ) org t:+ decompile.a.word(instruction) ( lfa= ) 40284280 ( 402841F8 ) ( cfa= 402842A0 = 40239B2C ) org t:+ decompile.a.word(number) ( lfa= ) 40284334 ( 40284280 ) ( cfa= 40284344 = 40239B2C ) org t:+ print:... ( lfa= ) 40284368 ( 40284334 ) ( cfa= 40284388 = 40239B2C ) org t:+ .12345678..ascii.of.name ( lfa= ) 40284414 ( 40284368 ) ( cfa= 40284434 = 40239B2C ) org t:+ decompile.a.word(number)? ( lfa= ) 40284444 ( 40284414 ) ( cfa= 4028444C = 40239B2C ) org t:+ dw ( lfa= ) 40284478 ( 40284444 ) ( cfa= 40284488 = 40239B2C ) org t:+ print:... ( lfa= ) 402844AC ( 40284478 ) ( cfa= 402844CC = 40239B2C ) org t:+ .12345678..ascii.of.name ( lfa= ) 40284558 ( 402844AC ) ( cfa= 40284564 = 40239B2C ) org t:+ .head ( lfa= ) 40284604 ( 40284558 ) ( cfa= 40284620 = 40239B2C ) org t:+ decompile.a.word(lfa) ( lfa= ) 40284650 ( 40284604 ) ( cfa= 4028466C = 40239B2C ) org t:+ decompile.a.word(cfa) ( lfa= ) 4028467C ( 40284650 ) ( cfa= 40284684 = 40239B2C ) org t:+ see ( lfa= ) 4028469C ( 4028467C ) ( cfa= 402846A8 = 40239B2C ) org t:+ .90 ( lfa= ) 4028471C ( 4028469C ) ( cfa= 4028472C = 40239B2C ) org t:+ dump.all ( lfa= ) 4028481C ( 4028471C ) ( cfa= 4028483C = 40239B2C ) org t:+ dump.kernel.assembly.code ( lfa= ) 402848B0 ( 4028481C ) ( cfa= 402848BC = 40239B2C ) org t:+ leave ( lfa= ) 402848D8 ( 402848B0 ) ( cfa= 402848E4 = 40239B2C ) org t:+ words.n ( lfa= ) 40284E60 ( 402848D8 ) ( cfa= 40284E6C = 40239B2C ) org t:+ words0 ( lfa= ) 40284E80 ( 40284E60 ) ( cfa= 40284E8C = 40239B2C ) org t:+ words1 ( lfa= ) 40284EA0 ( 40284E80 ) ( cfa= 40284EAC = 40239B2C ) org t:+ words2 ( lfa= ) 40284EB8 ( 40284EA0 ) ( cfa= 40284EC4 = 40239B2C ) org t:+ words3 ( lfa= ) 40284ED8 ( 40284EB8 ) ( cfa= 40284EE4 = 40239B2C ) org t:+ words4 ( lfa= ) 40284EF8 ( 40284ED8 ) ( cfa= 40284F04 = 40239B2C ) org t:+ words5 ( lfa= ) 40284F18 ( 40284EF8 ) ( cfa= 40284F24 = 40239B2C ) org t:+ words6 ( lfa= ) 40284F38 ( 40284F18 ) ( cfa= 40284F44 = 40239B2C ) org t:+ words7 ( lfa= ) 40284F58 ( 40284F38 ) ( cfa= 40284F6C = 40239B2C ) org t:+ 100.all'0or-1? ( lfa= ) 40284FFC ( 40284F58 ) ( cfa= 40285010 = 40239B2C ) org t:+ from.to.dump ( lfa= ) 40285100 ( 40284FFC ) ( cfa= 4028510C = 40239B2C ) org t:+ dxxx ( lfa= ) 40285150 ( 40285100 ) ( cfa= 40285158 = 40239B2C ) org t:+ t<p ( lfa= ) 402851AC ( 40285150 ) ( cfa= 402851B4 = 40239B2C ) org t:+ t>p ( lfa= ) 40285208 ( 402851AC ) ( cfa= 40285220 = 40239B3C ) org t:+ GPIO_INTTYPE_NONE ( lfa= ) 4028522C ( 40285208 ) ( cfa= 4028523C = 40239B3C ) org t:+ GPIO_LOW ( lfa= ) 40285248 ( 4028522C ) ( cfa= 40285258 = 40239B3C ) org t:+ GPIO_HIGH ( lfa= ) 40285264 ( 40285248 ) ( cfa= 40285270 = 40239B3C ) org t:+ GPIO_IN ( lfa= ) 4028527C ( 40285264 ) ( cfa= 40285298 = 40239B3C ) org t:+ GPIO_INTTYPE_EDGE_POS ( lfa= ) 402852A4 ( 4028527C ) ( cfa= 402852C0 = 40239B3C ) org t:+ GPIO_INTTYPE_EDGE_NEG ( lfa= ) 402852CC ( 402852A4 ) ( cfa= 402852DC = 40239B3C ) org t:+ GPIO_OUT ( lfa= ) 402852E8 ( 402852CC ) ( cfa= 40285304 = 40239B3C ) org t:+ GPIO_INTTYPE_EDGE_ANY ( lfa= ) 40285310 ( 402852E8 ) ( cfa= 40285328 = 40239B3C ) org t:+ GPIO_OUT_OPEN_DRAIN ( lfa= ) 40285334 ( 40285310 ) ( cfa= 40285350 = 40239B3C ) org t:+ GPIO_INTTYPE_LEVEL_LOW ( lfa= ) 4028535C ( 40285334 ) ( cfa= 40285378 = 40239B3C ) org t:+ GPIO_INTTYPE_LEVEL_HIGH ( lfa= ) 40285384 ( 4028535C ) ( cfa= 40285390 = 40239B2C ) org t:+ blink ( lfa= ) 402853D0 ( 40285384 ) ( cfa= 402853E0 = 40239B2C ) org t:+ times-blink ( lfa= ) 40285438 ( 402853D0 ) ( cfa= 40285448 = 40239B3C ) org t:+ ENOPULSE ( lfa= ) 40285454 ( 40285438 ) ( cfa= 40285464 = 40239B2C ) org t:+ pulse-len ( lfa= ) 40285488 ( 40285454 ) ( cfa= 40285498 = 40239B3C ) org t:+ PIN_SPEED_1 ( lfa= ) 402854A4 ( 40285488 ) ( cfa= 402854B4 = 40239B3C ) org t:+ PIN_SPEED_2 ( lfa= ) 402854C0 ( 402854A4 ) ( cfa= 402854D0 = 40239B3C ) org t:+ PIN_MOTOR_1 ( lfa= ) 402854DC ( 402854C0 ) ( cfa= 402854EC = 40239B3C ) org t:+ PIN_MOTOR_2 ( lfa= ) 402854F8 ( 402854DC ) ( cfa= 40285500 = 40239B3C ) org t:+ LED ( lfa= ) 4028550C ( 402854F8 ) ( cfa= 40285520 = 40239B2C ) org t:+ start-blinking ( lfa= ) 3FFE88C0 ( 4028550C ) ( cfa= 3FFE88D0 = 40239B2C ) org t:+ interpret? \ ** \ ** or we can see words like this:

see words

\ ** ( 4026BFE8 4026BFA0 ) \ 4026BFEC 05 77 6F 72 64 73 : words \ ------------------------------------------------------------------------------------------ ( 4026BFF4 40239B2C ) ( docolon ) ( 4026BFF8 4026B700 ) get.total.words ( 4026BFFC 4026BF1C ) >r ( 4026C000 4021824C ) ( ['] ) 00000000 ( 4026C008 4026B6DC ) word.# ( 4026C00C 40218234 ) ! ( 4026C010 40219640 ) lastword ( 4026C014 4026BF84 ) r@ ( 4026C018 4026B6DC ) word.# ( 4026C01C 4021821C ) @ ( 4026C020 40218180 ) - ( 4026C024 4021811C ) dup ( 4026C028 4021824C ) ( ['] ) 00000005 ( 4026C030 4026B01C ) mod ( 4026C034 40218468 ) 0= ( 4026C038 40218278 ) branch0 00000074 ( 4026C040 40268AD8 ) cr ( 4026C044 4021811C ) dup ( 4026C048 4021824C ) ( ['] ) 0000000A ( 4026C050 40218258 ) < ( 4026C054 40218278 ) branch0 00000008 ( 4026C05C 40268B04 ) space ( 4026C060 4021811C ) dup ( 4026C064 4021824C ) ( ['] ) 00000064 ( 4026C06C 40218258 ) < ( 4026C070 40218278 ) branch0 00000008 ( 4026C078 40268B04 ) space ( 4026C07C 4021811C ) dup ( 4026C080 4021824C ) ( ['] ) 000003E8 ( 4026C088 40218258 ) < ( 4026C08C 40218278 ) branch0 00000008 ( 4026C094 40268B04 ) space ( 4026C098 40268CB8 ) . ( 4026C09C 4021824C ) ( ['] ) 00000002 ( 4026C0A4 4026B034 ) spaces ( 4026C0A8 40218268 ) branch 00000008 ( 4026C0B0 4021812C ) drop ( 4026C0B4 40268C98 ) ?dup ( 4026C0B8 40218278 ) branch0 00000030 ( 4026C0C0 4021811C ) dup ( 4026C0C4 4026A45C ) link-type ( 4026C0C8 4021821C ) @ ( 4026C0CC 40268B04 ) space ( 4026C0D0 40268B04 ) space ( 4026C0D4 4021824C ) ( ['] ) 00000001 ( 4026C0DC 4026B6DC ) word.# ( 4026C0E0 40268B50 ) +! ( 4026C0E4 40218268 ) branch FFFFFF2C ( 4026C0EC 4026BF50 ) r>* ( 4026C0F0 4021812C ) drop ( 4026C0F4 4026BFB0 ) .freemem ( 4026C0F8 402182C8 ) exit

holinepu commented 5 years ago

hi, It seems like that no one cares about the cross-compiler that can be better to do the job. Ok! we'll change to the possibility to use punyForth itself to compile the source code and then transfer it to the console via rs232. That way we can obtain the hex file by executing , for example , 40280000 >flash. Now we can convert it to 40280000.bin file to be written to flash rom by flasher.exe. Wouldn't that be great to finish the job! Blees you by the name of Forth holi

40260000 (3).zip

holinepu commented 5 years ago

寄件者: chang luke holinepu@yahoo.com.tw收件者: Peter Forth peter4th2017@gmail.com寄件時間: 2018年9月29日 星期六 上午11:46:25 [GMT+8]主旨: Re: Punyforth and Win32forth , etc hi, Peter Forth and all the others       I have some experience in ASYST which use OVERLAY a lot. I still keep one at hand. Frankly speaking I didn't use it very well at that time. Maybe I'll recall that again.>  So the technical word, to define your work is you have created  an "OVERLAY capability to PunyForth" ! If it has enough RAM space then we don't have to have OVERLAY to switch between different applications. Still if we can get the OVERLAY capability that would be better. It is better to have than nothing, right? The attached file temp.rar is for wifi and that sort of things. It works fine. I tried to compile ubernew163.forth into it. It was not very stable, so I switch to the other version ( older ? ) temp1.rar  and  ran dis-compiler in punyforth very successfully. I urge you guys to try this version out first to identify with our endeavor.  Ok!?                             Best  regard                                                 Be Forth with you                             holi  ( luke )

as for cross-compiler development system can still be used in cooperative with punyforth. under win32for  ( 4.2.67x )        fload  punyforth163.f      see  words    cls  words'     see  /mod  \ ***  \  40218190  40218184  \  40218194  04 2F 6D 6F 64  \ -------------------------------------------------------------------------------                                   code  /mod  (  4021819C  402398BC          )  (  402398BC  38 0F 4B FF       )                  {drop>R3}  (  402398C0  28 0F 4B FF       )                  {drop>R2}  (  402398C4  12 C1 E4          )                     R1-1C  (  402398C7  09 61             )                  (R1+18)=R0  (  402398C9  89 41             )                  (R1+10)=R8  (  402398CB  D9 31             )                  (R1+0C)=RD  (  402398CD  E9 21             )                  (R1+8)=RE  (  402398CF  F2 61 01          )                  (R1+4)=RF  (  402398D2  01 F9 FF          )                  R0=40101168                 \ ( 402398B8 )= 40101168  (  402398D5  C0 00 00          )                  callx0_R0  (  402398D8  F8 11             )                  RF=(R1+4)  (  402398DA  E8 21             )                  RE=(R1+8)  (  402398DC  D8 31             )                  RD=(R1+0C)  (  402398DE  88 41             )                  R8=(R1+10)  (  402398E0  08 61             )                  R0=(R1+18)  (  402398E2  12 C1 1C          )                     R1+1C  (  402398E5  F2 CF FC 39 0F    )                  {dup<R3}  (  402398EA  F2 CF FC 29 0F    )                  {dup<R2}  (  402398EF  88 0E             )                  R8=(RE)  (  402398F1  4B EE             )                     RE+4  (  402398F3  98 08             )                  R9=(R8)  (  402398F5  A0 09 00          )                  jmp_R9 在 2018年9月29日 星期六 上午5:40:13 [GMT+8], Peter Forthpeter4th2017@gmail.com 寫道:

Thanks, I'll check it out.

When I used to program in LMI for DOS   those kind of files that were binaries pre-compiled, were called    --  OVERLAYS  --.(other Forths also named this kind of binaries Overlays, and some other compilers too, I think Turbo C and Turbo Pascal, had that possiblity too, I do not remember well)

So the technical word, to define your work is you have created  an "OVERLAY capability to PunyForth" !

We used this to store the EDITOR, the ASSEMBLER the Native code compiler, and any TOOL that could be used for a task, and then when the task was complete, was not necessary anymore to have it on RAM, this was very useful because RAM was limited to 64K. (The other secondary use was for distribution of software  tools, without giving a third party access to your full source. )

Thanks again

Peter

On Fri, Sep 28, 2018 at 12:50 PM chang luke holinepu@yahoo.com.tw wrote:

hi,       The compiled code in RAM area can now be moved to flash ROM by executing   402688c0  >flash.  And after executing      forget   backref,   we can add new program into fresh RAM and later move to another address in flash ROM, say, 40260000  >flash.  We can link it to the previous one and so on.           good luck!                   holi 在 2018年9月23日 星期日 下午5:01:08 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

Hi  Peter Forth !     It seems like that you didn't join the win32forth groups before. It's kind of pity that the Win32forth discussion groups lacking such kind of professional guy like you to join. I seldom join the discussion but still I can get the new information from there. I strongly urge you to subscribe win32forth discussion forum so as you can get the newly updated files from ARMForth groups by killing two birds with one stone. For now I just send you the newly updated file combined into one file to you so as you and the others don't have to find a way around.  And  here you have to go throw the following  procedures to expand the memory of the application memory.  Tell me if you've succeeded. ****      before floading this file, we have to prepare the followings....\ with-img fsave Win32for    <-- modifying this line to the next line. ( in extend.f line 185 )  with-img fsave F.exe       \   thanks Cheng-Hong Chen  2010.1.1  methods to extend memory size    win32for              \ enter win32for.4.2.671  sys                   \ enter dos  win32for  fload meta    setsize   bye    \ adding 29Meg byte to application, 9Meg byte to system  fkernel   fload extend\ fsave     f.exe       \ save f.exe as a working horse. put it on the desktop. also copy WinIo.dll, WinIo.sys, WINIO.VXD to the directory the same as Win32Forth.exe.**** fload punyforth148.f       words'  <-- you'll see the dis-compiled+dis-assembled  list   ubernew147.forth combines uber.forth and decompiler that I added. 

在 2018年9月23日 星期日 上午7:11:51 [GMT+8], Peter Forth<peter4th2017@gmail.com> 寫道:  

Hi Mr Chang !

Thanks for your suggestion.  I will try out a bit more in the future to test  your add ons for Punyforth.

It seems to be very interesting tough !

I would like to participate  from your  YAhoo Forum, but I can not enter.  Sory for that.

I was thinking is it not possible, you translate this forum to another platform ?

Kind regards Peter

On Thu, Sep 20, 2018 at 11:39 AM, chang luke holinepu@yahoo.com.tw wrote:

Hi Peter Forth   Thank you for giving me the opportinuity to introduce the esp8266 punyForth development system as you already knew.

I like very much Punyforth.,    I started punyForth development system a year ago. I almost completed the decompiler that under punyforth, unfortunately it was not very stable.Only very recently I was invoked by forthers in Taiwan then I started the development of the whole system again.

I triyed to enter YAHOO Group using your link, I could not.  It seems I must register first... It's a big problem for almost members of figtaiwan. I couldn't help. Maybe I can send you by email or so.Or you can join the the conversation on GitHub with the search  " request for memory map of punyforth #35 " to know more about it.

Yes, I would like to use Flash external storage to load files to Punyforth.> Did you write any external Flash extension for Punyforth ?   One of my problems, with Punyforth, was the lack of program  memory.   You can load the source code from external device and compile it into RAM, but with limited RAM you hardly can extend your program easily. It is 24k byte of RAM to render your code.  Whereas with the esp8266 punyforth development system we can cooperate punyforth itself with cross-compiler of the development system to attain the maximum flash memory to use as the code space.  As for flash external storage I haven't consider it yet.

I said this  to Attila.  Regrettable I do not have Attilas Email.> I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication.   I prefer  Email, or Facebook. He replied me recently on GitHub, but he didn't mention how to expand the code to flash memory. Instead he asked for the source code of the development system.Frankly speaking I prefer every forther can design the development system in a short period of time so as to showoff other language users to say how easy forth is. I can also send you my program if you like, that talks from Win32forth to Nodemcu> it is not finished, it is an open program , more as "concept" to show what can> be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth. I failed to try VisualForth before, as it is not an urgent event for me. But when it comes that it can combine punyforth with win32forth/VisualForth, I'll be interest in it.Come on, give me one!

It is a good combination for teachers of technology school.I'll say that the development system can be the best teaching material for all grade of school system. Believe it not!? You'll see the development system you've never seen before, see list file for sure!

By the way, you've been using win32forth ( verion 6.15.03 ) intensively. It'll be easy for you to read the program of esp8266 punyforth development system. That way you'll find the main part of it in a glance, I hope so.I insist using win32forth 4.2.67x version for all my design. It's quit stable, whileas other not. Or do you interest in porting the program from 4.2.67x to 6.15.03.

    Best regard                               holi   ( Luke Chang ) FLOAD  punyforth146.f       cls    words'   \  you'll the decompiled+disassembled list of esp8266 punyforth with decompiler in it.h1  cls words'     \ h0 cls words'    <-- to see the difference.om  cls words'  see whatever you want. see drop   see  wifi-station-connect  \ ** ** *  \ ** ** *  \  4021889C  40218888  \  402188A0  14 77 69 66 69 2D 73 74 61 74 69 6F 6E 2D 63 6F 6E 6E 65 63 74  \ ------------------------------ ------------------------------ -------------------                                   code  wifi-station-connect  (  402188B8  4023A6DC          )  (  4023A6DC  12 C1 E4          )                     R1-1C  (  4023A6DF  09 61             )                  (R1+18)=R0  (  4023A6E1  89 41             )                  (R1+10)=R8  (  4023A6E3  D9 31             )                  (R1+0C)=RD  (  4023A6E5  E9 21             )                  (R1+8)=RE  (  4023A6E7  F2 61 01          )                  (R1+4)=RF  (  4023A6EA  10 11 20          )                     R1oR1  (  4023A6ED  05 36 D9          )                  call_40213A50  (  4023A6F0  F8 11             )                  RF=(R1+4)  (  4023A6F2  E8 21             )                  RE=(R1+8)  (  4023A6F4  D8 31             )                  RD=(R1+0C)  (  4023A6F6  88 41             )                  R8=(R1+10)  (  4023A6F8  08 61             )                  R0=(R1+18)  (  4023A6FA  12 C1 1C          )                     R1+1C  (  4023A6FD  F2 CF FC 29 0F    )                  {dup<R2}  (  4023A702  88 0E             )                  R8=(RE)  (  4023A704  4B EE             )                     RE+4  (  4023A706  98 08             )                  R9=(R8)  (  4023A708  A0 09 00          )                  jmp_R9

Please do flash it into esp8266 right now!   by visiting:https://groups.yahoo.com/neo/ groups/armForth/files/esp8266% 20punyForth/

You can download it from your mobile phone. I can. ============================== ============================== ============================== ============Hi Chang luke !  , holinepu@yahoo.com.tw(this email of yours was given to me  kindly from Wesley Fig Taiwan) Nice to meet you and thanks for your kind words on my video ! I like very much Punyforth.,   I triyed to enter YAHOO Group using yourlink, I could not.  It seems I must register first... Yes, I would like to use Flash external storage to load files to Punyforth.Attila sayd he did one or the other thing, but I could not run his examples...(this was over 1 year ago) I do not know how is it now. Did you write any external Flash extension for Punyforth ?   One of my problems, with Punyforth, was the lack ofprogram  memory. I said this  to Attila.  Regrettable I do not have Attilas Email.I only chatted 1 or 2 times with him over Github, but I do not like this kind ofcommunication.   I prefer  Email, or Facebook. I am on the Win32forth user group on Facebook also, if you whish send me your friend request.  I like to use Messanger also of FB. I can also send you my program if you like, that talks from Win32forth to Nodemcuit is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) andESP8266 Punyforth.  Alltogether.  I think the Sky is the limit.It is a good combination for teachers of technology school. Anything you need I am at your disposal. Sincerely Peter

( I am also setting up a web page with things I learn here and there, or thingsI would like others  know and have a smoother start in Win32forth. Also  a book and PDF collection, and videos as you already know ).https://sites.google.com/view/ win32forth/

在 2018年9月20日 星期四 上午8:00:59 [GMT+8], Peter Forth<peter4th2017@gmail.com> 寫道:  

Hi Chang luke !  , holinepu@yahoo.com.tw   (this email of yours was given to me  kindly from Wesley Fig Taiwan)

Nice to meet you and thanks for your kind words on my video !

I like very much Punyforth.,   I triyed to enter YAHOO Group using your link, I could not.  It seems I must register first... 

Yes, I would like to use Flash external storage to load files to Punyforth. Attila sayd he did one or the other thing, but I could not run his examples... (this was over 1 year ago) I do not know how is it now.

Did you write any external Flash extension for Punyforth ?   One of my problems, with Punyforth, was the lack of program  memory. I sayd this  to Attila.  Regrettable I do not have Attilas Email. I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication.   I prefer  Email, or Facebook.

I am on the Win32forth user group on Facebook also, if you whish send me your friend request.  I like to use Messanger also of FB.

I can also send you my program if you like, that talks from Win32forth to Nodemcu it is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth.  Alltogether.  I think the Sky is the limit. It is a good combination for teachers of technology school.

Anything you need I am at your disposal.

Sincerely Peter

( I am also setting up a web page with things I learn here and there, or things I would like others  know and have a smoother start in Win32forth. Also  a book and PDF collection, and videos as you already know ). https://sites.google.com/view/ win32forth/

| | 不含病毒。www.avast.com |

holinepu commented 5 years ago

hi,  Gentlemen        I've been trying to make the code in RAM area to burn into flash ROM area. It is very successful now.  The main tricky program to do this is this:  :  modify(3FFE88C0~heap-400)  ( a -- n )     >r     r@      heap-start  ( 3ffe88a0 )  20  +    heap-end  400  -   between     r@*  @   heap-end    400  -                    heap-end             between  not  and     r@  @   ` 3ffe0000                             heap-start           between  not  and      r@  @   ffff0000   and  heap-end  ffff0000  and  ( 3ffe0000 ) =             and       if      r>*   @       402XXXXX-3FFE88C0   @   +   exit      then    r>*   @    ;  The attached file 40260000.forth is the main dis-compiler program. You can burn 40260000.forth and either one of the two .bin file to the flash ROM, 4026_171.bin / 4026_4026596c.bin.  Upon power on, we can execute words or  words7 to see the dictionary structure. Try to find the lfa of the last word in flash ROM   and executing it by:   4026b2f4   heap-start  32  +  !    Then we can execute the following words along to see what's going on.   words    forget  interpret?   words    see see                                                                                                                                                                                                                                 4026B2F0 org'  402182C8 |||| 4026B2C0 |||| 3230340C |||| 30303036 |||| \  ..!@..&@.4026000     4026B300 org'  6E652E30 |||| 00000064 |||| 40239B2C |||| 402182C8 |||| \  0.end...,.#@..!@     4026B310 org'  FFFFFFFF |||| FFFFFFFF |||| FFFFFFFF |||| FFFFFFFF |||| \  ................ We still have problems relating to wifi.  It needs your help. Best   regards                                                                                                        holi ( Luke ) 在 2018年9月29日 星期六 下午10:13:16 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

Owing to the fact that the compiled code, i.e. 40260000.bin has been written into flash rom, There is no need to write the source text file ( ubernew163.forth ) into the flash rom to be compiled after reset or power on.  Instead we can write ( burn ) the simpler source text file ( ram163.forth ) into the flash rom, so as to connect the lfa of the last word in flash with the lfa of first.program.in.ram. 由於編譯過的程式碼  40260000.bin 已燒入 flash ROM內   所以不需再燒入原始程式 ubernew163.forth    改燒入 ram163.forth 以連接 flash rom 最後一個的 lfa 到 first.program.in.ram 的 lfa                                              : first.program.in.ram ;1076289860  1073645760  !   \ it needs at least 3 lines of text    4026E144     hex: ffff  and  hex: 40260000    or  heap-start  20  +  !\ ( 4026E144 )   1076289860           heap-start  32  +  !\ ( 4026E144 )   lastword.in.flash           ` 3ffe88c0  !\       3ffe88c0 is lfa of first.program.in.ram == lastword.s     words     words7      see see  ...... 在 2018年9月29日 星期六 下午12:11:10 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

寄件者: chang luke holinepu@yahoo.com.tw收件者: Peter Forth peter4th2017@gmail.com寄件時間: 2018年9月29日 星期六 上午11:46:25 [GMT+8]主旨: Re: Punyforth and Win32forth , etc hi, Peter Forth and all the others       I have some experience in ASYST which use OVERLAY a lot. I still keep one at hand. Frankly speaking I didn't use it very well at that time. Maybe I'll recall that again.>  So the technical word, to define your work is you have created  an "OVERLAY capability to PunyForth" ! If it has enough RAM space then we don't have to have OVERLAY to switch between different applications. Still if we can get the OVERLAY capability that would be better. It is better to have than nothing, right? The attached file temp.rar is for wifi and that sort of things. It works fine. I tried to compile ubernew163.forth into it. It was not very stable, so I switch to the other version ( older ? ) temp1.rar  and  ran dis-compiler in punyforth very successfully. I urge you guys to try this version out first to identify with our endeavor.  Ok!?                             Best  regard                                                 Be Forth with you                             holi  ( luke )

as for cross-compiler development system can still be used in cooperative with punyforth. under win32for  ( 4.2.67x )        fload  punyforth163.f      see  words    cls  words'     see  /mod  \ ***  \  40218190  40218184  \  40218194  04 2F 6D 6F 64  \ -------------------------------------------------------------------------------                                   code  /mod  (  4021819C  402398BC          )  (  402398BC  38 0F 4B FF       )                  {drop>R3}  (  402398C0  28 0F 4B FF       )                  {drop>R2}  (  402398C4  12 C1 E4          )                     R1-1C  (  402398C7  09 61             )                  (R1+18)=R0  (  402398C9  89 41             )                  (R1+10)=R8  (  402398CB  D9 31             )                  (R1+0C)=RD  (  402398CD  E9 21             )                  (R1+8)=RE  (  402398CF  F2 61 01          )                  (R1+4)=RF  (  402398D2  01 F9 FF          )                  R0=40101168                 \ ( 402398B8 )= 40101168  (  402398D5  C0 00 00          )                  callx0_R0  (  402398D8  F8 11             )                  RF=(R1+4)  (  402398DA  E8 21             )                  RE=(R1+8)  (  402398DC  D8 31             )                  RD=(R1+0C)  (  402398DE  88 41             )                  R8=(R1+10)  (  402398E0  08 61             )                  R0=(R1+18)  (  402398E2  12 C1 1C          )                     R1+1C  (  402398E5  F2 CF FC 39 0F    )                  {dup<R3}  (  402398EA  F2 CF FC 29 0F    )                  {dup<R2}  (  402398EF  88 0E             )                  R8=(RE)  (  402398F1  4B EE             )                     RE+4  (  402398F3  98 08             )                  R9=(R8)  (  402398F5  A0 09 00          )                  jmp_R9 在 2018年9月29日 星期六 上午5:40:13 [GMT+8], Peter Forthpeter4th2017@gmail.com 寫道:

Thanks, I'll check it out.

When I used to program in LMI for DOS   those kind of files that were binaries pre-compiled, were called    --  OVERLAYS  --.(other Forths also named this kind of binaries Overlays, and some other compilers too, I think Turbo C and Turbo Pascal, had that possiblity too, I do not remember well)

So the technical word, to define your work is you have created  an "OVERLAY capability to PunyForth" !

We used this to store the EDITOR, the ASSEMBLER the Native code compiler, and any TOOL that could be used for a task, and then when the task was complete, was not necessary anymore to have it on RAM, this was very useful because RAM was limited to 64K. (The other secondary use was for distribution of software  tools, without giving a third party access to your full source. )

Thanks again

Peter

On Fri, Sep 28, 2018 at 12:50 PM chang luke holinepu@yahoo.com.tw wrote:

hi,       The compiled code in RAM area can now be moved to flash ROM by executing   402688c0  >flash.  And after executing      forget   backref,   we can add new program into fresh RAM and later move to another address in flash ROM, say, 40260000  >flash.  We can link it to the previous one and so on.           good luck!                   holi 在 2018年9月23日 星期日 下午5:01:08 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

Hi  Peter Forth !     It seems like that you didn't join the win32forth groups before. It's kind of pity that the Win32forth discussion groups lacking such kind of professional guy like you to join. I seldom join the discussion but still I can get the new information from there. I strongly urge you to subscribe win32forth discussion forum so as you can get the newly updated files from ARMForth groups by killing two birds with one stone. For now I just send you the newly updated file combined into one file to you so as you and the others don't have to find a way around.  And  here you have to go throw the following  procedures to expand the memory of the application memory.  Tell me if you've succeeded. ****      before floading this file, we have to prepare the followings....\ with-img fsave Win32for    <-- modifying this line to the next line. ( in extend.f line 185 )  with-img fsave F.exe       \   thanks Cheng-Hong Chen  2010.1.1  methods to extend memory size    win32for              \ enter win32for.4.2.671  sys                   \ enter dos  win32for  fload meta    setsize   bye    \ adding 29Meg byte to application, 9Meg byte to system  fkernel   fload extend\ fsave     f.exe       \ save f.exe as a working horse. put it on the desktop. also copy WinIo.dll, WinIo.sys, WINIO.VXD to the directory the same as Win32Forth.exe.**** fload punyforth148.f       words'  <-- you'll see the dis-compiled+dis-assembled  list   ubernew147.forth combines uber.forth and decompiler that I added. 

在 2018年9月23日 星期日 上午7:11:51 [GMT+8], Peter Forth<peter4th2017@gmail.com> 寫道:  

Hi Mr Chang !

Thanks for your suggestion.  I will try out a bit more in the future to test  your add ons for Punyforth.

It seems to be very interesting tough !

I would like to participate  from your  YAhoo Forum, but I can not enter.  Sory for that.

I was thinking is it not possible, you translate this forum to another platform ?

Kind regards Peter

On Thu, Sep 20, 2018 at 11:39 AM, chang luke holinepu@yahoo.com.tw wrote:

Hi Peter Forth   Thank you for giving me the opportinuity to introduce the esp8266 punyForth development system as you already knew.

I like very much Punyforth.,    I started punyForth development system a year ago. I almost completed the decompiler that under punyforth, unfortunately it was not very stable.Only very recently I was invoked by forthers in Taiwan then I started the development of the whole system again.

I triyed to enter YAHOO Group using your link, I could not.  It seems I must register first... It's a big problem for almost members of figtaiwan. I couldn't help. Maybe I can send you by email or so.Or you can join the the conversation on GitHub with the search  " request for memory map of punyforth #35 " to know more about it.

Yes, I would like to use Flash external storage to load files to Punyforth.> Did you write any external Flash extension for Punyforth ?   One of my problems, with Punyforth, was the lack of program  memory.   You can load the source code from external device and compile it into RAM, but with limited RAM you hardly can extend your program easily. It is 24k byte of RAM to render your code.  Whereas with the esp8266 punyforth development system we can cooperate punyforth itself with cross-compiler of the development system to attain the maximum flash memory to use as the code space.  As for flash external storage I haven't consider it yet.

I said this  to Attila.  Regrettable I do not have Attilas Email.> I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication.   I prefer  Email, or Facebook. He replied me recently on GitHub, but he didn't mention how to expand the code to flash memory. Instead he asked for the source code of the development system.Frankly speaking I prefer every forther can design the development system in a short period of time so as to showoff other language users to say how easy forth is. I can also send you my program if you like, that talks from Win32forth to Nodemcu> it is not finished, it is an open program , more as "concept" to show what can> be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth. I failed to try VisualForth before, as it is not an urgent event for me. But when it comes that it can combine punyforth with win32forth/VisualForth, I'll be interest in it.Come on, give me one!

It is a good combination for teachers of technology school.I'll say that the development system can be the best teaching material for all grade of school system. Believe it not!? You'll see the development system you've never seen before, see list file for sure!

By the way, you've been using win32forth ( verion 6.15.03 ) intensively. It'll be easy for you to read the program of esp8266 punyforth development system. That way you'll find the main part of it in a glance, I hope so.I insist using win32forth 4.2.67x version for all my design. It's quit stable, whileas other not. Or do you interest in porting the program from 4.2.67x to 6.15.03.

    Best regard                               holi   ( Luke Chang ) FLOAD  punyforth146.f       cls    words'   \  you'll the decompiled+disassembled list of esp8266 punyforth with decompiler in it.h1  cls words'     \ h0 cls words'    <-- to see the difference.om  cls words'  see whatever you want. see drop   see  wifi-station-connect  \ ** ** *  \ ** ** *  \  4021889C  40218888  \  402188A0  14 77 69 66 69 2D 73 74 61 74 69 6F 6E 2D 63 6F 6E 6E 65 63 74  \ ------------------------------ ------------------------------ -------------------                                   code  wifi-station-connect  (  402188B8  4023A6DC          )  (  4023A6DC  12 C1 E4          )                     R1-1C  (  4023A6DF  09 61             )                  (R1+18)=R0  (  4023A6E1  89 41             )                  (R1+10)=R8  (  4023A6E3  D9 31             )                  (R1+0C)=RD  (  4023A6E5  E9 21             )                  (R1+8)=RE  (  4023A6E7  F2 61 01          )                  (R1+4)=RF  (  4023A6EA  10 11 20          )                     R1oR1  (  4023A6ED  05 36 D9          )                  call_40213A50  (  4023A6F0  F8 11             )                  RF=(R1+4)  (  4023A6F2  E8 21             )                  RE=(R1+8)  (  4023A6F4  D8 31             )                  RD=(R1+0C)  (  4023A6F6  88 41             )                  R8=(R1+10)  (  4023A6F8  08 61             )                  R0=(R1+18)  (  4023A6FA  12 C1 1C          )                     R1+1C  (  4023A6FD  F2 CF FC 29 0F    )                  {dup<R2}  (  4023A702  88 0E             )                  R8=(RE)  (  4023A704  4B EE             )                     RE+4  (  4023A706  98 08             )                  R9=(R8)  (  4023A708  A0 09 00          )                  jmp_R9

Please do flash it into esp8266 right now!   by visiting:https://groups.yahoo.com/neo/ groups/armForth/files/esp8266% 20punyForth/

You can download it from your mobile phone. I can. ============================== ============================== ============================== ============Hi Chang luke !  , holinepu@yahoo.com.tw(this email of yours was given to me  kindly from Wesley Fig Taiwan) Nice to meet you and thanks for your kind words on my video ! I like very much Punyforth.,   I triyed to enter YAHOO Group using yourlink, I could not.  It seems I must register first... Yes, I would like to use Flash external storage to load files to Punyforth.Attila sayd he did one or the other thing, but I could not run his examples...(this was over 1 year ago) I do not know how is it now. Did you write any external Flash extension for Punyforth ?   One of my problems, with Punyforth, was the lack ofprogram  memory. I said this  to Attila.  Regrettable I do not have Attilas Email.I only chatted 1 or 2 times with him over Github, but I do not like this kind ofcommunication.   I prefer  Email, or Facebook. I am on the Win32forth user group on Facebook also, if you whish send me your friend request.  I like to use Messanger also of FB. I can also send you my program if you like, that talks from Win32forth to Nodemcuit is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) andESP8266 Punyforth.  Alltogether.  I think the Sky is the limit.It is a good combination for teachers of technology school. Anything you need I am at your disposal. Sincerely Peter

( I am also setting up a web page with things I learn here and there, or thingsI would like others  know and have a smoother start in Win32forth. Also  a book and PDF collection, and videos as you already know ).https://sites.google.com/view/ win32forth/

在 2018年9月20日 星期四 上午8:00:59 [GMT+8], Peter Forth<peter4th2017@gmail.com> 寫道:  

Hi Chang luke !  , holinepu@yahoo.com.tw   (this email of yours was given to me  kindly from Wesley Fig Taiwan)

Nice to meet you and thanks for your kind words on my video !

I like very much Punyforth.,   I triyed to enter YAHOO Group using your link, I could not.  It seems I must register first... 

Yes, I would like to use Flash external storage to load files to Punyforth. Attila sayd he did one or the other thing, but I could not run his examples... (this was over 1 year ago) I do not know how is it now.

Did you write any external Flash extension for Punyforth ?   One of my problems, with Punyforth, was the lack of program  memory. I sayd this  to Attila.  Regrettable I do not have Attilas Email. I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication.   I prefer  Email, or Facebook.

I am on the Win32forth user group on Facebook also, if you whish send me your friend request.  I like to use Messanger also of FB.

I can also send you my program if you like, that talks from Win32forth to Nodemcu it is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth.  Alltogether.  I think the Sky is the limit. It is a good combination for teachers of technology school.

Anything you need I am at your disposal.

Sincerely Peter

( I am also setting up a web page with things I learn here and there, or things I would like others  know and have a smoother start in Win32forth. Also  a book and PDF collection, and videos as you already know ). https://sites.google.com/view/ win32forth/

| | 不含病毒。www.avast.com |

holinepu commented 5 years ago

Thanks, I'll check it out.

On Thu, Oct 4, 2018 at 10:39 AM chang luke holinepu@yahoo.com.tw wrote:

hi, Gentlemen I've been trying to make the code in RAM area to burn into flash ROM area. It is very successful now. The main tricky program to do this is this: : modify(3FFE88C0~heap-400) ( a -- n )

r r@ heap-start ( 3ffe88a0 ) 20 + heap-end 400 - between r@* @ heap-end 400 - heap-end between not and r@* @ ` 3ffe0000 heap-start between not and

 r@*  @   ` ffff0000   and  heap-end  ` ffff0000  and  ( ` 3ffe0000 )

= and

 if      r>*   @       402XXXXX-3FFE88C0   @   +   exit

 then    r>*   @    ;

The attached file 40260000.forth is the main dis-compiler program. You can burn 40260000.forth and either one of the two .bin file to the flash ROM, 4026_171.bin / 4026_4026596c.bin. Upon power on, we can execute words or words7 to see the dictionary structure. Try to find the lfa of the last word in flash ROM and executing it by: ` 4026b2f4 heap-start 32 + ! Then we can execute the following words along to see what's going on. words forget interpret? words see see

                                         4026B2F0 org'  402182C8 ||||

4026B2C0 |||| 3230340C |||| 30303036 |||| \ ..!@..&@.4026000 4026B300 org' 6E652E30 |||| 00000064 |||| 40239B2C |||| 402182C8 |||| \ 0.end...,.#@..!@ 4026B310 org' FFFFFFFF |||| FFFFFFFF |||| FFFFFFFF |||| FFFFFFFF |||| \ ................

We still have problems relating to wifi. It needs your help. Best regards holi ( Luke )

在 2018年9月29日 星期六 下午10:13:16 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

Owing to the fact that the compiled code, i.e. 40260000.bin has been written into flash rom, There is no need to write the source text file ( ubernew163.forth ) into the flash rom to be compiled after reset or power on. Instead we can write ( burn ) the simpler source text file ( ram163.forth ) into the flash rom, so as to connect the lfa of the last word in flash with the lfa of first.program.in.ram.

由於編譯過的程式碼 40260000.bin 已燒入 flash ROM內 所以不需再燒入原始程式 ubernew163.forth 改燒入 ram163.forth 以連接 flash rom 最後一個的 lfa 到 first.program.in.ram 的 lfa

: first.program.in.ram ; 1076289860 1073645760 ! \ it needs at least 3 lines of text 4026E144 hex: ffff and hex: 40260000 or heap-start 20

  • ! \ ( 4026E144 ) 1076289860 heap-start 32 + ! \ ( 4026E144 ) lastword.in.flash ` 3ffe88c0 ! \ 3ffe88c0 is lfa of first.program.in.ram == lastword .s words words7 see see ......

在 2018年9月29日 星期六 下午12:11:10 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

寄件者: chang luke holinepu@yahoo.com.tw 收件者: Peter Forth peter4th2017@gmail.com 寄件時間: 2018年9月29日 星期六 上午11:46:25 [GMT+8] 主旨: Re: Punyforth and Win32forth , etc

hi, Peter Forth and all the others I have some experience in ASYST which use OVERLAY a lot. I still keep one at hand. Frankly speaking I didn't use it very well at that time. Maybe I'll recall that again.

So the technical word, to define your work is you have created an "OVERLAY capability to PunyForth" ! If it has enough RAM space then we don't have to have OVERLAY to switch between different applications. Still if we can get the OVERLAY capability that would be better. It is better to have than nothing, right?

The attached file temp.rar is for wifi and that sort of things. It works fine. I tried to compile ubernew163.forth into it. It was not very stable, so I switch to the other version ( older ? ) temp1.rar and ran dis-compiler in punyforth very successfully. I urge you guys to try this version out first to identify with our endeavor. Ok!?

Best regard Be Forth with you holi ( luke )

as for cross-compiler development system can still be used in cooperative with punyforth. under win32for ( 4.2.67x ) fload punyforth163.f see words cls words'

see /mod \


\ 40218190 40218184 \ 40218194 04 2F 6D 6F 64 \

                               code  /mod

( 4021819C 402398BC ) ( 402398BC 38 0F 4B FF ) {drop>R3} ( 402398C0 28 0F 4B FF ) {drop>R2} ( 402398C4 12 C1 E4 ) R1-1C ( 402398C7 09 61 ) (R1+18)=R0 ( 402398C9 89 41 ) (R1+10)=R8 ( 402398CB D9 31 ) (R1+0C)=RD ( 402398CD E9 21 ) (R1+8)=RE ( 402398CF F2 61 01 ) (R1+4)=RF ( 402398D2 01 F9 FF ) R0=40101168 \ ( 402398B8 )= 40101168 ( 402398D5 C0 00 00 ) callx0_R0 ( 402398D8 F8 11 ) RF=(R1+4) ( 402398DA E8 21 ) RE=(R1+8) ( 402398DC D8 31 ) RD=(R1+0C) ( 402398DE 88 41 ) R8=(R1+10) ( 402398E0 08 61 ) R0=(R1+18) ( 402398E2 12 C1 1C ) R1+1C ( 402398E5 F2 CF FC 39 0F ) {dup<R3} ( 402398EA F2 CF FC 29 0F ) {dup<R2} ( 402398EF 88 0E ) R8=(RE) ( 402398F1 4B EE ) RE+4 ( 402398F3 98 08 ) R9=(R8) ( 402398F5 A0 09 00 ) jmp_R9

在 2018年9月29日 星期六 上午5:40:13 [GMT+8], Peter Forthpeter4th2017@gmail.com 寫道:

Thanks, I'll check it out.

When I used to program in LMI for DOS those kind of files that were binaries pre-compiled, were called -- OVERLAYS --.(other Forths also named this kind of binaries Overlays, and some other compilers too, I think Turbo C and Turbo Pascal, had that possiblity too, I do not remember well)

So the technical word, to define your work is you have created an "OVERLAY capability to PunyForth" !

We used this to store the EDITOR, the ASSEMBLER the Native code compiler, and any TOOL that could be used for a task, and then when the task was complete, was not necessary anymore to have it on RAM, this was very useful because RAM was limited to 64K. (The other secondary use was for distribution of software tools, without giving a third party access to your full source. )

Thanks again

Peter

On Fri, Sep 28, 2018 at 12:50 PM chang luke holinepu@yahoo.com.tw wrote:

hi, The compiled code in RAM area can now be moved to flash ROM by executing 402688c0 >flash. And after executing forget backref, we can add new program into fresh RAM and later move to another address in flash ROM, say, 40260000

flash. We can link it to the previous one and so on. good luck! holi

在 2018年9月23日 星期日 下午5:01:08 [GMT+8], chang lukeholinepu@yahoo.com.tw 寫道:

Hi Peter Forth ! It seems like that you didn't join the win32forth groups before. It's kind of pity that the Win32forth discussion groups lacking such kind of professional guy like you to join. I seldom join the discussion but still I can get the new information from there. I strongly urge you to subscribe win32forth discussion forum so as you can get the newly updated files from ARMForth groups by killing two birds with one stone. For now I just send you the newly updated file combined into one file to you so as you and the others don't have to find a way around. And here you have to go throw the following procedures to expand the memory of the application memory. Tell me if you've succeeded.


  before floading this file, we have to prepare the followings....

\ with-img fsave Win32for <-- modifying this line to the next line. ( in extend.f line 185 ) with-img fsave F.exe \ thanks Cheng-Hong Chen 2010.1.1 methods to extend memory size win32for \ enter win32for.4.2.671 sys \ enter dos win32for fload meta setsize bye \ adding 29Meg byte to application, 9Meg byte to system fkernel fload extend \ fsave f.exe \ save f.exe as a working horse. put it on the desktop.

also copy WinIo.dll, WinIo.sys, WINIO.VXD to the directory the same as Win32Forth.exe.


fload punyforth148.f words' <-- you'll see the dis-compiled+dis-assembled list

ubernew147.forth combines uber.forth and decompiler that I added.

在 2018年9月23日 星期日 上午7:11:51 [GMT+8], Peter Forthpeter4th2017@gmail.com 寫道:

Hi Mr Chang !

Thanks for your suggestion. I will try out a bit more in the future to test your add ons for Punyforth.

It seems to be very interesting tough !

I would like to participate from your YAhoo Forum, but I can not enter. Sory for that.

I was thinking is it not possible, you translate this forum to another platform ?

Kind regards Peter

On Thu, Sep 20, 2018 at 11:39 AM, chang luke holinepu@yahoo.com.tw wrote:

Hi Peter Forth Thank you for giving me the opportinuity to introduce the esp8266 punyForth development system as you already knew.

I like very much Punyforth.,

I started punyForth development system a year ago. I almost completed the decompiler that under punyforth, unfortunately it was not very stable. Only very recently I was invoked by forthers in Taiwan then I started the development of the whole system again.

I triyed to enter YAHOO Group using your link, I could not. It seems I must register first...

It's a big problem for almost members of figtaiwan. I couldn't help. Maybe I can send you by email or so. Or you can join the the conversation on GitHub with the search " request for memory map of punyforth #35 " to know more about it.

Yes, I would like to use Flash external storage to load files to Punyforth. Did you write any external Flash extension for Punyforth ? One of my problems, with Punyforth, was the lack of program memory.

You can load the source code from external device and compile it into RAM, but with limited RAM you hardly can extend your program easily. It is 24k byte of RAM to render your code. Whereas with the esp8266 punyforth development system we can cooperate punyforth itself with cross-compiler of the development system to attain the maximum flash memory to use as the code space. As for flash external storage I haven't consider it yet.

I said this to Attila. Regrettable I do not have Attilas Email. I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication. I prefer Email, or Facebook.

He replied me recently on GitHub, but he didn't mention how to expand the code to flash memory. Instead he asked for the source code of the development system. Frankly speaking I prefer every forther can design the development system in a short period of time so as to showoff other language users to say how easy forth is.

I can also send you my program if you like, that talks from Win32forth to Nodemcu it is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth.

I failed to try VisualForth before, as it is not an urgent event for me. But when it comes that it can combine punyforth with win32forth/VisualForth, I'll be interest in it. Come on, give me one!

It is a good combination for teachers of technology school. I'll say that the development system can be the best teaching material for all grade of school system. Believe it not!? You'll see the development system you've never seen before, see list file for sure!

By the way, you've been using win32forth ( verion 6.15.03 ) intensively. It'll be easy for you to read the program of esp8266 punyforth development system. That way you'll find the main part of it in a glance, I hope so. I insist using win32forth 4.2.67x version for all my design. It's quit stable, whileas other not. Or do you interest in porting the program from 4.2.67x to 6.15.03.

Best regard                               holi   ( Luke Chang )

FLOAD punyforth146.f cls words' \ you'll the decompiled+disassembled list of esp8266 punyforth with decompiler in it. h1 cls words' \ h0 cls words' <-- to see the difference. om cls words' see whatever you want.

see drop

see wifi-station-connect \ ** **


\ ** **


\ 4021889C 40218888 \ 402188A0 14 77 69 66 69 2D 73 74 61 74 69 6F 6E 2D 63 6F 6E 6E 65 63 74 \ ------------------------------ ------------------------------

                               code  wifi-station-connect

( 402188B8 4023A6DC ) ( 4023A6DC 12 C1 E4 ) R1-1C ( 4023A6DF 09 61 ) (R1+18)=R0 ( 4023A6E1 89 41 ) (R1+10)=R8 ( 4023A6E3 D9 31 ) (R1+0C)=RD ( 4023A6E5 E9 21 ) (R1+8)=RE ( 4023A6E7 F2 61 01 ) (R1+4)=RF ( 4023A6EA 10 11 20 ) R1oR1 ( 4023A6ED 05 36 D9 ) call_40213A50 ( 4023A6F0 F8 11 ) RF=(R1+4) ( 4023A6F2 E8 21 ) RE=(R1+8) ( 4023A6F4 D8 31 ) RD=(R1+0C) ( 4023A6F6 88 41 ) R8=(R1+10) ( 4023A6F8 08 61 ) R0=(R1+18) ( 4023A6FA 12 C1 1C ) R1+1C ( 4023A6FD F2 CF FC 29 0F ) {dup<R2} ( 4023A702 88 0E ) R8=(RE) ( 4023A704 4B EE ) RE+4 ( 4023A706 98 08 ) R9=(R8) ( 4023A708 A0 09 00 ) jmp_R9

Please do flash it into esp8266 right now! by visiting: https://groups.yahoo.com/neo/ groups/armForth/files/esp8266% 20punyForth/ https://groups.yahoo.com/neo/groups/armForth/files/esp8266%20punyForth/

You can download it from your mobile phone. I can.

============================== ============================== ============================== ============ Hi Chang luke ! , holinepu@yahoo.com.tw (this email of yours was given to me kindly from Wesley Fig Taiwan)

Nice to meet you and thanks for your kind words on my video !

I like very much Punyforth., I triyed to enter YAHOO Group using your link, I could not. It seems I must register first...

Yes, I would like to use Flash external storage to load files to Punyforth. Attila sayd he did one or the other thing, but I could not run his examples... (this was over 1 year ago) I do not know how is it now.

Did you write any external Flash extension for Punyforth ? One of my problems, with Punyforth, was the lack of program memory. I said this to Attila. Regrettable I do not have Attilas Email. I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication. I prefer Email, or Facebook.

I am on the Win32forth user group on Facebook also, if you whish send me your friend request. I like to use Messanger also of FB.

I can also send you my program if you like, that talks from Win32forth to Nodemcu it is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth. Alltogether. I think the Sky is the limit. It is a good combination for teachers of technology school.

Anything you need I am at your disposal.

Sincerely Peter

( I am also setting up a web page with things I learn here and there, or things I would like others know and have a smoother start in Win32forth. Also a book and PDF collection, and videos as you already know ). https://sites.google.com/view/ win32forth/ https://sites.google.com/view/win32forth/

在 2018年9月20日 星期四 上午8:00:59 [GMT+8], Peter Forthpeter4th2017@gmail.com 寫道:

Hi Chang luke ! , holinepu@yahoo.com.tw (this email of yours was given to me kindly from Wesley Fig Taiwan)

Nice to meet you and thanks for your kind words on my video !

I like very much Punyforth., I triyed to enter YAHOO Group using your link, I could not. It seems I must register first...

Yes, I would like to use Flash external storage to load files to Punyforth. Attila sayd he did one or the other thing, but I could not run his examples... (this was over 1 year ago) I do not know how is it now.

Did you write any external Flash extension for Punyforth ? One of my problems, with Punyforth, was the lack of program memory. I sayd this to Attila. Regrettable I do not have Attilas Email. I only chatted 1 or 2 times with him over Github, but I do not like this kind of communication. I prefer Email, or Facebook.

I am on the Win32forth user group on Facebook also, if you whish send me your friend request. I like to use Messanger also of FB.

I can also send you my program if you like, that talks from Win32forth to Nodemcu it is not finished, it is an open program , more as "concept" to show what can be done using Win32forth + VisualFOrth (making the screens and graphics) and ESP8266 Punyforth. Alltogether. I think the Sky is the limit. It is a good combination for teachers of technology school.

Anything you need I am at your disposal.

Sincerely Peter

( I am also setting up a web page with things I learn here and there, or things I would like others know and have a smoother start in Win32forth. Also a book and PDF collection, and videos as you already know ). https://sites.google.com/view/ win32forth/ https://sites.google.com/view/win32forth/

https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail 不含病毒。www.avast.com https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail <#m_7378016665510906950m-7286426077625611475m-3475691769936199722_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

holinepu commented 5 years ago

hi, I've completed the function of transfering the code compiled in ram area to the flash Rom area. It is quite easy to use it to extend the program now. I've already send you the pf.rar file, see if you could try it out, please tell me if you succeed. Best regard holi

holinepu commented 5 years ago

hi, everybody         The attached file is the complete source file for developing RISC-V RV32I, RV32M aiming to mecrispForth. Hope this does help to the progress of the development.                                                                 holi

holinepu commented 5 years ago

讚!