00:00:00 --- log: started forth/04.09.19 00:00:40 --- join: proteusguy (~proteusgu@68-114-24-230.cpe.ga.charter.com) joined #forth 00:04:19 --- join: qFox (C00K13S@82-169-140-229-mx.xdsl.tiscali.nl) joined #forth 00:08:55 --- quit: Sonarman ("leaving") 01:12:04 --- quit: madwork_ (Read error: 101 (Network is unreachable)) 02:24:31 clear 02:24:32 oops 02:25:04 :) 02:25:05 Morning 02:42:36 Greetings 03:01:57 --- quit: qFox ("this quit is sponsored by somebody!") 03:08:09 I wonder how much a flat piece of glass would cost -- something in the size range of 13" square. 03:13:01 What are you going to do? 03:13:10 I need it for the solar oven. 03:13:21 I tried using plastic wrap, but it's too flimsey. 03:14:18 The alternative is to use transparent oven bags, leaving the solar oven itself wide open to the atmosphere. The items inside the bags cooks normally. I should probably experiment with that first. 03:18:32 Hmm...I wonder if Plexiglass would work, or if it would out-gas? 03:27:34 I think glass is pretty much a requirement. Plexiglass has too low a melting point, especially for a solar oven that can theoretically reach 200C in temperature. 04:06:24 --- join: crc (crc@107-pool1.ras11.nynyc-t.alerondial.net) joined #forth 04:06:37 re crc 04:06:43 Hi kc5tja 04:08:34 I finally finished implementing PUBLIC: late last night. :) 04:09:58 cool 04:19:49 Yep. Did a little test-driven development to realize it. I still have to hone my TDD techniques with Forth though. Forth makes TDD rather "interesting" in some respects. 04:20:06 What's test-driven development? 04:20:26 I'm rather shocked you don't know of it. I've explained it here numerous occasions. 04:20:37 :) 04:21:02 Let's suppose you are writing a function to display a graph of temperature over time. 04:21:25 ok 04:21:31 You need a function to compute the graph limits. Basically, what you do is you write your program as if the needed function already exists. 04:21:40 This is basically top-down design at this point. 04:21:50 You compile, the compilation ought to break. 04:22:32 (if it doesn't, then you either have a name collision with something else.) 04:22:39 s/either// 04:22:56 Anyway, once you confirm it's OK to go ahead using the desired name, you now "describe what is required of the function." 04:23:03 You do this using unit tests. 04:23:22 Let me fetch you a simple example from my PUBLIC: implementation: 04:23:44 0 ( FTS/Forth::Target::Word List Database::Entry::Unit tests ) 04:23:44 1 04:23:44 2 44 load 04:23:44 3 : t1 "reset $DEADBEEF "cfa! "buffer 16 + @ $DEADBEEF XOR 04:23:44 4 abort" 46:t1" ; t1 04:23:46 5 S" ABCDE" "name! 04:23:49 6 : t2 "buffer c@ 5 xor abort" 46:t2" ; t2 04:23:52 7 : t3 "buffer @ $43424105 xor abort" 46:t3" ; t3 04:23:54 8 : t4 "buffer cell+ @ $20204544 xor abort" 46:t4" ; t4 04:23:57 9 S" ABCDEFGHIJKLMNOPQRSTUVWXYZ" "name! 04:23:59 10 : t5 "buffer c@ 26 xor abort" 46:t5" ; t5 04:24:02 11 : t6 "buffer 16 + @ $DEADBEEF xor abort" 46:t6" ; t6 04:24:05 12 04:24:07 13 47 load 04:24:09 14 04:24:12 15 04:26:12 For example, t1 verifies the correct operation of the "cfa! word. t2..t4 verifies operation of the "name! word when the length of the name is less than 15 characters, while t5..t6 tests when the name is longer than 15 characters. 04:26:38 ok 04:27:04 Anyway, after you write these tests, you compile again -- again, it should break, since the code you're "testing" doesn't exist yet. Not a problem. 04:27:22 If it doesn't break, then something really weird is happening that requires additional research. 04:27:53 Finally, once you've verified proper compiler behavior, it's time to actually write the real code. (in this case, "cfa! and "name!, along with their private definitions). 04:28:12 You write the code using the absolute minimal code possible that still satisfies those tests. 04:28:32 Re-run the tests every time you make any change to the code. 04:28:51 Since you have these tests in source code form, you can run them as often as you like, whenever you want. Therefore, they're always present. 04:29:11 I see 04:29:14 And if you run tests in a partially ordered manner (e.g., run the tests for lower-level code first, then higher-level, etc), then you can isolate bugs trivially. 04:30:06 By definition: if the behavior of a function doesn't match the expectations of the unit test associated with it, then there is either a bug in the unit test or in the function under test (more often than not, it's the latter, but still). 04:31:07 Anyway, PUBLIC: itself is tested with a whole different source block. 04:31:30 Block 46 tests the "cfa! and "name! words, which are critical to getting PUBLIC: implemented. But PUBLIC: itself is tested in block 47. 04:32:28 Note that block 46 executes before 47; therefore, if an error exists with "cfa!/"name! that would affect the operation of PUBLIC:, then it'll have a much higher chance of being caught first in block 46, thus completely ruling out the test code in 47 and even the definition of PUBLIC: itself. 04:33:07 If nothing is caught in block 46, then "cfa!/"name! must be OK by the tests given in block 46; therefore, the problem must exist either in the definition of PUBLIC: (or its descendent words) or in the unit tests on block 47. 04:33:19 So, as you can see, it makes localizing and isolating an error easy. :) 04:33:24 I agree 04:33:54 I've never tried anything like that 04:34:29 * crc will have to consider it for future use 04:35:08 Yeah. My recommendation would be to try it for new projects, or for existing projects that exists only in dire states of affairs. :) 04:35:27 :-) 04:35:36 You'll find that writing production code takes longer -- sometimes up to twice as long. 04:35:54 That's not a problem for me 04:35:58 But, OTOH, you'll also find debugging to go substantially faster. To the point of being non-existant in many cases. 04:36:32 It's like the difference between old-fashioned garbage collectors, that stopped the system to collect garbage all in one fell swoop once memory was exhausted, and modern, incremental collectors that do collection in the background. :) 04:36:39 * crc wishes he had thought of doing this when he started developing RetroForth 04:37:05 It could have saved a lot of headaches during the early development 04:37:22 Hehe :) 04:37:43 I found I couldn't apply TDD to most of FTS/Forth's cross compiler. 04:38:01 The supporting infrastructure just didn't exist. 04:38:11 So I had to rely on more formal methods to get it working. 04:45:40 What's the next thing you need to implement? 04:47:01 Next, I need to get the cross-compiler to emit a data section for the vocabulary database in the ELF executable. 04:47:57 ok 05:00:18 I added a new .data section, but it's technically a "code" section and not a data section. Linux doesn't care though. 05:02:04 I keep everything in one section 05:09:51 * kc5tja personally prefers to keep multiple different sections. 05:09:56 It just seems cleaner that way to me. 05:10:13 I don't have to muddle around with relocating data. 05:11:27 why would you have to relocate data? 05:12:23 Because the dictionary will grow and shrink at run-time. 05:14:04 My dictionary only grows; it never shrinks (unless you run 'restore') 05:18:57 RetroForth/Native now has a working serial port driver and a serial console 05:21:07 My dictionary remains constant in size, but to achieve minimal code size in an ELF file, only the space actually used is written to the .code section. 05:21:41 The vocabulary database itself is written in a separate section, and is always fixed in size (20KB per vocabulary). 05:22:00 ok 05:22:30 I figure I would just let Linux itself handle the placement of the sections; I don't want to deal with it if I can avoid it. 05:22:40 It just complicates system startup. 05:23:33 right 05:48:36 Well, this is down-right fucking stupid. 05:48:58 Apparently writing characters to the console via direct kernel calls does not redirect output!! 05:49:21 Hence, there is no way for me to analyze buggy output of my program. >:( 05:51:39 You should be able to redirect output 05:52:20 I do it all the time and I use direct kernel calls 05:57:01 --- join: saon (Ecoder@c-24-129-95-254.se.client2.attbi.com) joined #forth 06:00:27 It doesn't work on x86 Linux. 06:00:49 Linux version 2.4.22 06:01:27 That's OK though -- I found the bug. :) 06:02:09 * kc5tja has confirmed that the database IS accessible in the target image at the predetermined load address. w00t!!! 06:02:12 * kc5tja celebrates! 06:02:18 This is a rather major milestone 06:03:57 good 06:06:15 :) 06:06:50 * crc is searching for information on parallel ports 06:13:39 Here's a great picture: http://elvis.beefytreats.net/files/suidog.jpg 06:14:25 Heh. 06:14:37 That's funny :-) 06:17:14 --- quit: crc ("Time for bed... Goodnight!") 06:33:37 kc5tja: how many days a week do you work? 06:39:55 I now work 5 days a week. 06:44:28 --- quit: saon (Read error: 60 (Operation timed out)) 06:54:40 --- join: Topaz (jonny@spc1-horn1-6-0-cust217.cosh.broadband.ntl.com) joined #forth 06:57:18 --- quit: Topaz (Remote closed the connection) 07:24:10 --- join: qFox (C00K13S@82-169-140-229-mx.xdsl.tiscali.nl) joined #forth 07:41:52 --- join: saon (~Ecoder@c-24-129-95-254.se.client2.attbi.com) joined #forth 07:51:36 --- join: Herkamire (~jason@h000094d30ba2.ne.client2.attbi.com) joined #forth 07:51:36 --- mode: ChanServ set +o Herkamire 09:03:54 --- join: Topaz (jonny@spc1-horn1-6-0-cust217.cosh.broadband.ntl.com) joined #forth 09:06:47 --- quit: saon ("Leaving") 09:17:43 I need to write an essay about software bloat for school. Any recommendations on books or papers to read? 09:17:47 --- join: das (~das@adsl-64-219-100-33.dsl.lgvwtx.swbell.net) joined #forth 09:17:52 Hi das 09:18:00 hello Robert 09:18:05 I need to write an essay about software bloat for school. Any recommendations on books or papers to read? 09:18:18 I thought #forth might be a good place to ask. 09:18:56 * das does not of any papers or books on the subject off hand... 09:19:41 OK, thanks anyway, 09:21:55 although software is bloated, and things take up too much memory. If we could all get by with under a meg of RAM, it could all be battery backed, and we could easily have instant on, instant off computers. With 64 meg to a 1 gig on laptops it would not be pratical to battery back the RAM. 09:23:50 * Robert looks at his 512MB laptop. 09:24:14 The problem is that it's my multimedia station, so I need enough RAM and CPU to play movies. 09:24:30 This computer, on the other hand, is only used for IRC and my web page. 09:26:39 Even laptop OSes could be designed better. Battery back some working space of about 1 MB. Have about 512MB of scratch pad ram that does not matter for it to be volatile. 09:26:39 Robert: http://www.laputan.org/mud/mud.html 09:26:45 not exactly an academic paper 09:27:15 das: Ah, yeah. 09:27:18 fridge: Thanks. 09:27:47 The teachers WILL torture me with burning sticks if I don't have any academic papers to refer to, but I guess it's a start. 09:28:51 Heh. Cute picture. 09:28:55 * das is reading the article now... Good one fridge. :) 09:29:13 --- nick: das -> das-lunch 09:29:22 I'll be back in few hours... 09:29:33 OK, see you :) 09:31:13 I tried to view that page 09:31:24 firefox renders it as raw text 09:31:29 and doesn't render the tags 09:31:57 I'm using Firefox. 09:32:04 Works fine 09:32:46 hmm, maybe you could reference it 09:32:52 I read it ages ago 09:33:12 and just filed it away as a rant 09:33:15 I could also include some rants by Jeff Fox. 09:51:54 --- join: crc (crc@52-pool1.ras11.nynyc-t.alerondial.net) joined #forth 10:04:13 hi 10:04:28 crc, i was studying the retroforth asm source, its very nice 10:05:09 thank you 10:05:26 I've been working a lot on the native version :-) 10:07:07 The serial port driver is working now; it's just 15 lines of Forth code (not counting comments or blank lines) 10:07:15 I started a parallel port driver 10:08:08 There's also a version that does provides a serial console too 10:08:48 I'm almost happy with my block editor 10:35:42 --- join: tathi (~josh@pcp02123722pcs.milfrd01.pa.comcast.net) joined #forth 10:37:21 hi tathi 10:37:31 crc, is all the source in blocks? 10:44:34 Not really 10:45:29 I could write the code to fit in 1k blocks, but there's no point in that right now 10:45:52 The core startup code has to be loaded at startup, and the compiler doesn't care what it looks like 10:46:13 I have one word per line in the "blocks" 10:46:47 hi slava 10:47:10 When I write code _in_ RetroForth, I try to use real blocks though 10:47:26 so you have a userspace -vs- kernelspace distinction 10:47:30 Yes 10:48:06 The kernel is small, and easy to modify, but it requires a recompile for each change 10:48:15 The userspace can just be reloaded :-) 10:48:24 cool 10:49:12 It works well enough for me 10:49:33 how must i compile a C program so it can look up its own symbols at runtime with dlsym(NULL,"foo")? 10:49:52 I have no idea 10:49:52 I haven't touched C in almost a year 10:49:56 good riddance ;) 10:50:15 It's still useful for some things... 10:51:23 -export-dynamic 10:53:20 * crc has just added dynamic linking to RetroForth 10:53:45 bleh, -export-dynamic bloats cfactor to 70kb. but it simplifies the ffi 10:54:16 ( 1 ) "box_integer" dlsym-self . 10:54:16 134534724 10:57:10 Dynamic library support adds ~1k to RetroForth 10:59:20 --- nick: das-lunch -> das 11:03:05 slava, I did some symbol look of own symbols a couple years ago, but don't remember how I did it. It was forth related. I was thinking of writing a Forth that translated to C, and when something needed to be run, everything that had no been compiled was theen compiled and linked to a .so file, then pulled back in and run. 11:03:16 i've figured it out now 11:06:55 i'm having a lot of fun with my integrated assembler 11:07:03 slava: what is ffi? 11:07:17 crc, calling C functions 11:07:25 ok 11:07:32 crc, loading .so at runtime with dlopen() 11:07:46 crc, then compiling words that call the C functions with parameters from the factor stack 11:07:53 crc, ie, SDL graphics :) :) 11:07:56 I just finished code to allow that in RetroForth 11:08:28 " libc.so" LoadLibraryAs LIBC 11:08:40 LIBC " exit" MapFunctionAs libc_exit 11:08:45 libc_exit 0 1 invoke 11:08:47 :-) 11:08:50 cool 11:08:58 how does invoke work? 11:09:15 TOS = number of parameters to pass 11:09:29 ok 11:09:30 It takes a value from the Forth stack, puts it on the return stack 11:09:45 my approach is similar i guess, except the parameters and their types are specified at 'MapFunctionAs' time, not with 'invoke' 11:09:49 It then calls the library function, cleans up the stack, etc 11:09:58 ok 11:10:40 This is identical to the system interface in RetroForth/Windows 11:11:20 I only had to change about six lines of code to allow it to work with libdl.so 11:11:45 what is the linux libdl api? 11:11:50 is it like freebsd? (dlopen/dlsym) 11:11:54 Yes 11:11:57 ok 11:12:00 so i just need to remember to add -ldl 11:12:02 And it's the same under BeOS 11:12:05 damn i'll have to start using autoconf soon 11:12:10 on solaris, i need -lnsl -lsocket 11:12:31 Right 11:12:36 Though BeOS doesn't include libdl.so, so it has to be downloaded from BeBits 11:12:41 * crc hates autoconf 11:12:46 yeah i hate it too 11:12:52 i might make a lighter solution 11:13:00 like a master Makefile then Makefile.linux Makefile.solaris etc 11:13:35 I just have a separate source tree for each OS 11:13:57 my source compiles without changes, its just linker flags and such that are troublesome 11:14:26 Just have the user edit the makefile manually :-) 11:15:29 heh 11:16:15 --- nick: das -> das-away 11:17:55 Or have them type 'make osname' 11:18:21 * crc used that before splitting the ports into separate source trees 11:22:17 --- join: arke (arke@adsl-69-209-54-62.dsl.chcgil.ameritech.net) joined #forth 11:22:30 hello arke 11:22:50 hi 11:22:55 I'm back 11:23:02 why does Robert have voice? :) 11:24:13 hi 11:28:12 * crc wonders what driver to write next... 11:28:49 Hi 11:28:55 arke: Because I can speak! 11:30:38 SDL_INIT_VIDEO SDL_Init 11:30:38 640 400 32 0 SDL_SetVideoMode 11:33:48 --- join: saon (Ecoder@c-24-129-95-254.se.client2.attbi.com) joined #forth 11:33:51 slava: don't you mean 11:34:01 640 400 32 SDL_HWSURFACE SDL_SetVideoMode ? 11:34:47 probably :) 11:35:03 :)P 11:36:56 --- join: crc_ (crc@9-pool2.ras11.nynyc-t.alerondial.net) joined #forth 11:36:57 --- quit: crc (Read error: 104 (Connection reset by peer)) 11:37:00 --- quit: crc_ (Client Quit) 11:37:02 --- join: crc (crc@9-pool2.ras11.nynyc-t.alerondial.net) joined #forth 11:37:32 --- quit: saon (Client Quit) 11:43:11 --- join: Frag-101 (XINU@12-222-128-22.client.insightBB.com) joined #forth 11:51:58 I can now send bytes to a parallel port; though I haven't figured out how to read from it yet 11:53:18 crc: :) 11:55:51 kc5tja: hi :) 11:59:42 Ok, now I can read from it too 12:00:04 * crc is writing drivers for RetroForth/Native 12:22:52 --- quit: qFox ("this quit is sponsored by somebody!") 12:28:25 --- join: crc_ (crc@71-pool1.ras11.nynyc-t.alerondial.net) joined #forth 12:28:39 --- quit: crc (Nick collision from services.) 12:28:44 --- nick: crc_ -> crc 12:39:52 --- quit: I440r ("Leaving") 12:48:14 Wow. Amazing the little details of differences between processors that you turn up when you're porting something. 12:48:38 Such as what? 12:48:46 I've just been learning about divide instructions on x86 and PPC. 12:48:52 they round the results differently in some cases. 12:49:03 interesting 12:49:10 PPC always rounds the quotient towards zero. 12:49:34 --- quit: proteusguy (Read error: 54 (Connection reset by peer)) 12:49:57 on x86, it rounds towards negative infinity. 12:50:00 --- join: proteusguy (~proteusgu@68-114-24-230.cpe.ga.charter.com) joined #forth 12:50:12 tathi, doesn't x86 have both forms of division? 12:50:32 slava: I don't know. 12:50:39 I'm talking about integer division here... 12:50:47 I thought there was just div and idiv. 12:51:00 oh, maybe there's a processor flag or something. 12:51:29 --- join: I440r (~mark4@216-110-82-59.gen.twtelecom.net) joined #forth 12:55:02 x86 = teh duck 12:55:03 :) 12:55:04 err 12:55:05 suck* 12:55:06 :) 12:56:17 x86 = the duck 12:56:19 I like that :) 12:56:22 hehe 12:56:33 teh even 12:56:35 tathi: ficl+sdl = frapiar :) 12:57:01 why ficl and not gforth? 12:58:16 because i can plug ficl into pretty much anything 12:58:57 core stuff is written in C 12:59:00 the rest in Forth 12:59:00 :) 12:59:12 arke: nice. 12:59:16 arke, why is the core in C? 13:00:18 slava: because I said so. 13:00:34 tathi: haven't decided if I want the GUI stuff in C or Forth. 13:00:44 tathi: Forth would be easier, C would be faster. 13:01:04 tathi: C would be much harder because I'd have to write all the bindings to ficl manually 13:02:44 slava: easiest thing for me, thats why 13:03:10 tathi: actually, I don't know which would be harder.... the C code can just be plugged in 13:03:16 right 13:03:23 ]while the forth one would have to be writen first 13:03:29 although i'd prefer that. 13:03:30 ... 13:03:32 that's cool that you're still working on it though -- I thought you had abandoned it for an OS project 13:05:37 i've got several projects 13:05:48 it depends on what OS im booted into which project im working on 13:05:52 ah. 13:05:54 right now, im in windows, so working on frapiar 13:06:21 operating systems these days. sheesh 13:08:27 :) 13:14:16 --- nick: das-away -> das 13:15:33 --- join: crc_ (crc@95-pool2.ras11.nynyc-t.alerondial.net) joined #forth 13:15:44 --- quit: crc (Nick collision from services.) 13:15:50 --- nick: crc_ -> crc 13:16:23 jeezus crc you're connecting like a monkey on crack 13:17:19 arke: you try keeping a connection alive when you're on dialup, have noisy lines, and the weather is stormy 13:17:21 :-) 13:21:29 --- quit: proteusguy (Connection reset by peer) 13:22:26 --- join: proteusguy (~proteusgu@68-114-24-230.cpe.ga.charter.com) joined #forth 13:22:55 i'm working on some words for interfacing with C structs 13:27:36 I just fixed an apple pro mouse 13:27:46 man those things are hard to get apart 13:30:08 had a little fun with it though: http://herkamire.com/downloads/mouse.jpg 13:30:35 haha, excellent 13:31:42 hehe 13:31:46 my school needs such! 13:33:33 if you want to see the rediculous 9-step process to get it open: http://www.sewardweb.com/applepromouse/ 13:33:37 http://herkamire.com/downloads/mouse.jpg 13:33:40 oopts 13:33:44 some parts are glued together. 13:34:19 you actually have to cut through two plastic things to get it apart. 13:34:26 :/ 13:34:51 :( 13:34:53 mur 13:34:55 teh mur 13:34:57 mur 13:34:59 teh mur 13:35:02 :) 13:35:05 ^_^ 13:35:07 finland at its best 13:35:09 yuay 13:35:12 im hyper 13:35:14 kill me 13:35:17 * arke drops dead 13:35:19 akreleeke 13:35:20 arke 13:35:22 terve 13:35:38 hypertext! 13:39:33 ( 21 ) .s 13:39:33 { # } 13:39:33 ( 22 ) surface-width . 13:39:33 640 13:39:54 i can do basic C structs now! 13:40:23 cool! 13:42:46 next steps is a better notion of conversion between C types and factor types 13:42:56 :) 13:43:01 then i should be able to draw pixels on the screen :) :) 13:45:37 good night 13:46:48 --- quit: tathi ("leaving") 13:53:43 ACK 13:53:59 I need some toothpicks to prop my eyes open 13:54:28 :) 14:04:08 --- quit: arke ("leaving") 14:04:30 --- join: arke_ (f2@bespin.org) joined #forth 14:05:03 --- nick: arke_ -> arke 14:10:26 --- join: TheBlueWizard (TheBlueWiz@modem-151.nyc-tc03b.FCC.NET) joined #forth 14:10:26 --- mode: ChanServ set +o TheBlueWizard 14:16:24 --- quit: crc ("Time for bed... Goodnight!") 14:59:35 --- join: tathi (~josh@pcp02123722pcs.milfrd01.pa.comcast.net) joined #forth 15:20:06 --- quit: Herkamire ("trying herkforthos again") 15:31:12 Good morning. 15:31:32 'lo 15:32:25 hi 15:32:29 kc5tja hiya 15:32:31 kc5tja! :) 15:32:36 --- join: saon (Ecoder@c-24-129-95-254.se.client2.attbi.com) joined #forth 15:32:38 TheBlueWizard! :) 15:32:41 kc5tja, i've very close to drawing pixels with SDL 15:32:58 arke hiya! :) 15:33:08 ^_^ 15:33:38  15:34:17 kc5tja: modifying vibe to include escape code arrow keys. for myself. :) 15:34:57 arke: Sweet. 15:35:16 Hey, I just realized something pretty significant: in order for FTS/Forth/L4 to boot via Grub, I have no choice -- I MUST have a filesystem. 15:35:19 :) 15:35:35 ext2fs? :) 15:35:40 So I guess that pretty much solves that problem by default. 15:36:08 a grub supported FS, i assume? 15:36:09 ext2fs seems like a rather complicated filesystem. I'm not sure yet. 15:36:35 Well, it'd be nice, certainly. The alternative is to port another filesystem to Grub. 15:36:56 what does grub support? 15:37:05 I forget off the top of my head. 15:37:19 FAT, ext2fs, BSD FFS, and a small smattering of other filesystems, as I recall. 15:37:34 * arke looks oonline 15:40:31 kc5tja: FAT12/16/32, ext2, ufs, minix 15:40:45 except that that cna't be complete, as it boots nbtfs and reiserfs here 15:41:23 maybe the doc is a bit dated 15:42:08 I suppose one can implement a "raw" booting (e.g. assume the partition to be raw) 15:42:59 well, gotta go...all bye! 15:43:00 probably 15:43:02 bye TheBlueWizard 15:43:09 arke bye 15:43:43 bye TheBlueWizard 15:44:15 --- quit: saon ("Leaving") 15:44:51 das bye :) 15:45:24 --- part: TheBlueWizard left #forth 15:46:40 kc5tja: oh man, the way you handle this with find is INGENIOUS 15:47:02 arke: ?? 15:47:17 I tried looking too -- yeah, the list of filesystems still seems to be small, although it has expanded a bit. 15:48:19 kc5tja: vibe. you're interpreting by creating words with the hex name and searching for it. 15:48:53 OOH! I didn't know this! Maybe we don't need to support a filesystem. GRUB supports a block-list format to specify files too. 15:49:21 E.g., "kernel 10+20" will load starting at block 10 (512-byte blocks), which is 20 blocks long. 15:49:24 kc5tja: yay!!! :) 15:49:34 * kc5tja had no idea that even was supported. 15:49:50 kc5tja: thjat is awesome :) 15:50:31 Yes, very much so. 15:51:06 Although, I'm still very confused -- how does one configure a "menu.lst" file using this? 15:51:10 : handle-esc key? if eval-seq else cmd then ; 15:51:20 kc5tja: true. 15:51:45 --- join: Herkamire (~jason@h000094d30ba2.ne.client2.attbi.com) joined #forth 15:51:45 --- mode: ChanServ set +o Herkamire 15:51:50 There must exist a path to the menu.lst file. So I'm thinking that, despite the ability to load raw block lists, a filesystem might still be quite desirable. 15:51:59 Boyaaa! 15:52:09 herkforth runs decently directly on OpenFirmware now 15:52:16 Herkamire: Congrats!! :) 15:52:19 :) 15:52:35 I just ran it for a bit, and determined the exact character dimentions of my screen. 15:52:42 Question: Does PearPC come with an OpenFirmware implementation for it already? Or did you need to copy the implementation from your current Mac? 15:52:56 once I punch those in you'll be able te see the command history and output 15:53:17 pearpc runs on it's own afaik. 15:53:20 Herkamire: yay :) 15:53:23 it emulates basic OF 15:53:56 the code I have to get the memory address for the frame buffer is getting a value, but storing to it crashes 15:53:57 Sweet :) 15:54:16 thought maybe it was a bug in pearpc, so I tried it directly under OF, and it crashes there too. 15:54:23 so apparently I'm missing something 15:54:46 FTS/Forth may be required to support a filesystem, to support booting from GRUB. 15:55:38 maybe the MMU being a bithc? :) 15:55:43 heh, that's a nice thing about OF 15:55:49 I guess. 15:56:03 what's a nice thing about OF? 15:56:06 it'll load an ELF 15:56:12 So will GRUB. 15:56:25 oh yeah 15:56:40 kc5tja: why do you need filesystem support to boot? 15:57:03 I don't have any fs support yet 15:57:08 But it loads its stage 1.5 and stage 2 loaders from disk, and any menu description must be found in a file called "boot/menu.lst". 15:59:01 haha 15:59:01 what a hack i just wrote 15:59:02 lets see if it works :) 15:59:41 it doesn't 15:59:43 :) 16:01:57 arke: FTS/Forth now has a Forth vocabulary that is built by the cross-compiler. And yes, the target application can see it. :) 16:02:25 arke: yay! 16:02:32 The next step is to implement the dictionary search code in the target image. 16:02:34 arke: that means a rudimentary interpreter soon :) 16:02:46 so, FIND basically 16:04:08 Correct. 16:04:48 create esc-seq-bmp ' up , ' down , ' left , ' right , : do-arrow cells esc-seq-bmp + execute ; : (eval-seq) key 'A - 4 < if do-arrow else drop cmd then ; : eval-seq key '[ = if (eval-seq) else cmd then ; : handle-esc key? if eval-seq else cmd then ; 16:04:53 'tis a hack 16:05:00 but it seems to me like it should work 16:06:32 key 'A - dup 4 < if do-arrow else drop beep then ; 16:08:05 i know why it doesn;t work - i forgot a @ there! 16:08:15 kc5tja: yes sir. 16:08:35 You forgot a dup. key 'a - 4 < will consume the only value of KEY. :) 16:08:58 thats fine, i dont want it :) 16:09:07 Yes you do. 16:09:14 Because do-arrow requires it to be on the stack. 16:09:23 no 16:09:29 it requires the index after 'A - 16:09:34 and, it works 16:09:35 :) 16:09:35 Which you don't have!! 16:09:53 then why does it work? :) 16:10:05 It *doesn't* work for me. 16:10:19 yes 16:10:29 add a @ after the + in do-arrow 16:10:31 then it'll work 16:10:43 only in insert mode though, and in the code above, left and right aer switched 16:10:44 key ( k ) 16:10:48 'A ( k 'A ) 16:10:52 - ( k-'A ) 16:10:58 yep 16:10:59 4 ( k-'A 4 ) 16:11:02 < ( flag ) 16:11:07 if ( ) <-- oops! 16:11:12 err? 16:11:16 no 16:11:20 theres a dup 16:11:26 oh 16:11:29 haha 16:11:34 i added the dup after i pasted 16:11:35 :) 16:11:40 theres a dup there 16:11:44 and an @ after the + 16:11:44 Ahh, ok, that's better. :) 16:11:49 ^_^ 16:11:59 oh, and switch left and right 16:12:53 and whatver you do, don't press pageup 16:12:54 :) 16:13:17 What happens? 16:13:28 --- quit: Topaz ("Leaving") 16:14:38 kc5tja: try and see for yourself :) 16:15:24 kc5tja: you need to change the < to u< 16:17:48 Heh 16:18:18 kc5tja: oh, and i just added support for command mode cursors 16:18:26 rename handle-esc to handle-esc-i 16:18:28 and add 16:18:39 : handle-esc-c key? if eval-seq else beep then ; 16:18:49 : $$c1B DROP handle-esc-c ; 16:19:06 how readable is my code? 16:22:11 Readable enough. I don't mind it. 16:23:07 :) 16:23:36 --- quit: tathi ("playing with OpenFirmware") 16:31:39 --- join: tathi (~josh@pcp02123722pcs.milfrd01.pa.comcast.net) joined #forth 16:31:56 kc5tja: would you incorporate my changes? 16:33:46 I would incorporate them as an add-on module to VIBE, not so much an intrinsic of VIBE itself. 16:34:30 But don't feel bad about that though -- VIBE 3 won't even have a "VI"-like default personality. The VIBE 3 core is just that -- a core. The VI personality is itself an add-on. 16:34:31 i wrote it such that if you don't have an ANSI terminal, it won't matter, it'll just simply ignore them. 16:34:41 aah 16:34:41 ok 16:34:42 :) 16:35:08 Realistically speaking, you can replace the $$c* and $$i* words with a completely new mapping that gives it an Emacs feel. 16:35:46 yeah 16:39:24 --- join: crc (crc@206-pool2.ras11.nynyc-t.alerondial.net) joined #forth 16:51:54 --- join: saon (Ecoder@c-24-129-95-254.se.client2.attbi.com) joined #forth 16:58:21 --- quit: Herkamire ("trying more stuff with herkforthos") 17:02:50 --- quit: proteusguy (Connection reset by peer) 17:18:38 --- quit: saon ("Leaving") 17:24:58 --- join: proteusguy (proteusguy@68.191.242.147) joined #forth 17:30:20 --- quit: crc ("Time for bed... Goodnight!") 17:34:05 --- join: Herkamire (~jason@h000094d30ba2.ne.client2.attbi.com) joined #forth 17:34:05 --- mode: ChanServ set +o Herkamire 17:43:50 --- quit: proteusguy (Read error: 60 (Operation timed out)) 17:46:21 --- join: proteusguy (~proteusgu@68-114-24-230.cpe.ga.charter.com) joined #forth 17:58:23 well, got to go. I'll be back on later 17:58:30 --- part: das left #forth 18:03:36 --- join: randoml (~wossname@rn-v1w5a06.uwaterloo.ca) joined #forth 18:03:50 ek i missed dwight lol 18:09:18 hehe :) I did actual useful, programming work in herkforthos :) 18:09:27 booted into it. 18:10:05 found the bug in my code that get's the frame buffer address 18:10:17 I440r: FTS/Forth now has a searchable dictionary, although the interpretter itself hasn't yet been written. But it is visible from within FTS/Forth's target-compiled code! 18:10:41 (then I altered my mandelbrot code to spit out 8-bit pixels instead of 32-bit 18:11:04 awesome! 18:11:19 --- quit: tathi ("Lost terminal") 18:11:35 the OF terminal is quite a bit faster than the pearpc one 18:11:37 oopts i htink i just crashed tathi 18:11:37 lol 18:11:42 even though it's way bigger 18:15:17 --- join: saon (Ecoder@c-24-129-95-254.se.client2.attbi.com) joined #forth 18:17:22 : drop 0 and + ; 18:17:37 lol 18:17:39 --- join: tathi (~josh@pcp02123722pcs.milfrd01.pa.comcast.net) joined #forth 18:17:43 : drop 0 and + ; 18:17:49 its GENIOUS 18:18:04 : drop dup 2drop ; 18:18:13 cheat 18:18:19 no stack words :) 18:19:19 --- join: Sonarman (~matt@adsl-209-233-52-35.dsl.snfc21.pacbell.net) joined #forth 18:19:32 Sonarman: ! 18:19:35 : drop 0 and + ; 18:19:44 : drop if then ; 18:19:53 lol 18:20:33 --- quit: saon ("Leaving") 18:20:59 how about dup? 18:21:11 : dup sp @ ; 18:21:20 although thats implementation dependent 18:21:29 brilliant 18:21:59 : drop -cell sp +! ; 18:22:19 i think Sonarman had the best drop :) 18:23:19 : dup 0 over or ; ;) 18:23:25 Although it does require over. 18:23:40 : dup 0 over nip ; 18:23:52 : 0 dup xor ; 18:24:01 ( a ) 0 ( a 0 ) over ( a 0 a ) or ( a a ) :) 18:24:03 : drop dup xor or ; 18:24:04 : 1 dup */ ; 18:24:23 Herkamire: ah, i like that one :) 18:24:35 Herkamire: neat :) 18:25:15 who can do 'swap'? 18:25:23 The problem with DUP is that it *produces* data; it doesn't *consume* data. Therefore, at some point, you must always cheat somehow. 18:25:34 : swap tuck drop ; 18:26:00 ^ cheating 18:26:08 : tuck dup -rot ; 18:26:24 : -rot swap >r swap r> ; 18:26:27 infinite loop :) 18:26:36 : >r drop ; 18:26:40 : r> 1234 @ ; 18:26:49 lol that wont work 18:26:59 who cares about the data, as long as we get the right stack effect :D 18:27:08 lol 18:27:12 : dup 3 ; 18:27:16 lol 18:27:16 : swap ; 18:29:58 : swap 2>r rswap 2r> ; 18:30:30 who the hell has rswap 18:30:35 that's just insane 18:30:53 : rswap r> r> r> swap >r >r >r ; 18:31:26 r(a b c) -- r(b a c) ? 18:31:37 in factor, : rswap r> r> r> r> swap >r >r >r >r ; 18:31:47 two slots in the call stack are used for the activation frame 18:31:52 Yes. Because 'c' is the return address to the word that called rswap. 18:32:01 oh wait that won't work for tail calls 18:32:02 ah, right 18:32:15 : foo 1 >r 2 >r rswap ; but i guess you're screwed anyway 18:32:28 :) 18:43:52 miffin pearpc doesn't work 18:44:26 anybody have pearpc installed on x86 linux? 18:46:01 I do not. 18:46:48 I looked through the pearpc sources. 18:46:56 I _do_ have the correct frame buffer address 18:58:48 I wonder how hard it is to install. 18:58:55 * kc5tja only has 380MB of harddrive space free though. 19:41:44 Assuming I have sufficient quantities of time and initiative tonight, I hope to get FTS/Forth to interpret its first word tonight. 19:41:50 Well, tomorrow morning at the very least. 19:45:18 kc5tja: that would be great :) 19:45:29 kc5tja: doing the block words will then be much easier too. 19:45:33 kc5tja: testing, etc. 19:46:56 Yeah. But just getting it to interpret words isn't the same as having a full-blown Forth environment either. :) 19:47:28 well, interpret, then compile, then the rest is just adding words :) 19:48:23 Yes, I'm looking at implementing FTS/Forth as a really minimalistic, core kernel of sorts. On top of that kernel, you can put whatever words you want. 19:49:39 Right now, the core kernel size is just a hair over 4KB in size. 19:51:28 It contains some basic console I/O words (line oriented), and the QUIT entrypoint into the system. 19:51:42 It seems like a lot of code to have for such a minimal, even non-functional, system yet. :) 19:52:01 --- join: Sonarman_ (~matt@adsl-64-169-95-227.dsl.snfc21.pacbell.net) joined #forth 19:52:31 kc5tja: it'll be good though. 19:52:52 Well, the compiler puts out pretty horrible code too. The only optimization I do is tail-call optimization. 19:53:02 Hopefully, once FTS/Forth is itself boot-strapped, that will change. 19:53:20 the sources for pearpc-0.2.0 are 535KB (bziped) 19:53:30 Herkamire: ! 19:53:35 Herkamire: that seems small to me 19:53:51 It's BZipped -- so multiply that figure at least by 3 to get real source code size. 19:53:51 kc5tja, it sounds like you're making good progres 19:54:43 We'll see. 19:55:19 a lot more than 3x! du says that it's 4.2MB uncompressed. 19:55:22 slava: I expect the core interpreter, including support for numbers, to consume close to 8KB of memory. With :-compiler, I expect 10KB. 19:55:38 kc5tja, that is still quite small :) 19:55:56 yep. My dictionary space is only 64KB too. :) 19:56:28 --- quit: Sonarman (Nick collision from services.) 19:56:30 --- nick: Sonarman_ -> Sonarman 19:57:01 kc5tja: one segment :)\ 19:57:23 And yes, I can also compile the software to not include the word headers too. That's how I got the 4KB size. :) With the current word headers, it brings the total size of the executable to 24KB. 19:57:58 If I were to implement both the Forth and Compiler word lists, leaving all else alone, it'll be 44KB. So with a minimal, yet fully functional, environment, we're probably going to look at an executable that is 64KB in size. 19:58:27 Well, between 50K and 64K at least 19:58:58 Note that none of this takes into consideration support for shared libraries either. That will require fundamental changes to the ELF generation code, because it requires much more sophisticated layout. 20:00:23 FTS/Forth currently supports a maximum dictionary size of 128MB, too, btw. But to realize it, you need to recompile your FTS/Forth kernel. 20:01:01 how did you get that number? 20:01:25 arke: The code segment loads at $08000000, and the first vocabulary segment loads at $10000000 -- a difference of 128MB. 20:01:47 I can of course change the load address of the vocabulary segment too. So I guess if you really wanted to, you could get a larger dictionary space....but why? 20:01:52 * kc5tja can't imagine why anyone would want to. 20:02:01 yep 20:02:09 forth != C 20:03:38 --- quit: randoml (Read error: 113 (No route to host)) 20:04:01 kc5tja: what's the vocabulary segment for? word headers? 20:04:34 Although, I am rather confused by something: I don't think I can make use of sbrk() to allocate more memory in my process space because I "scatter load" segments throughout my address space. Can mmap() be used to allocate chunks of memory too? 20:04:41 Sonarman: Exclusively, yes. 20:05:11 mmap can be used to allocate chunks 20:05:19 Cool. :) 20:05:24 use MAP_ANONYMOUS 20:05:26 I was a bit worried about that. 20:05:36 I remember I440r having some issues regarding that. 20:05:45 --- join: das (~das@adsl-64-219-100-33.dsl.lgvwtx.swbell.net) joined #forth 20:06:06 re das 20:06:25 re kc5tja 20:06:49 hi 20:06:50 :){ 20:07:07 hello arke 20:07:11 --< 20:07:18 arke: that must have hurt! 20:08:00 I guess my next big question, non sequitor, is how I'm going to make the Dvorak/QWERTY keyboard remapper kit. I'd like to use something a bit more powerful than a PIC chip, since PIC and Forth don't really go all that well together. 20:08:37 And I suspect the AVRs have similar shortcomings due to its Harvard architectur.e 20:09:11 Forth runs fine on AVRs 20:09:24 despite the harvard architecture 20:09:41 makes somethings a bit interesting 20:10:02 das: The problem is that to do so, the uC has to emulate a more powerful piece of hardware -- it's not generally possible to make a native-code producing Forth for it that is concurrently interactive. 20:10:56 I really am not at all interested in umbilical software development. I'd rather the Forth ran actually right on the target hardware directly. 20:11:24 Oh, ok, I see what you mean 20:11:49 I'm basically doing "umbilical" development now with FTS/Forth, and as a result, test-driven design techniques are *sorely* limited as a result. 20:12:02 Yeah, the small amount of RAM on the AVRs would make that difficult 20:12:02 And I absolutely hate that. :) 20:12:29 The SwiftX on AVR looks alright. 20:12:43 --- quit: tathi ("leaving") 20:13:09 Sure, as long as you don't care about interactively running code you just compiled for the AVR. It's not interactive. 20:13:21 It is interactive. 20:13:28 you could use an emulator for unit tests 20:13:35 after you download, you can add more words. 20:13:40 hey das 20:13:52 They do native on what is flash 20:14:02 das: Can you execute them on the spot? Can you *remove* words too (e.g., MARKER)? 20:14:16 in linux anonymous memory mappings are the ONLY way to allocate memory 20:14:18 but they do indirect threading on code added to ram later 20:15:08 with SwiftX once you have downloaded, you can only remove code that was added after the download 20:15:13 I dunno -- it seems to be an awfully complex way to do things. 20:15:24 Unless you re download everything 20:15:43 In SwiftX it is pretty seamless. 20:16:43 But I do agree, it is complicated 20:16:46 I dunno. For my style of software development, I would probably run into severe limitations really quick. 20:17:27 The small micros with alot of flash and very little ram make things hard for Forth. 20:19:04 How so, add a word, test it. Add another word, test, and so on. When you they work, add them to the main source, rebuild, and re download. If they don't, throw them away, and start again. 20:19:32 TDD requires the tests to be automatable -- e.g., exist in stored program form. 20:19:43 I also have numerous tests for each single word under test. 20:19:58 (at least one explicit test for each border case that can cause failure) 20:20:15 hello I440r :) 20:20:18 Consequently, every time I need to make a change to the system under development, I re-run the entire battery of unit tests every time. 20:20:34 kc5tja, i have about 2000 lines of unit tests for factor 20:20:40 Likewise, when adding new features, I always write the tests for said features first. 20:20:58 (Hence the name, test-driven development) 20:21:23 The AVR flashes allow at least 1000 writes, maybe 10000. 20:21:48 I was doing some C development, I just reburned everytime I needed to test. 20:22:12 I figured that if I burned out some in development, so be it. 20:22:30 But I did'nt finish the project. Should have used Forth. :) 20:22:57 Question: how big are the flashes in the AVRs, and can they be used to store, say, two 512-word lookup tables? 20:23:40 The ATMEGA128 have 128K of flash. The ATMEGA64 have 64K. There are some with less. 20:24:13 But they have very limited RAM. So adding words interactively is limited. 20:24:29 But testing already compiled words is not. 20:24:36 RAM isn't an issue for the application I'm looking to implement with them. 20:25:44 I440r: Hey, you might know the answer to this. I write to stdout via the kernel call interface. Output is not redirected to a file. How the heck does one get output to redirect to a file? 20:26:04 The MSP430 parts (from TI) might also be something to consider. 20:26:23 das: I'm looking at building a very, very, very cheap electronics kit. 20:26:30 They are not harvard. 20:27:51 Also, the device ought to be DIP form factor if at all possible. 20:28:12 Many of the AVR parts are available in DIP form. 20:30:13 * slava hi-5's kc5tja 20:30:17 check this out: factor.sf.net/sdl.png 20:31:29 Congrats, slava :) 20:32:08 :) 20:32:15 kc5tja: what are your flash/ram/eeprom requirements? 20:32:50 slava: how do you get that kind of gradient? 20:33:06 das: I actually don't know yet. But I know that I'm going to be needing enough space to hold two complete keycode-to-keycode mapping tables, each 512 bytes each. 20:33:08 Sonarman, rgb = (x/3, y/2, y/2) :) 20:33:44 ok 20:34:12 im off to sleep 20:34:19 i'm going to sleep 20:34:21 oops 20:34:30 hehe 20:34:39 nite slava :) 20:34:51 im doing some construction work on my apartment 20:34:58 laying down a new floor - the main room is almost done 20:36:11 so at least 1KB :) 20:37:10 The biggest thing is that the uC has to act as both the PC and as the keyboard at the same time. 20:37:24 Consequently, not only is it remapping keycodes, it'll also be serving as a miniature router of sorts. 20:38:35 kc5tja: many of the AVR parts would fit your requirements, at least from the hardware side of things. From the software side, well, there is a lot free software that can be used to download and burn images to AVR flash via JTAG, but I don't know what is freely available for gleaning information on how to interact over JTAG. 20:39:32 most of the AVRs have built in SPI, UARTS, and some GPIOs. 20:39:32 I wouldn't interact over JTAG -- it's not worth it. I'll have I/O ports to spare for concocting my own serial port or something via the parallel port. 20:40:19 I will need an absolute minimum of 12 GPIOs, I believe. 20:40:29 Then you could just just use the free stuff to download and burn images, and do interaction over a UART. 20:40:56 3 or 5 volt? 20:41:19 5V preferred. I really don't like dealing with 3.3V -- I feel it to be too exotic. I'm old-school. :) 20:41:24 --- quit: Sonarman (Read error: 54 (Connection reset by peer)) 20:41:31 It has to work with the PC keyboard interface, which operates at 5V. 20:43:30 Well, I think I'm going to get ready for work. 20:43:58 I'll be on and off keyboard intermittently until I arrive at work and get settled in. 20:44:09 The ATmega32 would work. Available in 40-pin PDIP. As would the ATmega 16, also in 40-pin PDIP. 20:44:31 But some of the smaller ones would likely work as well. 20:45:08 Well, I ned to leave as well, have to work tomorrow. :) 20:45:24 bye all... 20:45:29 bye das 20:45:46 --- part: das left #forth 20:46:35 kc5tja: I've got the weirdest bug here ... could you take a look? 20:47:06 Make it fast. I have to get ready for work. 20:50:49 OK, well, I need to hit the shower. back in a bit. 20:55:04 --- join: Sonarman (~matt@adsl-66-124-255-214.dsl.snfc21.pacbell.net) joined #forth 21:03:06 ok, you defer a word, so you can change what it does later 21:03:14 what do you call the word that changes what it does? 21:03:29 ' emit ' buffered-emit _____ 21:03:56 is 21:04:07 ' (direct-emit) IS emit 21:04:26 ' penis is reprodictive-organ 21:04:33 etc. 21:04:54 oh 21:04:57 not sure I like that 21:05:38 oh well, can't think of anything better atm 21:05:59 IS on x86 is 21:06:16 IS is historical -- dates back to F83 IIRC. 21:06:19 arke: would you install pearpc and try something in herkforthos for me? 21:06:23 : IS ( n - ) ' 1+ ! ; 21:06:55 oh right, x85 has 5 byte branch instructions 21:07:10 arke why 1+ 21:07:16 oh 21:07:18 I440r: skips past opcode 21:07:19 i know why 21:07:23 one byte for opcode 21:07:25 right 21:07:26 even I know why! 21:07:31 funny that. 21:07:38 freekin subroutine threading 21:07:44 ick :P 21:07:44 learned about that trying to grok the colorforth branch table stuff 21:07:48 This all assumes that ' returns the address of the code, and not an execution token. 21:08:00 sure does 21:08:03 in an STC forth it will :) 21:08:07 my IS will have a much longer definition 21:08:23 ' always DID return the address of the code in a direct threaded forth didnt it ? 21:08:50 my ' color returns a pointer to the dictionary 21:09:07 the address field is relative, and 26 bits 21:09:26 and I have flush the caches 21:11:21 arke: Not in mine, yet it's STC too. 21:11:35 ' will return the index into the wordlist it belongs to. 21:11:59 Use >body to get the address of the word's body. 21:13:06 : is ' >body 1+ ! ; 21:13:07 :) 21:13:11 This allows me to use ' to get a word's name if I want to (via >prefix and >suffix). 21:13:16 F2 will point right at the code. 21:13:17 arke: Correct. 21:13:37 However, it'll happily crash if the IS'ed word isn't a deferred word. :) 21:13:50 BTW, 21:13:59 : foo vectored ; 21:14:14 compiles a single JMP instruction -- hence, it's an adequately deferred word. :) 21:14:22 (in my Forth that is) 21:14:28 where: 21:14:59 : vectored -1 abort" Attempt to execute uninitialized, deferred word!" ; 21:15:30 :) 21:15:39 But I digress. 21:16:02 I'll slowly evolve my Forth to include more creature comforts. But for now, it'll be starkly basic and minimal. 21:16:08 in F2, : >body ; 21:16:17 kc5tja: :) 21:16:28 kc5tja: it works now, thanks for your help. That was so "DUH"! 21:16:38 heh, my IS creates a branch instruction, and sticks it at the first ones CFA 21:16:44 or, where the CFA points rather 21:16:54 as long as there's 4 bytes avaialable there, it'll work 21:17:23 what i dont like is the lack of absolute direct jmp/call in x86 21:17:47 arke: It is a slight annoyance, but I overwhelmingly prefer it, personally. 21:17:59 It makes relocatable code much easier. 21:18:23 kc5tja: in all this time they coulda added an opcode to do that. it ain't hard to offer both, now is it? :) 21:18:41 Anyway, I need to get to work. I'll be back online in as little as a half hour, and up to an hour and a half (depending on how dire it is at the NOC). 21:18:57 kc5tja: ok. i might be asleep by then :) 21:19:04 arke: It takes more transistors, and offers little to no benefit. 21:19:29 because intel REALLY CARES about the number of transistors, right? 21:19:29 :) 21:19:50 Intel actually re-uses internal infrastructure extensively. 21:20:31 AMD is actually far, far worse an offender than Intel is, since they use computer-synthesized CPU cores. Intel still does designs by hand! 21:21:39 hehe 21:21:40 :) 21:24:32 Anyway, I'm on the road. Back in up to 1.5 hours. 21:25:56 and there she is: 21:25:58 : make-branch ] $12 opcode |26 a ; 21:25:59 : -is ] over - make-branch over ! aflush ; 21:25:59 : is ] dict->cfa swap dict->cfa swap -is ; 21:26:34 mmm... I really should fix the exporter so it doesn't stick in those redundant ] symbols 21:26:50 it didn't use to. 21:26:58 then I "simplified" it 21:27:02 little too much 21:32:09 Herkamire: so the memory from the previous IS becomes unused? 21:33:42 oh, nevermind 21:38:06 if you do something like: : foo 1 . 2 . 3 . 4 . ; ' foo ' bar is 21:38:24 then most of the heap space for the compiled foo becomes deadwood 21:42:15 --- nick: arke -> arke|sleep 21:56:18 --- quit: Sonarman ("night") 22:24:49 --- quit: ianp (Read error: 60 (Operation timed out)) 22:35:28 Back for now. 22:35:43 Morning. 22:36:22 re +Robert. :) 22:36:27 * Robert just enjoyed about 4-5 hours of something that felt a little like sleep. 22:36:48 Heh. Thank you, at-kc6tja. 22:36:57 :) 22:37:21 Hrm. Java homework until tomorrow, and the teacher hasn't even handed it out yet. 22:37:33 Hey, at first I actually thought you somehow managed to convince the IRC server to let you have a + as your name's first character. Then I remembered, it's a voice flag. :) 22:38:15 Oh, hehe. Not used to seeing it, I see 22:39:19 Hmm... How much do you think I get beat up if I use "Low Fat Computing" (subtitle: "A politically incorrect essay") as a source for my work about bloatware? ;) 22:40:18 Well, you should always ask permission of course. However, in professional literature, as long as you provide proper citations, you should be 100% free and clear. 22:40:42 There is no shame in providing citations to another document. 22:41:02 The problem is that I have that article, and the other I was linked to in here (were you present when we discussed this last time?), both kinda look like crackpot rants. 22:41:07 --- join: Serg_penguin (~z@212.34.52.140) joined #forth 22:41:13 hi 22:41:25 So "proper" articles or other texts about the subject are most welcome :) 22:41:26 Hi Serg_penguin 22:41:51 * Serg_penguin just bought an SQL book - wanna make yet another traffic analyzer 22:42:09 re Serg_penguin 22:42:24 Robert: What is the other article you were given a link to? 22:42:35 http://www.laputan.org/mud/mud.html 22:45:44 I don't think the latter is any unprofessional at all. 22:47:45 It just looks that way ;) I'm thinking about the funny picture in the beginning, and the fact that you see _a lot_ of "BIG BALL OF MUD". Not saying it's wrong, but it sure looks like a long rant. 22:48:12 Who cares what it looks like? It's the content that counts. 22:49:04 Answer: A snobbish professor who haven't heard about Forth, or even programming. 22:49:13 And you can even include footnotes in your own document. For example: "We acknowledge that the document referenced appears to be hastily written. Nonetheless, it still contains valid points we believe to be pertinent to the topic of this paper." 22:49:31 Hehe. :) Yeah, I'll go with something like that. 22:49:41 Thanks for your help 22:51:22 n/p 22:51:52 hmm, anyone knows good proxy log digger ? 22:55:11 Robert: Interesting; in reading the abstract of Ball Of Mud, the author is not advocating for the use of Ball of Mud -- however, he is attempting to explore why it is so much more popular than, say, component-based systems. 22:55:48 In other words, his attempt to write this document is intended to help the more, dare I say it, academic approaches towards the construction of software. 22:56:34 By recommending them to not be lazy and continue using patched dirty hacks forever? :) 22:56:50 What? 22:56:52 No. 22:56:55 Read his introduction. 22:57:23 He wants to learn why BBOM software is popular, so that he can apply the same concepts to more rigorous software construction methods. 22:58:11 "A sustained commitment to refactoring can keep a system from subsiding into a BIG BALL OF MUD." 22:59:52 Ah, yes... Haven't actually read the document yet, just skimmed the first parts through to see what it looked like. 22:59:53 I like the sound of that 23:00:01 But now I have to leave for school, see you later 23:00:06 Herkamire: Forthish :) 23:00:07 "Still, some of them may strike some readers as having a schizoid quality about them. So, for the record, let us put our cards on the table. We are in favor of good architecture. 23:00:10 Our ultimate agenda is to help drain these swamps. Where possible, architectural decline should be prevented, arrested, or reversed. We discuss ways of doing this. In severe cases, architectural abominations may even need to be demolished. "\ 23:01:30 I just demolished a befuddling bug 23:59:59 --- log: ended forth/04.09.19