colorful rat Ratfactor.com > Dave's Repos

nasmjf

A NASM assembler port of JONESFORTH
git clone http://ratfactor.com/repos/nasmjf/nasmjf.git

nasmjf/devlog/log25.txt

Download raw file: devlog/log25.txt

1 Okay, I guess I lied. I'm back sooner than I thought. 2 3 In addition to cleaning up, I've made a much-needed 4 improvement. I now load _all_ of jonesforth.f upon 5 start, so there's no need for the line limit. So I'm 6 properly checking for EOF while reading that file and 7 closing it. 8 9 It takes a lot of lines of assembly to produce a nice 10 error message. See the label ".loadjf_open_fail" in 11 nasmjf.asm for the listing. (It's not complicated, just 12 long.) 13 14 Here's how it looks: 15 16 $ nasmjf/nasmjf 17 ERROR Could not open 'jonesforth/jonesforth.f'. 18 19 But it still runs fine from the nasmjf/ dir: 20 21 $ cd nasmjf 22 $ ./nasmjf 23 JONESFORTH VERSION 48 24 20643 CELLS REMAINING 25 OK 26 27 And I really love being able to run the test suite to 28 make sure I haven't messed anything up! 29 30 $ ./test.sh 31 Testing: jonesforth/test_assembler.f 32 Testing: jonesforth/test_comparison.f 33 Testing: jonesforth/test_exception.f 34 Testing: jonesforth/test_number.f 35 Testing: jonesforth/test_read_file.f 36 Testing: jonesforth/test_stack.f 37 Testing: jonesforth/test_stack_trace.f 38 39 In theory, my Forth source reading mechanism could be 40 used _within_ Forth to load source files on the fly. I 41 think I'll leave that as an "exercise for the reader" as 42 they say. :-) 43 44 I've started inserting comments in the source to explain 45 how stuff works. I don't want to duplicate Jones's 46 explanations too much. 47 48 It's helpful to refresh my own understanding. I've 49 understood each part separately, but it's easy to lose 50 the forest for the trees because the way Forth works is 51 so gosh darned clever. Like, painfully clever. 52 53 I also finally tried something I've wanted to try for a 54 while: using one of NASM's excellent macro features to 55 perform a string length count so I can get rid of the 56 hard-coded name lengths. It turned out to be super easy: 57 58 %strlen namelen %1 59 60 I've converted a couple macros. DEFCODE and DEFWORD are 61 the big ones. I'll do them next. 62 63 I think I would also like to swap the order of the label 64 and flag parameters on these macros to make them 65 prettier to look at... 66 67 Two nights later: done! That was a royal pain, but 68 between sed on the command line piping to intermediate 69 files and then some simpler find/replace in Vim, I 70 managed to automate 99% of it. 71 72 And another night: added way more comments. I'm glad I 73 didn't put too much work into them when i first started 74 because I undertand it so much better now. 75 76 Also renamed 'r' script to 'build.sh' to make it clearer 77 what it is. Also added a test option to the script for a 78 total of four ways to play: 79 80 # Usage: 81 # 82 # build.sh Assemble, link 83 # build.sh gdb Assemble, link, and debug 84 # build.sh test Assemble, link, and test 85 # build.sh run Assemble, link, and run 86 87 Always good to keep honing the dev environment to keep 88 fast iterations as painless as possible. 89 90 Later: more comments in. Making steady progress. Now 91 trying to figure out if I should arrange the word 92 definitions in an attempt to explain them, or just put 93 all the code words at the front and all the regular 94 words at the end? 95 96 Several more nights later: Done! It may not be perfect 97 and perhaps I'll come back with more explanations and 98 check over all of my comments again. But I'm calling 99 this thing complete for now. 100 101 I hope it was fun following along. 102 103 Happy hacking! 104 105 -Dave