# jewelforth its a subroutine threaded forth for linux x86\_64. mostly made for personal stuff. if you use it and it breaks, too bad public domain ## dictionary the dictionary follows a fairly standard format. | field | size | forth name | | :---- | :--- | :--------- | | link to previous | 8 bytes | LFA (link field address) | | flag | 1 byte | FFA (flag field address) | | string length | 2 bytes | NFA (name field address) | | string | variable length | still NFA | | code | variable length | CFA (code field address) | ## the one reserved register the working stack pointer is `r14`. the other registers are used as general purpose registers; `r11` in particular is the standard register used in compiling calls. ## miscellaneous notes and stuff ### COMPILE, this is an STC forth so when we compile a call we have to write the bytes of a `call` in manually. x86\_64 does not allow absolute jumps from an immediate address, so a wonky but hopefully not too slow solution is to compile `literal address → W` and then `call W`. It'll Be Fine? - `mov r11, [cfa]` = `94 BB [CFA]` - `call r11` = `41 FF D3` ### Some Links - starting forth part 1: http://www.bradrodriguez.com/papers/moving1.htm ## silly little plans ### in-forth assembler this would reap the most benefits from STC. probably look at dusk's assemblers for how it should look like or liek something liek dusk's lib/bm? idk something to do stuff Fast if u need. would be fun