Hello Tristan,
Tristan Williams writes: > Hello, > > I would like to modify my AVR build of AmForth to read/write a byte > from a known fixed EEPROM address, perhaps from applturnkey. This byte > may be written outside of AmForth. Is there a safe area of EEPROM > from which to do this or a way making one? Any pointers as to where to > look appreciated. Words like "eallot" "Evalue" "e@" "e!" and the like are available, let's see ... | @e | ./avr8/words/fetch-e.asm | !e | ./avr8/words/store-e.asm | ehere | ./avr8/words/ehere.asm | eallot | ./avr8/lib/eallot.frt | Evalue | ./avr8/lib/forth2012/core/avr-values.frt | 2@e 2!e 2Evalue | ./avr8/lib/2evalue.frt | Eallot Ebuffer | ./avr8/lib/forth2012/core/eeprom-buffer.frt So I think, creating an Evalue could help you. There is some more text here http://amforth.sourceforge.net/TG/recipes/Values.html You can then wrap such stuff together with applturnkey (example): > : run-turnkey > applturnkey \ call the original turnkey first > > init \ add one time stuff here > > starttasker \ start the loop! > ; However, if you want to modify AmForth to be assembled with this value already, then avr8/amforth-eeprom.inc is the place to start. Add another label and value in this file, verify that ehere points to the correct (first empty) location after assembling, and be sure to add a word, which will retrieve this EEprom content and place it on the stack. Well, I have done this before ... /me searches the archives ... in a project-local copy of amforth-eeprom.inc I added 2 lines to define a location in eeprom > EE_UBRRVAL: > .dw UBRR_VAL ; BAUDRATE > +EE_PROMPT_RDY: > + .dw XT_PROMPTREADY_INT This label (EE_PROMPT_RDY) is used in a word defined in asm: > cat words/prompt-ready.asm > ; make prompt_ready a deferred word > > VE_PROMPTREADY: > .dw $ff04 > .db "p_rd" > .dw VE_HEAD > .set VE_HEAD = VE_PROMPTREADY > XT_PROMPTREADY: > .dw PFA_DODEFER1 > PFA_PROMPTREADY: > .dw EE_PROMPT_RDY ; <---- used here > .dw XT_EDEFERFETCH > .dw XT_EDEFERSTORE The content of this location is retrieved (edefer@) and should be on top of the stack then (it is consumed again by edefer! in this case.) The defined "p_rd" is used in Forth code later: : +stationid ['] prompt_rd to p_rd ; : init +stationid ... ; In this particular case I made the ready prompt to be a deferred word, because I wanted it to print some information (the stationID). Nowadays all prompt functions are deferred and I don't need to do this any more. But it should give you an idea on how to proceed. There is one more option: the Evalue can live in an external i2c EEPROM, too. See http://amforth.sourceforge.net/TG/recipes/I2C-Values.html#i2c-values So many options! Hope this helps, Erich -- May the Forth be with you ... _______________________________________________ Amforth-devel mailing list for http://amforth.sf.net/ Amforth-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amforth-devel