00:00:00 --- log: started forth/06.02.27 00:20:29 --- quit: madwork (Read error: 104 (Connection reset by peer)) 00:39:21 --- join: madwork (n=foo@derby.metrics.com) joined #forth 00:44:57 --- join: rehges (n=segher@blueice3n1.de.ibm.com) joined #forth 00:53:06 --- join: neceve (n=Clau@unaffiliated/neceve) joined #forth 01:14:36 --- quit: PoppaVic ("brb") 01:16:20 --- join: PoppaVic (n=pete@0-2pool236-108.nas22.chicago4.il.us.da.qwest.net) joined #forth 02:06:23 --- quit: madwork (Read error: 104 (Connection reset by peer)) 02:08:59 --- join: madwork (n=foo@derby.metrics.com) joined #forth 02:29:52 --- join: ravenEx (i=ravenEx@87.252.224.211) joined #forth 03:15:35 --- quit: PoppaVic ("Pulls the pin...") 03:23:28 --- join: nballen (n=nballen@ppp-69-239-137-85.dsl.renocs.pacbell.net) joined #forth 04:28:10 ping 04:28:15 and hi 04:30:45 pong! 04:30:54 --- quit: nballen () 04:31:29 how's life? 04:33:16 good and yours? 04:41:53 --- quit: rehges () 04:45:40 pretty good 04:45:43 getting better 04:46:00 been waking up feeling a bit crummy lately 04:46:11 but I think I figured out why. 04:46:30 I'll have a humidifier in a couple days, and see if that helps 04:47:27 Make sure to clean it regularly, they build up horrible substances on the evaporator coil. 04:48:34 coil? 04:49:12 Heating element. 04:49:27 I prefer plants 04:49:40 oh, I don't expect it to have a heater 04:50:29 We have hard water here, so the cold-air ultrasonic humidifiers leave a mineral deposit all over the place. 04:50:32 I want the kind that has that little buzzer in th bottom 04:50:55 I find they do a second-rate job of humidifying, but your mileage may vary. 04:51:20 I haven't had a problem with them 04:52:48 I prefer them to the ones that blow air through big wic/filters because they are quieter and I don't have to buy and dispose of filters 04:53:58 having a big enough mass of plants in here would be very cool 04:54:21 but I think it would take a lot 04:54:39 I don't get much sun 04:57:01 so you are living in a dark room? 05:11:33 no, just dim 05:11:50 two windows. the larger gets no direct sun 05:12:34 the other faces a bit north of east with a huge overhang 05:13:00 so it gets a little slanty early morning sun which I very rarely see (but the plants are awake for) 05:22:22 well, then you should choose a plant which doesn't need much light. 05:29:31 A dead one. 05:37:30 --- quit: madwork ("?OUT OF DATA ERROR") 05:38:01 --- join: madwork (n=foo@derby.metrics.com) joined #forth 06:01:07 --- join: nballen (n=nballen@ppp-69-239-137-85.dsl.renocs.pacbell.net) joined #forth 06:03:52 hehe 06:04:19 yeah, I've got a good ivy that grows fast and doesn't need too much light (although it tends to get lanky with less light of course) 06:04:22 but it's still very small 06:04:28 I'm growing it though :) 06:06:38 "Ivy" from the Netherlands, eh? 06:08:26 --- join: Topaz (n=top@sown-96.ecs.soton.ac.uk) joined #forth 06:12:02 --- quit: nballen () 06:12:47 --- quit: ravenEx (Read error: 145 (Connection timed out)) 06:37:18 --- join: _crc (i=crc@pool-70-110-170-190.phil.east.verizon.net) joined #forth 06:37:18 --- quit: crc (Read error: 104 (Connection reset by peer)) 06:42:43 --- join: rsyncx (i=nobody@CPE000c41aac435-CM00111ae4f4cc.cpe.net.cable.rogers.com) joined #forth 06:59:14 weird... this cerial says on the box "they're habbit forming" 06:59:45 addictive cereal! watch out everybody! 06:59:54 :)# 07:00:06 oh, wait, it habitat not habbit 07:00:08 nm 07:05:03 Habitat-forming? 07:07:16 --- quit: Cheery ("Leaving") 07:11:40 there are things living in your cereal? 07:14:00 * virl remembers the 'hell discussion' of yesterday 07:18:37 You mean the bizarro-extremist stuff? 07:19:13 yes, somehow it was crazy, wasn't it? 07:19:19 --- quit: uiuiuiu (Remote closed the connection) 07:19:23 --- join: uiuiuiu (i=ian@dslb-084-056-248-101.pools.arcor-ip.net) joined #forth 07:21:17 he was an interesting extremist, at some points in the discussion I asked myself if he is a troll or something like that. 07:22:06 I think my cereal is thuroughly dead. 07:24:46 History suggests Austrian extremists should be carefully avoided. 07:31:11 I was just reading through the history 07:31:19 "FUG U" has a nice ring to it ;) 07:31:40 bob: where do you go to school? 07:31:51 bif: FUG U 07:33:11 bob: sheesh, calm down Mr. Happy Pants, I was just making conversation. 07:38:13 JasonWoof, lol 07:39:52 Quartus, well, normaly they go to other countries. 07:59:03 it's unfortunate when people anywhere become that disalusioned with people 07:59:25 sure, there's people out there that rub you the wrong way 07:59:35 but there's plenty of cool people too 08:10:30 --- quit: Topaz ("Leaving") 08:25:27 I wish it was easier to find people irl that wanted to do cool programming projects 08:25:51 I have a few local friends that sometimes make cool web-based things 08:26:03 but I want to get together and write real software 08:26:10 make a game or something 08:27:28 maybe there aren't many people like tha 08:27:28 t 08:27:33 or maybe they just don't get out much 08:36:03 --- nick: _crc -> crc 08:36:06 --- mode: ChanServ set +o crc 08:46:14 JasonWoof, I know what you mean, I feel the same. 08:47:50 I also don't talk about computers in public too much -- people just complain at you about how much software sucks, or ask you to fix their computer. 08:49:51 --- join: thinkinginbinary (n=tom@phoenix.thomastuttle.mooo.com) joined #forth 08:49:54 Quartus: hey 08:50:20 Quartus: /me wants a 16-bit CPU, or at least an 8-bit one with more than one register so I can use a pair of registers for indirect addressing. :-\ 08:50:48 JasonWoof, which game would you like to code? 08:51:34 Quartus: The 16-bit PIC's are awesome. 16 general-purpose (well, 10, if you *never* use the ones that have special purposes) registers, which can be addressed as REG, [REG], [++REG], [--REG], [REG++], [REG--], [REG+literal], or [REG1+REG2]. 08:52:03 Quartus: *And* you can map part of ROM into the top (not physically implemented) half of RAM, eliminating the "program or data space?" problem. 08:52:29 Hey. 08:52:40 Sounds interesting. 08:53:04 They're *much* more flexible. 08:54:00 You should be able to get off the ground with either kind, though. 08:54:04 Manipulating 16-bit addresses on an 8-bit CPU when an absolute move between two RAM locations takes 2 cycles of 4 clocks each and indirect addressing requires using a special RAM location as the index is annoying. 08:54:29 Quartus: Oh, I can do it on the 8-bit one. But it's horrible. Their orthogonal instruction set has gone completely to hell, since they kept adding stuff to it in hackish ways. 08:55:04 Well, once you've got Forth up, you can largely forget the CPU! 08:55:07 ;-) 08:56:42 Do you think I should allow threads (as opposed to machine code) to be stored in ROM? A lot of words ought not to be machine code (and would benefit from not having to worry about the stupid return stack issues), but right now, threads are in RAM, period. Should I make a second NEXT that does ROM, or should I make the program load a RAM image? 08:57:21 tathi: hehe :) 08:57:42 I'm not sure it'd work to have a second NEXT, as you'd have to have some way to differentiate between return addresses, and the whole thing would grow hair. 08:57:45 virl: vor, meissa 08:57:56 virl: I want to start with something simple 08:58:11 virl: I want to develop so we have a playable game as soon as possible, and add to it as we go 08:58:34 eg with meissa we very quickly got it so you could steer your ship around 08:58:55 and that made it more fun. even though we didn't have important bits like code that wouldn't let you go off the edge of the screen 08:59:13 JasonWoof, currently I'm porting the game ambassador of pain to retroforth, which is a simple game. 08:59:14 heh :) in fact we did networking before making you stay on the screen 08:59:19 thinkinginbinary, perhaps for pre-compiled threaded words in the kernel, you could automatically convert them to native code. 08:59:32 virl: I'm not farmilliar with that game. one sec 09:01:24 Quartus: return stack issues? I'll try it. 09:01:35 What will you try? 09:01:43 Quartus: precompiling 09:02:23 Ah yes. That's what I do in the Quartus Forth build environment. Not that Quartus Forth is threaded, but I can write quasi-Forth in the kernel sources and it builds directly to native code. 09:02:50 Since it's built into the kernel, it makes rather more sense for it to be optimized than to have it as slower threads. 09:02:52 Quartus: Is QF totally compiled to machine code? 09:02:55 Yes. 09:03:11 fast. 09:03:21 As fast as I can make it without heavy optimization logic. 09:03:49 right 09:03:54 man I like linux. 09:03:59 hey, you should write an optimizing thread (i.e., parallel task, not series of addresses) that runs in the background, optimizing code when there's idle CPU time. 09:04:01 or portage anyway 09:04:07 It would kill batteries, but hey... 09:04:07 just installed and played aop 09:04:11 JasonWoof: Portage is cool. 09:04:45 tathi: I really like wearing my tux tshirt 09:05:04 JasonWoof: I have a tux shirt too. It's cool. 09:05:08 I get compliments from people who know who it is and people who don't 09:05:20 lol 09:05:24 thinkinginbinary, the Palm OS doesn't work quite that way. 09:05:29 Neither does Forth, actually. :) 09:05:35 it's a better computer geek detecter than my "free the mallocs" tshirt 09:05:40 Quartus: Right, right... it's all execute-in-place-ey and stuff. 09:05:48 JasonWoof: That one's cool. 09:06:11 thinkinginbinary: yes, it's cool, but people always ask me "who are the mallocs?" 09:06:20 annoying. 09:06:29 yep 09:06:41 I have the "10 types of people" one, and my bio teacher in 8th grade asked "So the other 9 don't understand binary?" lol 09:06:43 home ~$ aop 09:06:43 Sucker! (4337578 points) 09:07:06 hehe :) 09:07:49 I like that one. I want to find a page to put that on in my documentation somewhere 09:14:47 your documentation? 09:18:16 man, aop gets hard 09:18:20 for my forth 09:19:54 there's a good enough place as any: http://jasonwoof.org/herkforth_assembler 09:27:57 gn8 folks ;-) 09:28:09 --- quit: virl (Remote closed the connection) 09:31:51 --- join: nballen (n=nballen@ppp-69-239-137-85.dsl.renocs.pacbell.net) joined #forth 09:37:08 --- join: airbrush (i=airbrush@216-237-213-202-access-r30-ad.northstate.net) joined #forth 09:43:58 Quartus: Is it reasonable to build a metacompiler-type thing that doesn't have a full FORTH implementation, i.e. one that just parses strings of tokens? 09:44:59 I guess so. Not the way I'd do it, but sure. 09:45:30 Quartus: I figured ;-) 09:45:43 Seems like a lot of work. For something simple like you're doing, I'd use a macro preprocessor. 09:45:50 Quartus: Yeah, my assembler has one. 09:45:59 Well, yes, but I'd use a real one. M4 probably. 09:50:42 So you'd have an internal routine, say DUP, and the header macro for that would generate a macro named DUP, which would expand to an inline assembler call to the routine. 09:54:40 Quartus: So basically, DUP = macro that does "call address_of_DUP"? 09:55:03 Right. Internal to the kernel sources, obviously. 09:55:29 Or, if DUP is a short sequence that is better inlined, define it as the required sequence of instructions. 09:55:44 I have more flash than I'll ever need. 09:55:48 (for now) 09:55:54 Inlining is primarily for speed. 09:56:21 Speed = good. 09:57:08 In Quartus Forth I automatically inline any kernel sequence that is as short or shorter than a call to the same routine would be, but also inline a few that are slightly longer, again for spee.d 09:57:25 BTW, I realized that *one* of the indirect addressing registers on the PIC allows "literal indexed addressing", like (the reg is called FSR2) mov [FSR2+3], [FSR2+4]. I made it the data stack. Quite useful for stack manipulation. 09:57:38 Quartus: Given the kludginess of most routines, the subroutine call is negligible ;-) 09:58:23 If you build your kernel with a macro-preprocessor from the beginning, you'll be able to modify your initial conditions, register choices, etc. and rebuild with relative ease. 10:00:55 Quartus: But the addressing on the PIC is so quirky that macros can't handle it. (Changing registers changes what I'm allowed to do. Indirect registers *other* than FSR2 *can't* do literal indexed addressing, so I'll have to rewrite all the stack code.) 10:01:45 Sure, I'm not suggesting that you change register choices independent of any other considerations. But initially abstracting all your stack operators into macros means you could change them all at once, if you wanted to. 10:01:58 Quartus: Oh, the *stack* operators. 10:02:13 Or anything else. TOS caching register. Pointers to memory segments. What-have-you. 10:02:33 Quartus: ok. 10:02:44 Do you know a good M4 tutorial? 10:03:02 The last time I needed one was years ago; there were some on the web, but I'd have to search to find'em. 10:04:24 The manual is pretty good. 10:04:31 I agree. 10:07:58 What's a good naming convention for the macro name vs. the subroutine name? (i.e., "foo-sub" is a subroutine that simply does "foo-macro" and returns.) 10:09:17 I keep the macro name the actual name of the routine, within the constraints of what m4 allows, so the source reads reasonably normally. 10:09:39 That's whether the macro expands to a call, or to inline code. 10:10:03 So DUP is DUP no matter whether it becomes "call DUPcode" or becomes another sequence of instructions. 10:10:30 Can you give an example? If dup was a macro, it would be like: define(`dup', `(asm)'), and if it were code it would be dup: (asm)\ndefine(`dup', `call `dup'')? 10:11:36 I think you have it, more or less. I let a header() macro automatically do the defining of all the macros for non-inlined words. 10:12:23 So it's like header(name, code)? 10:12:28 No... 10:12:34 header(name,other stuff) 10:12:36 code 10:12:37 code 10:12:38 etc. 10:12:53 Quartus: other stuff = ? 10:13:03 Quartus: What's it do other than create the label? 10:14:03 Depends on how you're building your Forth. I specify the flags for each word, and also an optional name if the true name of the word doesn't meet the m4 and assembler requirements for a name. 10:14:24 My header() macro also builds the word's actual header in the headerspace image. 10:14:31 Ah. 10:15:04 It makes for a tidy kernel. Consider that you might write: 10:15:09 header(NIP) 10:15:17 SWAP DROP EXIT 10:15:37 Just an example, of course -- NIP is probably best handled differently, but you get the idea. 10:16:29 But depending on how SWAP DROP and EXIT are defined, that will generate the required sequence of inlined assembler and subroutine calls. 10:16:40 Ooh... in my Forth, EXIT would be different for native code and threaded code. 10:16:49 Sure. So use the appropriate macro. 10:18:02 For native code, it's "return" (built in to the end of the routine). For threaded code, it's a call to EXIT, which pops from the return stack into IP. 10:18:08 Ok. 10:19:27 So... header(NIP) SWAP DROP return 10:20:54 It's not a full Forth, obviously, no immediacy, etc., but it serves well enough for you to write large parts of your kernel in near-Forth, or mixed Forth and assembler. 10:22:45 Well, mixed near-Forth and assembler. :) 10:35:05 --- join: snoopy_1711 (i=snoopy_1@dslb-084-058-142-140.pools.arcor-ip.net) joined #forth 10:38:57 Quartus: How do you deal with separating dictionary entries from code in your macro system? 10:39:06 Quartus: (If header generates dictionary entries as well.) 10:39:19 I shunt them off into another stream using m4 and pick them up later. 10:39:57 Using divert. 10:40:05 So your inline routines are just done using define? 10:40:25 Or do you have a special macro that creates a real subroutine for them as well? 10:40:31 That (divert) is necessary, in my system; maybe your assembler would allow you to have multiple spaces and switch between them, I can't say. 10:40:53 Quartus: I'd rather use divert for a cleaner output file. 10:41:03 I do them effectively as a define, and then use that macro in an actual word definition. 10:41:10 I need a header anyway, so it's easy. 10:41:39 So like define(`DUP', `(asm)') header(`DUP') DUP EXIT? 10:42:07 DUP return in your system, I'd think. And I don't believe you need to quote DUP. 10:42:17 Oh. 10:42:33 Also I redefine the quote and comment characters so I don't go insane with ` and ', which are possibly the worst choices possible. 10:42:44 To what? 10:43:01 changequote({,}) works for me. 10:43:03 (Personally I've always disliked the GNUish tendency to use ` and ', which aren't symmetrical.) 10:43:20 --- quit: Snoopy42 (Read error: 145 (Connection timed out)) 10:43:20 --- nick: snoopy_1711 -> Snoopy42 10:43:54 wtf, vim syntax highlighting doesn't understand changequote 10:44:18 I think syntax highlighting is for the birds. 10:44:22 Pfft. 10:44:24 I like it. 10:44:33 Sure, right up until it trips over something it shouldn't. 10:44:35 heh, the vicious editor bites again!!!!1 10:44:36 Although it annoys me when it makes text too dark. 10:44:41 airbrush: emacs sucks. 10:44:46 airbrush: Let's just get this overwith. 10:44:49 agreed 10:44:55 airbrush: lol, what do you use? 10:45:04 emacs and vim both suxor 10:45:07 notepad 10:45:10 airbrush: I like vim. 10:45:14 airbrush: Windows suxx0rs more. 10:45:18 * airbrush stick tounge in cheek 10:46:14 Quartus: I assume you name your m4 files foo.m4, and they process to foo.asm? 10:47:04 Something like that. You can use whatever extensions suit you. 10:48:29 thinkinginbinary, actually I use Kate the most ... 10:56:08 I got lucky on some forth books at the library sale saturday 10:56:51 Quartus: m4's telling me "EOF in string" without a filename. 11:00:52 Quartus: If I define header as {$1:\n}, and then define DUP as a bunch of ASM, doing header({DUP}) doesn't work. How is the quoting supposed to go? 11:01:27 Quartus: Do I have to double-quote the word name? 11:01:49 Quartus: (That works, but it's ugly.) 11:02:02 Let me check. 11:02:07 Quartus: ok thanks 11:02:55 Try defining header as {{$1:\n}} 11:03:00 Quartus: Ok. 11:03:22 What you're doing isn't quite what I'm doing, so I'm guessing rather than trying to duplicate your code here. 11:03:27 Quartus: Works. 11:04:06 Quartus: Okay, what about tabs. I get two tabs before when I have DROP defined as "\t\n" and NIP defined as SWAP DROP 11:04:09 Quartus: Do I just ignore the ugly? 11:04:25 Yes. Don't expect the generated code to be gorgeous. 11:04:31 Quartus: ok 11:04:47 You might want to set up a macro-generator to do all that \t and \n for you, clean things up. 11:04:58 Quartus: Perl! 11:05:07 No. I mean an m4 macro that generates another m4 macro. 11:05:09 Quartus: I should write a script that adds cycle counts. 11:05:15 Huh? How? 11:05:29 Nothing stops a macro from calling define(). 11:05:33 True. 11:05:44 But how does that equate to a tab and newline filter? 11:05:47 So you'd make, say, inline(DUP,line1 11:05:48 line2 11:05:51 line3) 11:05:59 and inline would generate the required macro. 11:06:00 Oh! 11:06:24 So your kernel source is just directives and code. 11:08:03 Perhaps you see why I prefer m4 to the macro language built into the assembler. :) 11:08:05 --- quit: tathi ("leaving") 11:08:06 Oh!Yeah. 11:08:11 Whoops. 11:08:13 Hit PgUp first. 11:09:29 I assume macros can't start with numbers? 11:10:09 True. 11:10:26 Quartus: How do I do literals? 11:10:35 hmm? 11:10:46 oh. I define push(). 11:10:52 Like how would I make a macro that generates asm for (literal) 23? 11:10:54 ok 11:11:24 Quartus: Stupid PIC's. On this it will take 4 instructions simply to push a literal. (move low byte to W, move W to PSP--) x 2 for two bytes. 11:16:17 So it goes. 11:27:30 --- quit: thinkinginbinary (Read error: 60 (Operation timed out)) 11:58:30 --- join: thinkinginbinary (n=tom@phoenix.thomastuttle.mooo.com) joined #forth 11:58:40 Quartus: Sorry about that. Unplanned downtime. 11:58:50 Quartus: I just made my 16-bit add and subtract much shorter. 11:59:25 Quartus: From 12 instructions to 7 (counting neither call nor return). 12:06:23 Quartus: Hmm... If I can fit all the important variables in this thing into 256 bytes (stack, temp stuff, etc...) I can use RAM banking to implement task switching. 12:08:22 Ok. 12:10:08 Quartus: I assume variable names and addresses (absolute RAM addresses) should be done as equ's in the asm so they show up in program listings and such? 12:11:38 That's how I would do it. 12:11:44 Ok. Good. 12:12:05 There are a few judgement calls about where to use m4, and where to rely on the assembler. It's usually an obvious choice. 12:12:17 BTW, m4 is working out nicely. 12:12:27 It's a useful tool. 12:12:34 Modifying my code for it has also given me the chance to optimize and beautify a few ugly pieces of code. 12:12:39 --- quit: crc () 12:13:13 Quartus: I assume, since it's recursive, NEXT should not be a macro? 12:13:22 Recursive? 12:13:29 Quartus: It jumps back to itself. 12:13:34 You mean it loops. 12:13:34 Quartus: That's impossible with a macro, no? 12:13:37 Quartus: Yeah. 12:13:46 Quartus: Well technically it's recursive on a software (return) stack. 12:13:56 I wouldn't reproduce the NEXT loop over and over throughout my kernel, no. 12:13:56 --- part: airbrush left #forth 12:14:00 Quartus: ok 12:14:41 And it's not impossible with a macro, you could generate an incremental label each time. But I still wouldn't do it. 12:14:53 Quartus: That would be like ugly^2. 12:15:01 But possible. 12:15:05 Quartus: Or rather UGLY @ 2 ^ 12:16:12 Quartus: I like the idea of task-switching using RAM banks. It's really easy. 12:16:28 Ok. 12:16:39 Quartus: Of course, that brings up the issue of which banks hold task data and which hold other (name, code, data) stuff. 12:17:10 Build something that works, factor it until you can adjust parameters without having to revisit the entire kernel, and then experiment. 12:17:35 That's my method. 12:18:00 Quartus: Right now I can. All addresses are just arbitrary. Task variables are in the "current" RAM page, and code and data are accessed using absolute addresses. So I can just decide, I'll use these banks for tasks, and switch to them, and I'll use those banks for data, and use their addresses for code 'n' stuff. 12:18:17 I leave the architectural details to you. 12:18:30 * thinkinginbinary could learn to like hacking 8-bit assembly. 12:21:03 I'm sure it'll be mildly annoying when it comes time to build compliant arithmetic words. 12:21:09 Yeah. 12:25:24 Alright, my next is about 18 instructions. 12:25:31 I would kill for more than 1 working register. 12:26:37 --- join: Invifer4 (i=WINNT@12-208-98-237.client.insightBB.com) joined #forth 12:26:46 Why so long? 12:27:18 Quartus: Given two memory locations A and B, I must do "movf A,W" and then "movwf B" to do what on a normal system would be "mov B,A" (or A,B). 12:27:29 Quartus: It would be much shorter with better addressing and more registers. 12:28:56 Ah. 12:32:20 Alright, I oughta go to bed. 12:32:23 Thanks for the help. 12:32:25 Sure. 12:32:30 --- quit: thinkinginbinary ("leaving") 12:37:13 --- join: crc (i=crc@pool-70-16-153-73.phil.east.verizon.net) joined #forth 12:37:33 --- mode: ChanServ set +o crc 12:53:08 --- join: thinkinginbinary (n=tom@phoenix.thomastuttle.mooo.com) joined #forth 12:53:34 Quartus: Hey, I just figured out how to get around all this 8-bit addressing stuff -- all I need is a new voc and semantic! 12:53:46 Quartus: Speaking of random gibberish, where has PoppaVic been? 12:59:56 He's around daily. 13:00:41 Ah. Enlightening the masses, is he? 13:02:06 Masses of what, I cannot say. 13:02:13 Hahaha. 13:05:04 Quartus: Do you use m4 or assembler comments? (; or #) 13:06:10 I redefined the m4 comment as // and I use that when I want to be sure m4 won't see the text. 13:06:39 In my case, ; was the assembler comment character. 13:06:55 Quartus: I'm saying, if I want to comment my asm code, should I use comments that show up in the resulting asm file, or use m4 comments because nobody will ever see the m4-created asm file. 13:07:15 Yeah, I wouldn't spend too much time worrying about how beautiful the generated temporary file is. 13:13:04 Quartus: So, I figured out a decent way to deal with the limited number of indirect addressing registers (3). Two are permanently assigned to the stack pointers. The third, which would like to be IP all the time, is governed by a bit named fsr0_is_ip (the register's called fsr0). When NEXT loads IP into FSR0, it sets that bit. When NEXT calls a native code routine, it saves FSR0, and, when it returns, if fsr0_is_ip is cleared, it re 13:14:34 it re 13:15:01 ...? 13:15:43 got cut off 13:15:49 " it saves FSR0, and, when it returns, if fsr0_is_ip is cleared, it re" 13:16:21 what's the quickest way to get a tags file for forth source? 13:18:41 um, "...it reloads it. Then, any routine that uses FSR0 for *other* indirect addressing (for example, accessing the input buffer) will simply clear it (a quick, one-cycle operation, compared with saving and restoring it each time it's used--at least 8 cycles.) 13:19:12 Quartus: How can I say if($1 > 255) then insert "foo" else insert "bar" in m4? 13:20:40 ifelse is your friend. 13:20:48 Quartus: ah 13:21:05 Quartus: "...a true relation returns `1'" is what I needed to know. 13:22:05 eval is the other part of the equation. 13:27:01 There. Now my literal macro substitutes a 1-cycle "clrf" for a two cycle "movlw LITERAL;movwf" when the byte is 0. 13:29:49 And now it uses "setf" if the value is 255. 13:30:06 I like this. I can implement optimizations in macros ;-) 13:30:42 I can optimize with a layer of indirection between me and my code, so if it goes awry, I can just replace the macro with an unoptimized version, no strings attached. 13:31:14 Anyway, g'nite. 13:31:43 --- quit: thinkinginbinary ("leaving") 13:46:19 --- quit: neceve ("Bye people, I'm leaving") 13:54:12 please tell me I'm not the only one that wants to be able to ^] to the definition of words... 13:57:05 You're the only one. 14:13:13 oh well 14:13:27 I decided to hack the gentags.pl from herkforth 14:13:40 seems to be working now 14:56:11 ok, gforth cgi stuff came a good ways today 14:56:19 and I don't want to think about it anymore for the moment 14:56:33 Yet you CANNOT STOP. 14:56:38 THINK! THINK! THINK! 15:00:58 heh 15:01:09 yeah 15:01:11 I tried to stop 15:01:22 but then I fiddled with the tags generator for a long time 15:02:14 I'm getting to have enough code that I frequently need to refer to definitions in other files 15:19:34 Not just the glossaries? 15:52:42 --- quit: nballen () 19:07:22 --- join: _crc (i=crc@pool-70-16-153-73.phil.east.verizon.net) joined #forth 19:07:44 --- quit: crc (Read error: 104 (Connection reset by peer)) 19:49:16 --- join: Cheery (i=Henri@a81-197-45-47.elisa-laajakaista.fi) joined #forth 20:07:51 Quartus: glossaries? I've not been writing glossaries. 20:07:57 --- quit: JasonWoof ("off to bed") 20:09:52 --- join: Topaz (i=jonny@wlan-201.ecs.soton.ac.uk) joined #forth 20:58:31 --- quit: Topaz ("Leaving") 21:17:31 --- join: Topaz (n=top@sown-96.ecs.soton.ac.uk) joined #forth 22:03:01 --- join: neceve (n=Clau@unaffiliated/neceve) joined #forth 22:17:01 --- join: PoppaVic (n=pete@0-1pool67-198.nas22.chicago4.il.us.da.qwest.net) joined #forth 22:58:08 --- quit: ccfg ("leaving") 23:48:55 --- join: ravenEx (i=ravenEx@VPN-239-63.aichyna.com) joined #forth 23:59:59 --- log: ended forth/06.02.27