Re: Problems/solutions with ftables
David P Harris <[email protected]> Mon, 11 Oct 2004 10:51:04 -0700
| Newsgroups | gmane.comp.lang.forth.picforth |
|---|---|
| Message-ID | <[email protected]> |
David- For a proper solution to ables going over a page boundary, have a look at the code provided by the PICLIST contributors at http://www.piclist.com/techref/microchip/memory.htm Then you con have tables anywhere and larger than 256 bytes. Also, it would be nice to define a Build routine that would let you make your strings in the source code in readable form. David David McNab wrote: > Hi, > > Just a few quick observations: > > 1. I've noticed that program-memory tables, created with > ftable...end-table, only work if all the data in the table resides in > the first 256 bytes of program memory. The ADDWF PCL,F trick used for > indexing the table seems to set PCH to $00, regardless of the current IP. > > 2. If file1.fs includes file2.fs, and file2.fs contains an > ftable..end-table construct, subsequent includes from file1.fs fail. > > 3. libstrings.fs doesn't work. Specifically, str-char is always > returning $01. I've used exactly the code from the doco for > 'c".."'/'str-char'. No good. > > Anyway, here's what I've done to work around these issues: > > I'm working on a program that does lots of user interaction via > buttons and LCD, and requires several strings to be stored. So I've > chosen to put them in program memory. > > What I've had to do is write a utility that automatically converts a > file containing something like: > > fred = "hello, world" > mary = "smaller" > jim = "blah" > > into: > > ftable mystrings > $68 t, $65 t, $6c t, $6c t, $6f t, $2c t, $20 t, $77 t, > $6f t, $72 t, $6c t, $64 t, 0 t, $62 t, $6c t, $61 t, > $68 t, 0 t, $73 t, $6d t, $61 t, $6c t, $6c t, $65 t, > $72 t, 0 t, > end-table > $0 constant fred > $d constant jim > $12 constant mary > > Here, 'fred', 'jim' and 'mary' are offsets into this table, pointing > to the start of null-terminated strings. > > This allows any chosen offset to be passed to a loop, hardcoded to use > 'mystrings', which indexes this table and invokes a callback for each > char in the string. > > Finally, I've arrived at a way to enter strings in human-readable > format, have them automatically translated to table decs, such that I > can do stuff like: > > lcd-line1 fred lcd-put-string > lcd-line2 mary lcd-put-string > > And as long as I ensure that the whole table is residing in first 256 > bytes, all is ok. What's really great about ftable is that it takes > advantage of the RETLW instruction, so that there is zero overhead for > each string (apart from its null-terminator). > > (Makes me wonder if i should hack up an encoder to store 2 7-bit ASCII > chars in each machine word). > > All this said, I find that overall, PicForth is a god-send for my PIC > project. Between it and gpsim, I'm in PIC Hacking Heaven, especially > after weaning myself off the insulting PICAXE BASIC environment. So > thank you, Samuel, for a master-work! :)) > I really hope you find the inspiration to keep going on it. >