00:00:00 --- log: started forth/03.04.20 00:00:01 --- log: started forth/03.04.20 00:00:01 * Speuler thinks about writing a genetic battle program synthesizer 00:19:48 --- quit: tgunr (Remote closed the connection) 00:20:43 --- join: tgunr (~davec@vsat-148-63-143-139.c189.t7.mrt.starband.net) joined #forth 01:17:44 --- quit: bwb ("Later") 03:14:42 --- join: karingo (karingo@114.portland-01-02rs.or.dial-access.att.net) joined #forth 04:01:34 --- quit: karingo () 04:10:11 --- join: karingo (karingo@132.portland-01-02rs.or.dial-access.att.net) joined #forth 04:42:11 --- quit: tgunr (Read error: 104 (Connection reset by peer)) 04:56:59 what the hell is a war bot Speuler 04:57:03 other than those lame script kiddie things 07:06:04 --- quit: karingo () 08:01:29 --- join: sifbot (~sifforth@h0030657bb518.ne.client2.attbi.com) joined #forth 08:01:29 Type sifbot: (or /msg sifbot to play in private) 09:07:57 --- join: monk23 (~mind@193.140.248.25) joined #forth 09:08:06 hi ! 09:09:04 --- quit: monk23 ("reboot") 09:16:26 --- join: wossname (wossname@HSE-QuebecCity-ppp80706.qc.sympatico.ca) joined #forth 09:28:05 --- join: monk23 (~mind@193.140.248.25) joined #forth 09:54:25 --- join: snowrichard (~cpu2@c66.190.103.147.ts46v-01.mrshll.tx.charter.com) joined #forth 09:58:26 --- quit: snowrichard ("using sirc version 2.211+KSIRC/1.2.4") 10:05:41 --- join: I440r (~nospam@1Cust65.tnt1.bloomington.in.da.uu.net) joined #forth 10:05:41 --- mode: ChanServ set +o I440r 10:34:03 byes 10:34:13 --- quit: monk23 () 10:40:33 --- join: tgunr (~davec@vsat-148-63-143-139.c189.t7.mrt.starband.net) joined #forth 10:55:31 --- quit: tgunr ("signing off, brb") 11:06:15 --- join: tgunr (~user@vsat-148-63-143-139.c189.t7.mrt.starband.net) joined #forth 11:40:01 --- join: MrBean (~NoUser@d77243.upc-d.chello.nl) joined #forth 11:41:14 --- join: kc5tja (~kc5tja@ip68-8-206-137.sd.sd.cox.net) joined #forth 11:41:39 speuler there ? 11:42:07 hm 11:42:16 later... 11:42:19 --- part: MrBean left #forth 11:49:13 --- quit: wossname ("geh IS meh") 12:00:41 --- quit: tgunr (Remote closed the connection) 12:06:06 --- quit: I440r (Connection reset by peer) 12:22:08 --- join: monk23 (~mind@193.140.248.25) joined #forth 12:24:22 --- join: crc (12345678@AC98A687.ipt.aol.com) joined #forth 12:39:45 --- nick: monk23 -> monk23_busy 12:46:33 --- join: deluxe (~deluxe@p50805372.dip.t-dialin.net) joined #forth 12:47:32 elo! 12:48:47 hola deluxe ! 12:49:24 elo busy! :-) 12:50:26 * deluxe installing 12h a prg... 12:50:30 LOL 12:51:02 or was it 16h? 12:51:05 monk23_busy : coding some java stuff 12:51:26 that is? 12:56:19 monk23_busy: the thread pool stuff? 12:56:45 no. i passed it. i waste my time with some SNMP Tables stuff 12:58:02 i am using a synchronizer object to interact parent and child threads.. 13:13:34 however my time is up for tonight :( 13:16:34 still in the lab? 13:17:15 yep. 13:19:19 my time ends at 23:30 . i have 3 mins 13:19:23 --- nick: monk23_busy -> monk23 13:21:07 well then, have a good time... 13:21:10 --- join: mur (murr@baana-62-165-186-221.phnet.fi) joined #forth 13:21:29 thanks :) 13:22:20 cu l8ter 13:23:14 (maybe i will have some q's after the next 12h install ;-) 13:27:15 byes 13:27:19 --- part: monk23 left #forth 13:27:45 evenign 13:29:47 re mur 13:29:59 have i been online today ? 13:30:09 * mur doest really know.. 13:30:30 hello anyhow :) 13:30:39 * mur has been doing artworks the (beginning) of the day 13:31:10 i'm quite happy with the results 13:31:18 Neat. 13:31:21 What kind of art? 13:31:38 modern arts 13:31:39 :) 13:31:52 i have made new covers to easter egg plastic shells 13:32:05 using ink, wax colours and sandpaper 13:32:33 i'll add on them vernissage later but not now - it smells much! 13:32:45 heh 13:33:01 Well, it's afternoon here, and I'm hungry. 13:33:10 And since it's such a nice day out, I'll take my bike instead of my car. 13:34:03 good 13:35:14 --- join: wossname (wossname@HSE-QuebecCity-ppp80706.qc.sympatico.ca) joined #forth 13:35:35 --- nick: kc5tja -> kc-bike 13:43:51 --- quit: crc ("Leaving...") 14:02:43 njd: that'a a prog combatting other programs, trying to eliminate them by corruption or workspace deprivation 14:03:13 'morning all 14:03:40 evening Speuler 14:03:44 hi 14:03:58 * Speuler just got up 14:04:33 what do we have today .. hmm . australian time :) 14:05:22 Hi :) 14:06:01 wow, nice http://nogahshell.net/ 14:16:14 --- quit: deluxe ("bb") 14:35:55 --- quit: mur ("MURR!") 14:39:35 --- join: deluxe (~deluxe@pD950F4DF.dip.t-dialin.net) joined #forth 14:44:59 --- join: Herkamire (~jason@h0030657bb518.ne.client2.attbi.com) joined #forth 14:50:28 --- quit: deluxe (Read error: 104 (Connection reset by peer)) 14:52:03 --- join: deluxe (~deluxe@pD950F4DF.dip.t-dialin.net) joined #forth 15:13:26 --- quit: wossname ("gayming") 15:23:47 --- join: tcn (~r@tc2-login4.megatrondata.com) joined #forth 16:05:37 --- join: MrBean (~NoUser@d77243.upc-d.chello.nl) joined #forth 16:05:47 speuler there ? 16:06:13 hello Mr Bean. 16:06:17 hi 16:06:29 was looking for speuler 16:06:35 seems to be away 16:06:40 sorry to dissapoint you. 16:06:45 but he is semtex and Speuler. 16:06:47 Heh. Hi MrBean 16:06:48 same person. 16:06:59 ? 16:07:03 ah 16:07:12 both away i guess 16:07:50 ill talk to him later.. 16:07:59 not forth related ;) 16:08:25 k 16:08:27 bye 16:08:43 au revoir. 16:08:49 --- part: MrBean left #forth 16:09:01 hey all.. what's up? 16:09:10 wrist braces. 16:09:38 need to keep my wrist attached to my arm. 16:10:47 * Robert wonders what to do. 16:11:11 about what? 16:11:22 Robert: do you know if anyone in #asm* does MIPS? 16:11:24 i think you need to quit irc for a while :) 16:11:40 hehehe. 16:11:47 what would I do? 16:11:51 gilbertdeb: No idea. 16:12:00 it is mostly from typing evilly long papers. 16:13:45 I need to find me a secretary... 16:13:48 hmmm. 16:15:02 Marry someone. Tell him why later 16:15:23 _him_ ? 16:16:55 :P 16:16:57 Well, her 16:17:01 Or whatever,. 16:17:02 It. 16:17:10 Just get someone to write your papers. 16:17:18 And type on IRC for you :) 16:17:30 I'd secretly rather have 4 hers living in different cities or visiting at alternate times :P 16:17:40 but 1 good she will do as well. 16:17:54 first he'd have to move to Vermont.. heh 16:18:05 whats in vermont? 16:19:00 4 ladies. 16:19:13 ah no. the legalized same gender marriages. 16:19:34 why it was ever illegal, I'd never no. too many neopuritans here. 16:20:57 Bah, if you don't like it - make it illegal. 16:21:13 having 4 wives is a big no no. 16:21:18 again, I do not know why. 16:26:33 --- nick: kc-bike -> kc5tja 16:27:58 hey kc 16:28:02 re 16:28:09 Awesome bike ride. 16:29:50 death defying mountain biking? 16:30:07 nope 16:30:17 fossil fuel defying mountain biking. 16:30:19 Death defying road cycling in California. 16:30:35 hehe 16:30:50 Averaged 8.4 MPH, despite the major slowdowns on the up-hill treks. 16:31:16 well, I should gone for a ride today but instead I was working on this computer.. and easter supper :) 16:31:37 I am a side walk king. the drivers in miami are happy to run anyone over. 16:31:51 My family is in New York state, my roommate is having Easter supper at his parents house, leaving me all alone here... 16:31:56 I'm really enjoying Easter for a change. :D 16:32:07 Heh. 16:32:14 kc5tja: you made everyone dissapear! :O 16:32:17 heh.. well i ate mine myself too :) 16:32:18 It's sunny, it's quiet, it's peaceful, ... and that bike ride was damn sweet. 16:32:35 Right, moments like these should be shared with #forth, not family ;) 16:32:54 Oh, I had a dream about I440r tonight. I spend way too much time on IRC :) 16:32:55 had supper with them yesterday 16:33:07 but /they/ didn't have kielbasa 16:33:10 Ironically he had a big house at some caribian island. 16:33:33 a dream about i400r .. hahahhahahahahahahahahahahahhahahaAHAHAHHAHAHAahhah 16:34:18 Marry someone. Tell him why later 16:34:21 hmmm robert? 16:34:23 ;) 16:34:27 i know what you mean though.. i've had dreams about mapping (work).. or nethack.. 16:36:06 I dreamt I was reading starting forth... the section on create does> 16:36:18 still not sure if I turned the page or not ... 16:36:19 :) 16:36:31 #forth people seem to have very odd dreams. :) 16:36:47 Robert: I'd say. 16:37:07 the other day, ianni dreamt up forth code in an odd way and made pictures too. 16:38:45 Heh. 16:38:49 Freaks. :) 16:39:07 sayeth the leader of the conga line ... 16:40:46 --- join: bwb (~bwb@ip68-4-121-108.oc.oc.cox.net) joined #forth 16:41:26 ." Happy easter" 16:41:44 ." ? 16:41:48 sifbot: .( happy lord vishnu day ) 16:41:49 Compile-time, duh :P 16:41:50 gilbertdeb: happy lord vishnu day 16:42:01 Robert: I know 16:42:04 --- quit: deluxe (Read error: 60 (Operation timed out)) 16:42:05 bwb: :) 16:42:20 * Robert pets the bwb 16:42:24 We still love you. 16:42:26 ? 16:42:31 * bwb not pet 16:42:31 Ah 16:42:33 Nevermind. 16:42:35 :) 16:45:14 * tcn is away. Automatically set away [SZon] 16:47:00 wtf? 16:47:37 ? 16:47:56 auto-away 16:50:46 oh well, i should be going 16:50:54 see ya's all 16:50:55 --- quit: tcn ("That's it for today") 17:00:00 Hmmm 17:00:40 For my 65816 computer, I think it would be cool to bootstrap the thing from a paper tape. Just to be wildly anachronistic. :D 17:00:53 (obviously using 8-bit codes instead of 5-bit codes) 17:00:53 how would you do that? 17:01:01 Heh 17:01:03 Well, the first thing I'd do is NOT use paper-punch. 17:01:08 You're insane. Good. :) 17:01:14 Instead, I'd use reflective techniques. 17:01:22 This way, I can print out my boot code on my laser printer. 17:01:31 1. how are you going to get a papertape reader. 17:01:39 gilbertdeb: I will make one. 17:01:45 2. how are you going to get the tape? 17:01:52 I already explained #2. 17:02:06 reflective techniques? 17:02:09 what does that mean? 17:02:17 Let me finish, and all will become clear. :) 17:02:31 So, I would print out my bootcode to the laser printer. 17:02:42 THen I'd cut the pages into strips, and tape/splice them together. 17:03:04 any channels on this network for general embedded systems/microcontroller/electronics hardware development stuff 17:03:05 Each strip would consist of nine rows, each row containing either a black dot or not. 17:03:22 Eight of the rows corresponds to the eight data bus pins. 17:03:29 natty_: you are in one of them. shhhh 17:03:31 The nineth row contains a "data valid" bit. 17:04:04 sweet 17:04:19 Anybody familiar with PIC 17:04:25 To read in the data, the tape reader would maintain an address counter. I'd push a button to reset the address counter to $00E000. 17:04:34 Microchip PIC 16 series devices specifically 17:04:42 natty_: Not I. :( I'd like to be, but I just can justify it right now. 17:05:18 Too bad :( I'm working on my Doppler DFer USB computer interface 17:05:32 having some hardware interfacing issues... 17:05:33 Then as the paper is pulled through the reader, it waits for that data valid bit to be asserted, wherein the data on the remaining 8 bits are strobed to the bus. Since $00E000-$00FFFF will be RAM in this type of system, it'll "load" in the kernel image. 17:05:50 Oooh, you're doing USB stuff.... 17:05:54 That sounds like fun. 17:06:03 yeah but the problem isn't with the USB, that was actually super easy 17:06:10 How'd you do it? 17:06:23 Did you implement the USB protocol in software on one of the PIC chips? 17:06:24 natty_: good. you distracted kc5tja from his dream!! 17:06:27 I called microchip and said "Hey send me some free USB PICs" and they were like "OK" 17:06:30 gilbertdeb: No he didn't. 17:06:50 You can download the USB firmware from their web site 17:06:57 Oh, that's a pity. I was hoping that the PICs would be fast enough to implement the USB protocol purely in software. 17:07:24 Well a lot of it IS in software 17:07:26 I'd really like to use USB for my 65816-based PC for connecting mice and keyboards to. And other stuff. 17:07:36 natty_: I mean bit-bashing. 17:07:59 Most USB-enabled microcontrollers are unable to serve as a USB host controller; only as a USB slave device. 17:08:02 Hm I haven't looked into bit-bashing, thankfully I haven't had to :) 17:08:38 I suspect that the only special hardware is a USB specific UART, the rest is done in software 17:08:39 gilbertdeb: Anyway, that's my idea. It's relatively simple to do, though bulky, and not nearly as fast (or small) as using ROM. 17:09:04 I always wondered... how can one burn ones own rom chip? 17:09:09 and how much would it cost? 17:09:10 But the PIC is also only capable of low-speed, which precludes it from being a host or hub 17:09:14 natty_: Most USB uarts do things like address matching for you, among other things. 17:09:30 gilbertdeb: $200 for an EPROM burner made commercially (usually) 17:09:39 gilbertdeb: blank EPROMs are pretty cheap. 17:09:40 Although, hm I guess I don't know, the standard might not prohibit low-speed only hosts & hubs 17:09:42 for the burner? 17:09:47 tell me more.. 17:09:47 gilbertdeb: Then an EPROM eraser usually is around $80 or so. 17:09:49 url? 17:10:00 You can burn eproms with most PC motherboards :) 17:10:02 gilbertdeb: Look around. Jameco, etc. 17:10:13 natty_: I'm not talking about home-brew parallel-port burners. 17:10:17 I konw 17:10:23 natty_: Those aren't guaranteed to work with all EPROM types anyway. 17:10:24 I wasn't either 17:10:38 I was suggesting you erase your BIOS and burn whatever else you want on there :) 17:10:46 Kind of hard to boot up after that though 17:10:48 * kc5tja thinks --- No. 17:10:56 :) 17:11:09 Besides, that's not EPROM -- that's EEPROM, and more often, Flash ROM. 17:12:11 * kc5tja would rather build one of those parallel port burners for EPROMs. 17:12:27 * kc5tja has seen a few, but I'm not 100% convinced that they'll work in all cases. 17:13:27 --- quit: bwb (Remote closed the connection) 17:15:08 Here's one on the net that uses the parallel port; loads data into the supporting hardware via serial bit-stream (which is how I'd do it too!), then strobes a bit to program the ROM. 17:15:20 http://home.quicknet.com.au/andrewm/eprom1/ 17:17:13 my forth is shaping up :) 17:17:26 I just wrote something that prints out the whole source in color 17:17:36 it's a far cry from an editor, but it's a start :) 17:18:09 Herkamire: Are you writing an editor with source code coloring support? 17:18:20 Herkamire: Or is it a ColorForth? 17:18:25 colorforth 17:19:28 and I'm storing the source in a binary format with the dictionary lookups and colors coded in. 17:19:35 but that format is useless without an editor 17:21:21 all words in src are 16 bits. 4 for color. for compile, execute and define colors, the other 12 bits are it's offset into the dictionary. 17:22:51 Are the 12 bits an index into an array of words, or an actual byte-offset into the dictionary space? 17:23:02 If an offset, that's a really tiny dictionary. :) 17:23:32 depends on how you look at it. 17:23:44 if you keep the 12 bits high, then it's bytes 17:24:07 (16 byte dictionary intries) 17:24:17 12 bits is an index. 17:25:08 Oh, I see. 17:25:15 kc5tja: is your machine going to display via a television? 17:25:24 So the dictionary entry, then, holds the real address of the word's definition then? 17:25:40 gilbertdeb: I'm working very hard to make it display via VGA monitor. 17:25:56 wouldn't it be easier to make it plug into a tv? 17:25:59 kc5tja: yes, and the text for the word 17:26:15 I mean, I can definitely make it display via VGA, but I'm looking to get a maximum number of colors using various techniques. 17:26:31 Herkamire: OK, I see. So it's indirect threaded then. 17:26:46 --- quit: njd () 17:26:51 kc5tja: I don't think so. I forget what that means again. 17:27:03 I wrote an assembler, and everything compiles native. 17:27:26 OK. 17:27:37 the text is just there for the editor to display, and do name lookups as you type. 17:27:40 So you store both the source text AND the compiled form in memory then. 17:27:45 * kc5tja nods 17:27:48 OK, I get it. 17:27:59 Interesting. 17:28:24 I'm just using that format for my source file instead of ascii. 17:29:21 * kc5tja was probably going to experiment with his own ColorForth variant someday. In particular, with ColorForth, I see no reason for a MACROS and FORTH vocabulary split. Words you want to execute at compile-time just appear as executed tokens, instead of as compiled tokens. This eliminates the distinction between the two word types. 17:29:25 my source file has 3 parts: 1) dictionary. 2) source. 3) data 17:29:53 kc5tja: I don't have a seperate vocabulary. 17:30:20 I haven't made immediates or anything yet. which is currenly annoying. I haven't decided how I want to deal with it. 17:30:26 So words like BEGIN and IF in every way the same as normal words then? 17:30:56 I'm currently putting words like IF in the execute color. (that's what's annoying) 17:31:01 In my proposed environment, there wouldn't ever be such a thing as an immediate word. 17:31:14 Ahh, so you're already doing what I was going to experiment with. 17:31:19 kc5tja: what would you do with IF and the like+ 17:31:29 --- join: njd (melons@njd.paradise.net.nz) joined #forth 17:31:30 Exactly what you've already got. :) 17:31:34 hey Speuler 17:31:36 heh :) 17:31:58 I already distinguish between "system" and non-system words by case. Why shouldn't I distinguish them by color, especially if doing so automatically takes care of immediacy for me? 17:32:10 I discovered I really liked that technique when I was developing FS/Forth's target compiler. 17:32:23 kc5tja: currently it's bothersome. but I think I'm going to write an editor before I do anything about it. because that might make it a non-problem. 17:32:25 In the target compiler, Pygmy words that start with \\ are visible as "immediate" words to the target image. 17:32:48 Speuler ive done everything except for [] 17:32:57 kc5tja: cool. 17:33:12 I discovered that many compiler words invoke other compiler words; having to POSTPONE or [COMPILE] them is aggrevating for me. 17:33:17 So, I have things like: 17:33:35 : \\REPEAT \\AGAIN \\THEN ; 17:33:49 kc5tja: I have a naming convention for words that compile something. 17:33:58 That's when I realized that my punctuation prefix could be considered a "color token," and that's what led me to my current idea. 17:34:38 Herkamire: As do I; except for words already defined by the ANS standard (no point in avoiding those), all my compiling words end with a comma. 17:34:42 Including all the assembler words. 17:34:51 I support "code" words using interpret-mode, like this: 17:35:08 : + [ bp sp xchg, bx pop, bp sp xchg, bx ax add, ] ; 17:35:23 (I use subroutine threading, so this kind of thing works *beautifully* well for me) 17:35:24 I do want to be able to type if without hitting keys to make sure it's in the execute color. but I haven't how that's going to happen. I could do immediates. or I could have the editor color it execute for you. 17:36:35 * kc5tja nods 17:37:22 which one is subrutine threading again? that's where your definitions are actual machine code right? 17:37:43 Ya, a bunch of call statements, typically... 17:37:58 Interesting to see somebody still using subroutine threading... I thought that went out of vogue years ago... 17:38:04 and indirect threaded means your definitions are a bunch of addresses. 17:38:23 Well, a bunch of addresses pointing to address of machine code... 17:38:58 Fractal: Subroutine threading is an enabling technology for me to "inline" assembly into a normal Forth definition. 17:39:08 tathi decided that indirect threaded would be a bunch slower on PPC (my platform) 17:39:13 Fractal: It's also the enabling technology that lets me evolve towards a more intelligent compiler that produces real native code. 17:39:37 Ya, it certainly has it's uses... 17:39:46 its 17:39:59 yay :) I wanna write an optomizer too. that's another reason why I want to have things execute when they are in the compile color. 17:40:10 Fractal: Also, subroutine threading is markedly faster of processors like the 6502/65816 and 6800 series, because it eliminates a whole bunch of memory and register operations on these CPUs. 17:40:26 it seems very sily to compile a subroutine call for dup which is just one instruction. 17:40:47 I do that for the time being, but that'll go away quickly. 17:40:57 The execution performance seems to be on par with Pygmy Forth for my system. 17:41:08 my convention for a word that compiles something is to start it with a _ 17:41:12 Space overhead is only 33% larger, due to the extra byte being compiled in per word call (the CALL opcode) 17:41:15 right now I have dup and _dup 17:41:18 kc5tja : How many bytes does it take for a long call on those processors though? 3 bytes? 17:41:31 Ya 17:41:55 Fractal: 6502 only has 16-bit JSR form, so it takes 3 bytes. The 65816 has both 3-byte and 4-byte forms (the 4-byte can JSR to anywhere in the 16MB address space) 17:41:58 kc5tja: it's different on ppc. on ppc there is overhead per definition (not per call in there) 17:42:12 The biggest problem with optimizing forth compilers is that, of course, you can't decompile words very easily... It also makes forth source level debuggers much more difficult to write. 17:42:27 x86 has overhead in both places. There's the overhead in invoking the subroutine (the time it takes to invoke the CALL instruction), adn the time it takes to RETurn from it. 17:42:39 Herkamire: PowerPC also has this overhead. But it's much, much, much, much, much faster than x86. 17:43:09 yeah. I think that's why there's so many indirect threaded x86 forths. 17:43:13 I want it to be native. 17:43:16 I really like PPC 17:43:19 Fractal: That isn't an issue for me. I have my source, and I do extensive unit-testing anyway. I don't recall the last time I really needed a debugger for my work. 17:43:27 PPC also seems like it would be a lot of fun to optomize. 17:43:30 on 17:43:49 Herkamire: Actually, direct threading is the "fastest" on x86 platforms. But with modern processors, branch prediction makes subroutine overhead negligable. 17:44:03 heh :) 17:44:18 MOV EAX,[ESI] 17:44:21 yes. the new PPCs have great branch prediction 17:44:21 ADD ESI,4 17:44:26 JMP EAX 17:44:43 that's direct threaded. 17:44:46 This is indirect threaded: 17:44:49 MOV EAX,[ESI] 17:44:54 ADD ESI,4 17:44:57 MOV EBX,[EAX] 17:45:02 JMP EBX 17:45:11 what's ESI? 17:45:20 The "source index" register of the x86. 17:45:37 80x86 has only 7 general purpose registers (versus 32 in PowerPC). 17:45:39 that's where the call should return to? 17:45:47 EAX, EBX, ECX, EDX, ESI, EDI, and EBP. 17:45:59 ESP is the stack pointer, and that's cooperatively managed by both the software and the hardware. 17:46:10 In the above code, ESI is the virtual instruction pointer. 17:46:48 why do you need an virtual instruction pointer in direct threaded. 17:47:00 To keep track of where you are in the Forth program. 17:47:02 can't your code just be: CALL CALL CALL CALL 17:47:09 Herkamire: That's subroutine threading. 17:47:15 right. 17:47:42 there's three methods! that's why I'm all confused. 17:47:43 That actually has higher overhead at run-time than direct threading on Pentium and earlier x86 processors. 17:47:52 I thought there was just subroutine threaded, and indirect. 17:48:19 No 17:48:22 No no no 17:48:31 that's why I can't keep the terms straight. 17:48:36 so how does direct threaded work? 17:48:37 There's a number of different threading techniques... 17:48:37 Indirect threading was the first, then it was optimized to direct threading, and then subroutine threading, and now, native code compilation. 17:48:51 Direct threading points directly to executable machine code. 17:49:01 native code, is called subroutine threaded. 17:49:17 indirect threaded is when your definitions are a series of addresses 17:49:25 Nope. 17:49:32 Typically it points to a jump or call instruction, which jumps to the CFA 17:49:41 Indirect **AND** direct threaded is when your code is a series of addresses. The differences is what those addresses point to. 17:49:49 Herkamire : Yes, that's true, but direct threaded is a series of addresses as well. 17:49:54 ok. 17:50:06 tathi explained this to me once. 17:50:10 see if I have this right. 17:50:23 Herkamire : The advantage of indirect threaded code is that the code field is a simple address. 17:50:43 (This isn't much of an advantage, really, which is why most forths use direct threading) 17:50:50 one of them (direct?) has those addresses pointing to some code which loops through the definition of the funtion you are branching to. 17:51:13 Herkamire: You have that in indirect threading too. It's called DOCOLON usually. 17:51:30 where is indirect has the address pointing directly to the first address in the definition of tho word you are branching to 17:51:52 * kc5tja grins -- let me try to explain, in PowerPC assembly language. 17:51:59 :) 17:52:12 what's the difference between direct and indirect? 17:52:16 Well usually you'll have DOCOLON in direct threading too. It's just a difference between how the NEXT routine handles the code field address of each word, the DOCOLON CFA for instance. 17:52:22 # INdirect threading; r1->I, r2->W 17:52:31 _NEXT: 17:52:52 ldwu r2,4(r1) 17:53:10 mtspr r2,lr 17:53:13 blr 17:53:16 17:53:30 doggone it; that should read DIRECT threading, not INDIRECT threading. 17:53:35 what's r1 and r2? 17:53:40 ok 17:53:54 R1 is the virtual instruction pointer (I), and R2 is the word pointer (W) 17:53:59 17:54:15 # INDIRECT threading; same registers; r3 -> scratch register 17:54:18 _NEXT: 17:54:24 ldwu r2,4(r1) 17:54:37 ldw r3,0(r2) 17:54:45 mtspr r3,lr 17:54:46 blr 17:54:47 17:54:49 ok now the code makes sense. 17:55:32 Now, the "EXIT" word compiles a branch to _NEXT (not a call to _NEXT, but a real unconditional branch). 17:55:39 Note that my code is NOT optimized for minimum run-time. 17:55:55 There are tons of pipeline stalls in the above code, which is why it's one of the slowest forms to use on the PowerPC. 17:56:39 --- quit: natty_ (Read error: 60 (Operation timed out)) 17:57:19 Also note that, due to the behavior of how the ldwu instruction operates, the I pseudo-register must point 4 bytes AHEAD of the next Forth instruction to execute; that is, at all times, the I register is pointing AT the word that is CURRENTLY executing, rather than at the _next_ word to execute. 17:57:30 kc5tja: so, in indirect, the words that you're reading in (from r1) are addresses to what? the dictionary entry? 17:57:40 Yes. 17:57:55 oh. 17:57:56 ok 17:58:01 The first field of the dictionary entry (offset 0; hence 0(r1)) is usually the code field address for that word. 17:58:04 that's the difference? 17:58:09 That's the ONLY difference. 17:58:15 that's retarded. 17:58:19 * kc5tja laughs 17:58:29 why would anybody code something like that? 17:58:53 It has its roots in Chuck's original Forth implementations, for the really old, big-iron machines he used to use. 17:58:53 --- join: natty (~n1ywb@155.42.84.139) joined #forth 17:58:56 re natty 17:58:58 I suppose it makes it easy to change the difinitions of words that you've already compiled cals to, but you shouldn't do that. 17:59:10 kc5tja: ldwu == lwzu right? 17:59:15 Modern hardware generally doesn't rely on indirect threading except in some limited circumstances. 17:59:41 Load word and update; I'm only familiar with the PowerPC 601 assembler syntax (yeah, I know; a lot has changed since). 17:59:59 yep. it's lwzu 18:00:02 (and yes, that's the last PowerPC I ever programmed in assembly for... :( ) 18:00:13 Everything else since has been for MIPS. 18:00:45 kc5tja: good memory :) 18:01:09 I think it's possible to speed things up a bit by doing this: 18:01:20 ldw r2,4(r1) 18:01:26 add r1,4,r1 18:01:29 ..etc... 18:01:40 But I'm not sure how much it speeds it up by. 18:01:43 that would slow it down wouldn't it? 18:01:43 It's been too long. 18:02:06 Herkamire: Not necessarily. The ldw after the ldwu represents a read-after-write pipeline stall. 18:02:16 the add doesn't have that problem. 18:02:34 So although there are more instructions, it could be a net win performance wise. 18:02:57 --- quit: Fractal (Read error: 104 (Connection reset by peer)) 18:02:59 --- join: Fractal (hsnif@new.cure.for.SARS.found.to.be.strongLSD.com) joined #forth 18:03:05 oh, for indirect. I'm not even thinking about indirect. it seems so useless 18:03:15 what's the use of having your tokens point to the dictionary? 18:03:23 it just slows the whole thing down. 18:03:25 You could use smaller token sizes, for one. 18:03:31 oh, 18:03:37 good point 18:03:42 For example, a byte-code (e.g., Java) could be implemented this way, with 256 entries in the dictionary. 18:03:46 But yes, it is known to be slow. 18:03:48 right :) 18:03:59 Another reason is that it permits relatively easy "patching" of already compiled code. 18:04:02 that's probably why chuck did it in the first place. 18:04:06 Perhaps. 18:04:18 but now that we have rediculous amounts of memory... 18:04:39 Also, when your *EDITOR* does the compiling (as it does in ColorForth), it can actually make things rather convenient, because then you can just use straight look-up tables to do the compilation with. 18:04:56 exactly :) 18:05:10 with my compiled src the interpret loop is a joke 18:05:19 But I'm a punctuated Forth person for the time being; I need to finish FS/Forth before I explore ColorForth a bit. 18:06:06 my interpret loop (in asm) is 6 instructions. 18:06:12 Oh, can I see it? 18:06:18 Can you post it here? 18:06:54 lhzu r3, 2(source_cur) 18:06:54 rlwinm r0, r3, 2, 26, 29 18:06:54 clrrwi r3, r3, 4 18:06:54 # we pass the dictionary offset to color_* in r3 18:06:54 add r0, color_jump_reg, r0 18:06:57 mtctr r0 18:06:59 bctr # jump into the color_jump table, and have it return to the top of this loop. 18:08:08 When does this code execute? 18:08:21 This looks amazingly like the NEXT primitive of (in)direct threaded implementations. 18:08:29 * kc5tja is confused; you said your Forth was native code?? 18:08:49 that's the interpret loop 18:09:09 Oh, that's what's executed when interactive? 18:09:12 the jump table at color_jump_reg compiles or executes or whatever. then branches back to the top of the code I just pasted 18:09:32 kc5tja: yeah, pretty much. 18:09:41 it isn't really interactive, just the editor is. 18:09:47 * kc5tja nods 18:10:12 This is the interpretter when loading a block. :) 18:10:13 --- join: bwb (~bwb@ip68-4-121-108.oc.oc.cox.net) joined #forth 18:10:15 re bwb 18:10:19 re 18:10:31 It first compiles the block to tokens, then this walks over the token buffer and executes them. 18:10:43 (I'm guessing) 18:10:46 but that code reads the source (from source_cur) and calls the function to handle that color 18:10:48 what does? 18:11:01 --- quit: natty (Read error: 60 (Operation timed out)) 18:11:07 kc5tja: I store the tokens on disk. 18:11:17 when I start up my forth it reads in the file. 18:11:41 I also coded a much more complicated text interpreter (for me to use until I write my editor) 18:11:59 that code just handles source tokens 18:13:13 --- join: natty (~n1ywb@155.42.84.139) joined #forth 18:13:14 bwb: http://tunes.org/~nef/logs/forth/03.04.20 18:13:22 brb 18:30:40 --- part: bwb left #forth 18:35:36 --- quit: Speuler ("memory access violation at addr $80024b2d") 18:44:51 --- join: Fractal_ (popqdyjo@new.cure.for.SARS.found.to.be.strongLSD.com) joined #forth 18:48:48 --- quit: Fractal (Read error: 104 (Connection reset by peer)) 18:48:48 --- nick: Fractal_ -> Fractal 18:55:53 back 18:55:59 sorry; was on the phone with my parents. 18:57:22 and I had dinner :) 18:58:50 heh 18:59:10 If I work with ColorForth, I would start with the editor first, then work backwards towards the interpretter and compiler. 18:59:52 that makes sense, except what would you code the editor in? 18:59:56 Right now, with FS/Forth, I started first with the code to collect a line of input from the user, and had just finished writing the parser for it. Now the interpretter is a pretty easy piece of code to bridge the two. 19:00:24 I am not averse to coding in hand-compiled pseudo-Forth for something like that. 19:00:36 Especially for bootstrapping purposes. 19:01:11 I was either going to write an encoder or an interpreter 19:02:48 I must ask, though, do you prefer ColorForth over a more traditional Forth environment? 19:04:04 I think so. although what I'm doing isn't much different from traditional yet. I'm still using vim 19:04:32 since I don't have a colofroth editor, I put in symbols to denote the color changes. 19:04:56 Vaguely similar to my standardized prefixes then. :) 19:05:12 I have syntax highlighting to display the words in the right colors, but you still see the color change tokens 19:05:20 * kc5tja nods 19:05:38 So _ is a standard prefix for "compile this word" in your system? 19:05:55 That kind of fits in, I guess, since $ is used as a standard prefix for hexadecimal numbers. 19:05:55 : makes next word define [ switches to execute color ] switches to compile color 19:06:16 Hmm...can you post a simple example? 19:06:19 kc5tja: I like the idea of using comma 19:07:14 : |51 [ r_tos r_tos 21 6 10 _rlwinm ] aor [ ; 19:08:00 * kc5tja laughs! That's *almost* what my FS/Forth code looks like. To recap, this is actual source code for +: 19:08:11 my (temporary) text interpreter strips out the : [ ] and [ and colors the words accordingly 19:08:14 : + [ bp sp xchg, bx pop, bp sp xchg, bx ax add, ] ; 19:08:15 :) 19:08:26 exactly. 19:08:38 Only mine is in traditional punctuated Forth style. 19:08:45 (e.g., I support the idea of immediate words) 19:09:13 my text interpreter just strips out these: : [ ] ' and encodes the source tokens I described earlier. 19:09:25 * kc5tja nods 19:09:27 in the future the editor will do the encoding and I won't have those symbols. 19:09:54 Well, you might still have :. In Chuck's ColorForth, he has : VARIABLE and CONSTANT I think. 19:09:57 it's annoying to have to do [ if ] and [ ; 19:10:10 : makes all future red words define colon-definitions. VARIABLE makes all future red words define a new variable, etc. 19:10:26 Yeah, when hacking on plain text, I can see how that would get annoying. 19:10:32 cool! I didn't think of that 19:11:13 kc5tja: yep. partly why I haven't done anything about it, is that I won't be hacking in plain text for much longer. I don't want to solve a problem that will iether go away, or I'll see a better solution for soon. 19:11:39 Well, you can look at it this way: the editor is the solution to your problem. 19:11:56 yeah. I still want immediates though. 19:12:05 * kc5tja nods 19:12:14 I want to make the dictionary have to code pointers. one for the immediate definition, and one for runtime. 19:12:40 * kc5tja does that in FS/Forth by having two separate word lists: COMPILER and FORTH. 19:13:07 The only disadvantage to this solution is that a single word that exists in both wordlists will have two separate dictionary headers compiled. 19:13:15 for example DUP would have both. one would compile: addi stack, stack, 4 the other would execute 19:13:51 kc5tja: my major problem with that is that you cannot override a COMPILER word with a normal one. 19:14:03 I'm curious: Doesn't the top of stack also need to be stored in memory as well? Wouldn't it be addi stack,stack,4 followed by (or preceeded by) a stw to actually replicate? 19:14:07 I haven't decided how I want that solved though. 19:14:21 kc5tja: I cache TOS in a register 19:14:30 Herkamire: I have the same problem, since the compiler wordlist is always searched first. 19:14:51 oh, shit. sorry. it's: stwu tos, 4(stack) 19:15:03 Herkamire: That doesn't eliminate the problem. Indeed, it compounds it; when the TOS is mutilated into something else, it's permanently destroyed UNLESS you back it to RAM when DUP is called/compiled. 19:15:10 Herkamire: OK, that's better. :D 19:15:27 ooopsia 19:15:45 drop is two instructions though... grrr 19:15:52 * kc5tja nods 19:15:57 That does tend to get annoying, yes. 19:16:05 It could be worse though. 19:16:25 I just wish there was a post-decrement fetch 19:16:41 In FS/Forth under 16-bit DOS environment, I am *constantly* having to XCHG BP,SP to put the data stack pointer in SP to use PUSH and POP instructions, and XCHGing back when I'm done. 19:17:01 This is a huge time sink for my Forth. 19:17:18 But that's OK; I'm concentrating on correctness for the time being; I'll optimize the run-time environment for speed later on. 19:17:22 what's xchg? 19:17:25 And, when running in 32-bit mode, all that goes away. 19:17:27 Exchange 19:17:40 swaps the registers? 19:17:43 Yes 19:17:43 never mind. 19:17:45 ok 19:18:10 is that because you can only access memory with a certain register or something? 19:18:18 Yes 19:18:24 gotcha. 19:18:40 I've only done asm on PPC so this stuff all seems very wierd 19:19:00 In 32-bit mode, the register set becomes much, much more regular. EBP (the 32-bit version of BP) is useful as any old register, while using BP for addressing and address arithmetic is really slow and tedious. 19:19:31 I had a hard time believing that x86 doesn't allign instructions. 19:19:45 You haven't lived until you've done x86 assembly language. :D You have no idea of the kind of freedom you have until you work with a non-orthogonal, register-starved, designed-by-committee processor like x86. 19:19:58 lol 19:20:02 x86 opcodes are byte-encoded, not word-encoded, and can appear on any address alignment. 19:20:10 I know. 19:20:17 Some instructions are 1 byte long; others can be up to 16 bytes long. 19:20:19 I'm used to getting a segfault for that sort of thing 19:20:39 * kc5tja *adored* the 68000 architecture! I still do. I think it's the best CISC architecture processor in existance. 19:20:59 that's the 16 bit macs right? 19:21:09 The 68000 is a 32-bit processor. 19:21:19 It has a 16-bit external data bus, but it is a true 32-bit processor. 19:21:28 Macintosh, Amiga, and Atari ST all used it. 19:21:32 tathi says he really likes that. 19:21:40 And many, many, many, many, many, many, many Unix boxen. 19:21:56 he wants to make a handheld computer with the old dragonball that still uses 68K 19:22:27 16-bit opcodes (must be aligned on 16-bit boundary), 16 semi-general purpose registers (8 data registers, 8 address registers), user/supervisor modes, and an instruction set to die for. 19:22:53 * kc5tja was considering using the 68010 for his homebrew machine, but the 65816 is cheaper and runs almost as fast, clock for clock. 19:23:07 SHIT 19:23:16 natty: ? 19:23:22 my problem is far from what I thought it was (I was reading the PIC spec sheet wrong) 19:23:35 which is to say that now I don't know what it is 19:23:44 phone one sec 19:23:46 Oh, that really sucks. :( 19:23:46 time to try and steal a logic analyzer from the lab 19:24:25 natty: Sometimes, when stuff like that happens, I start over from scratch, adding software and/or hardware modules one by one and testing each thoroughly. 19:24:36 natty: Not sure if that'll help you in your project... 19:24:48 It's very expensive to do if you're really far into it. 19:25:41 that wouldn' 19:25:53 t really be feasable here. I need to troubleshoot it 19:26:48 natty: What project are you working on, anyway? Do you find USB really easy to work with from a developers perspective (this problem not necessarily withstanding)? 19:27:29 Oh yeah, it's tit. The PIC code especially is easy to use. Writing a device driver for your OS (linux obviously in my case) is the trickiest part 19:27:40 the hardware is damn simple 19:29:09 Cool. I've never done any USB development before, but I'd be interested in learning sometime in the future. 19:29:22 Especially since I want a USB host controller of some kind in my homebrew box. 19:29:54 natty: what sort of device are you making? 19:29:54 heh well I dunno about host controllers, I suspect most people just buy a chipset to do it 19:30:03 it's a RDF->PC interface 19:30:03 can you just use the usb/serial driver? 19:30:21 It's not a driver problem 19:30:45 the PIC isn't getting consistantly good data from the RDF unit 19:31:09 kc5tja: yeah 68K processors sound very cool. I haven't programmed for them though. 19:31:10 natty: No, actually they don't. The host controllers of today are firmly embedded inside the motherboards of PCs and Macintoshes. There are, to the best of my knowledge, NO separate host controller ICs for USB. :( 19:31:28 Herkamire: On the one hand, very RISC-like, and on the other hand, very CISC. :D 19:31:47 movem.l d0-d7/a0-a6,-(a7) <-- saves all registers on the stack; very CISC 19:32:08 smokes! 19:32:51 move.b 45(d0.w,[d2.l,a2]),99(d3.l,[d0.w,a5]) <-- HORRIBLY CISC (actually doesn't exist on 68010 and earlier; 68020 and later only) 19:33:07 I like the way my colorforth code looks without the symbols 19:33:13 move.l d0,12(a2) <- extremely RISC. :D 19:33:35 Fortunately, most 680x0 code is of the simpler variety. 19:33:49 I think it's wierd to cale a memory store, a load, and a remister copy "MOVE" 19:34:37 perhaps this is why they don't call it that anymore on ppc 19:34:42 I don't have much of a problem with it; indeed, most CISC CPUs do it. 19:34:49 yep. 19:34:52 I'm just not used to it. 19:34:52 The exception that I'm aware of being the 6502/65816 series. 19:35:05 (and the 680x 8-bit Motorola CPUs) 19:35:18 It's named such because it "moves" data around the system. 19:36:09 yeah. but it copies it 19:36:19 Technically, yes. :) 19:36:29 Have you read some of Henry Baker's papers on linear logic memory management? 19:36:36 no 19:36:40 never heard of it 19:36:43 The idea is that as you consume data in an operation, it's permanently destroyed. 19:36:58 For example, 1 2 + yeilds 3 on the data stack; the 1 and 2 are no longer to be found there. 19:36:59 like forth math 19:37:03 * kc5tja nods 19:37:12 But the concept can be extended to a lot more. 19:37:36 If you have a data structure that you'd like to read a field from, for example, reading that field disposes of the whole structure. 19:37:47 (in concept at least; obviously, that'd be a horribly expensive operation in reality) 19:38:17 where's he getting all this data that he can be so descructive with? 19:38:17 Thus, if you want to do something with an object, while still having that object hang around for later use, you must explicitly duplicate it. 19:38:37 ok, so lots of dups and overs :) 19:38:46 * kc5tja nods 19:38:47 sounds forth-like 19:39:24 He created a simple, theoretical virtual machine for one of his LISP compilers to compile to that had a TRUE MOVE instruction. MOV R1,R2 really DID destroy the contents of R1, for example. :) 19:39:52 This was done with tag bits in a special register, that recorded whether or not a register contents were valid or not. 19:40:07 heh 19:40:08 Pretty interesting stuff, actually. 19:40:44 I can't imagine what I could use 32 registers for 19:40:58 C compilers love them. 19:41:11 yeah, it's great for tha 19:41:13 It lets them keep a lot of stuff in "level -1 cache" so to speak. 19:41:18 that's why there are so many I presume 19:41:22 * kc5tja nods 19:41:37 RISCs are optimized for C and other similar languages (e.g., Pascal and Oberon could easily benefit from them). 19:41:53 8 is too small, though, even for some hand-written assembly language software. 19:42:02 * kc5tja finds 16 registers to be a really nice compromise. 19:42:42 I have stuff sitting around in registers that I almost never use (such as a pointer to the begining of my data section (which I only use to save my bootstrap) 19:43:25 When I port FS/Forth to Linux, I'm going to really wish I had extra registers. 19:43:30 Ditto for Win32. 19:43:30 I plan to write an optomizer, but I don't think that will use more than 4 or 6 registers 19:43:45 why? 19:43:57 The dictionary for it could potentially appear at *any* address, so I have to always keep the dictionary pointer in one particular register. 19:44:09 That leaves me with only 6 registers to use for other things. 19:44:16 oh right. 19:44:35 I keep forgetting that you can't use most of the registers. 19:45:36 Well, in 32-bit I can. 19:45:51 Only ESP has dedicated usage (ECX does too, but it's a LOT less than in 16-bit mode) 19:47:22 Here's probably how I'm going to break down the registers: Top of stack (EAX), next top of stack (EBX), loop counter (ECX), Address register (EDX), Data Stack Pointer (ESI), scratch (EDI), Return stack (ESP), data stack (EBP) 19:50:51 sweet I scored a 4 channel 100MHz HP digital scope :) 19:52:26 I have 10 registers for scratch and syscalls, and 20 regsers for my forth (tos, stack, rstack, dict, useless stuff) 19:53:25 I'm just glad I'm not doing direct threaded, or else I'd be even more cramped. I'd have to give up the second top of stack cache (EBX) and probably use that for the word pointer, and use EDI for the virtual instruction pointer. 19:53:35 That would suck, because then I won't have ANY free registers. 19:54:13 kc5tja: get a ppc ;) 19:54:19 Herkamire: Too expensive. 19:54:33 ok, now how's this editor going to work... 19:54:35 * Herkamire hmmmmmms 19:54:52 kc5tja: you said you liked 68K... get an old one :) 19:55:21 Herkamire: Even those are too expensive for me right now. I do have my Amiga 500 still, but it's in storage, and I have no place to set it up right now. And it won't work with VGA monitors. 19:55:42 oh well. 19:55:43 There's an Amiga 4000 up for sale on eBay right now, but that's out of my price range already. Until I land a job, I just can't afford to purchase it. :( :( 19:55:53 (Amiga 4000s use 68040s) 19:56:10 Otherwise, you can bet your bottom's dollar I'd jump all over it. :) 19:56:10 play with what you have :) 19:56:21 I am. 19:56:35 And I'm hating every minute of it. 19:56:49 I'm forced to use the PC architecture by default, not because I want to. 19:56:56 I did spend a lot on this computer. but it's almost three years ago, and I still consider it fast. 19:57:06 (dual G4 450Mhz) 19:57:18 kc5tja: by default? 19:57:27 ebay is the solution. whats the question? 19:57:34 My biggest problem with PowerPC-based motherboards, Macs not withstanding, are that they're just IBM PC/AT motherboards with PowerPCs on them for processors. 19:57:52 are they? 19:58:06 Even the Mac mobos are based heavily on "standard" PowerPC chipsets, which just have all the standard IBM PC/AT peripherals on them. 19:58:08 Yes, they are. 19:58:19 Some things are different, but not much. 19:58:40 The IDE interface is the same, the built-in interval timers are the same, the USB OHCI controllers are the same, etc. 19:58:50 whats the problem with that? 19:58:53 They do it to reduce cost of manufacture, which makes sense from that point of view. 19:59:01 its not as good as some other kind of board? 19:59:12 well, it's nice that everything is fairly interoperable too 19:59:24 The problem is that the hardware is bloated and monolithic -- you can't have nearly as much *fun* with them like you could the older hardware, which was much simpler and easier to bit-bang. 19:59:34 ah 19:59:52 you want @executable_path 19:59:55 For example, the floppy disk controllers on the standard chipsets do *NOT* give bit-level access to the data stored on a floppy. 19:59:57 misfire 19:59:59 Amiga's hardware does. 20:00:00 interesting 20:00:40 by bit-level you mean that you can read and write everything on there right? 20:00:54 And with the frequency with which floppy disks lose data now-a-days, having that bit-level access is awfully important for data recovery purposes. 20:01:05 Herkamire: Yes. EVERYTHING. 20:01:23 Amiga's floppies can read/write MacOS (fixed-speed) disks, PC disks, Atari ST disks, and of course, its own disks. 20:01:31 well, I say you aughta have bit-level access 20:01:54 I don't have a floppy at all 20:02:00 kc5tja: isn't it the software for the drive that does the reading? 20:02:05 gilbertdeb: No 20:02:12 gilbertdeb: Not for the PC, at least. 20:02:28 are you serious? 20:02:30 that sucks 20:02:31 gilbertdeb: The FDC does the reading; the PC merely offloads the 512 "cooked" bytes from the FDC into memory via a DMA channel. 20:02:35 the amiga had it in hardware? 20:03:11 gilbertdeb: Hardware/software; the hardware did **NOTHING** to interpret the data on the disk; it was entirely up to the software to interpret the contents of a cylinder into useful data for the rest of the system. 20:03:51 Likewise, when writing data to the disk, the software had to MFM-encode (or GCR encode if writing to an C1581 disk) the bitstream before sending it to the floppy for writing. 20:03:54 I haven't spent any money on computers since I bought my computer almost 3 years ago, but I'm considering buying one of Apple's 17" flatpannels. It's a lot of money for a luxury, but DAMN they're nice. I use this computer soo much 20:04:33 The only thing the Amiga's hardware did was DMA the raw cylinder data to and from memory. That's it. 20:04:48 kc5tja: sounds cool. 20:05:00 I want a 17" powerbook 20:05:03 Oh, it was. And it came in damn handy on occasion too. 20:05:12 i tried a 1ghz one at the store yesterday.. holy shit 20:05:15 I want to have access like that to IDE disks in my OS 20:05:17 im used to my 400mhz desktop.. 20:05:17 * kc5tja wants to know when 21" PowerBooks will become available... :D 20:05:25 kc5tja will ther ebe such a thing? haha 20:05:41 Doubt it. LCDs that big are horrendously expensive. 20:05:41 kc5tja: hehe :) 20:05:51 80% the cost of the laptop is the LCD, believe it or not. 20:06:14 kc5tja: and the most annoying part too :) 20:06:52 Hmmm....now that is an idea. Instead of hooking my 65816 to the VGA monitor, I suppose I could equip it with a spinning mirror projection display using red, green, and blue LEDs. :D 20:07:13 kc5tja: sounds like the amiga was the schizniz 20:07:21 gilbertdeb: It was. 20:07:33 gilbertdeb: If it weren't for the Amiga, we wouldn't have PCs as powerful as we have them today. 20:07:44 Macs would probably still be in the 256-color era. 20:08:03 kc5tja: what motivated the makers? 20:08:26 gilbertdeb: AmigaOS was a true, preemptive multitasking operating system that could run to full capacity in as little as 128KB of RAM. 20:09:15 gilbertdeb: The video architecture was the first the world had ever seen; an evolution of the Atari 800 video chipset, the Agnus and Denise chips provided the user with 8 sprites and up to 640x400 resolution graphics with 16 out of 4096 colors, and up to 320x400 graphics with up to 4096 colors on the screen at once. 20:10:12 I got to try an Amiga a few month ago. 20:10:26 gilbertdeb: The audio chipset was earth-shattering at the time; no computer in the world could claim stereo sound. Though the audio channels used 8-bit DACs, each output channel had an additional 6-bit DAC for "volume control." The DMA controller could be configured to fetch volume data with each sample, producing an effective 12-bit audio. Unheard of in a computer of that era. 20:10:42 I was very impressed. it had a windowing system, acons, games (wich fullscreen movement) all on that ancient machine, and all off a floppy. 20:11:03 And nowhere in the world could a 7.15909MHz processor be found performing 640x400 full-screen animation at 60 frames per second! 20:11:34 kc5tja: an Amiga revival is required. 20:11:40 kc5tja: is the OS open? 20:11:44 gilbertdeb: It's been tried. Every attempt has failed. 20:11:50 pacmanie was quite impressive :) if the joystick didn't suck so much it would have been awesome :) 20:11:57 freeAmiga then. 20:12:03 gilbertdeb: No. That's part of the problem. But AmigaOS isn't strictly required. 20:12:26 kc5tja: but the OS was quite the thing according to what you said no? 20:12:37 What's needed is an OS environment that is sufficiently AmigaOS-like. I've done it, several times (my Dolphin series). But I've never gotten beyond the simple kernel. 20:13:11 gilbertdeb: Yes, but it isn't just the operating system. It is just as much the equipped hardware as it is the software. 20:13:31 The PC today can be made sufficiently Amiga-like, but only because there are coprocessors for everything, including the kitchen sink, all included on the video card. 20:13:33 kc5tja: do you think with current hardware anything like that could be achieved in just as little space? 20:13:55 --- part: gilbertdeb left #forth 20:13:59 But ti still lacks the fine-grained control for things like floppy drive, and the SCSI interfaces for the PC are still not quite standard. 20:14:00 --- join: gilbertdeb (~gilbert@fl-nked-ubr2-c3a-29.dad.adelphia.net) joined #forth 20:14:03 hmm. 20:14:13 gilbertdeb: Smaller space, actually. 20:14:25 smaller than what the amiga offered? 20:14:26 gilbertdeb: My exec.library-killer was coded in as little as 8KB. 20:14:30 * kc5tja nods 20:14:42 The GUI architecture and graphics libraries took up the bulk of the ROM space. 20:14:45 kc5tja: this is the net, we need url's :) 20:14:54 of the 8kb? 20:14:57 gilbertdeb: URLs for what? 20:14:58 you must be kidding ! 20:15:02 Nope. 20:15:05 Multitasking is not hard. 20:15:07 kc5tja: this stuff! 20:15:25 All my stuff is gone now. I have no idea what happened to it all, unfortunately... :( 20:15:32 kc5tja: so why does say linux require such a magnificent effort? 20:15:36 I do intend on recreating it someday though. 20:16:09 gilbertdeb: Because the OS architecture is highly monolithic, not well factored, and is fucking based on goddamned 30-year old technology, and I don't give two fucking shits WHAT Linus says! 20:16:14 Linux *IS* UNIX. 20:16:17 As is BSD. 20:16:24 THAT'S why it's damned huge. 20:16:41 * kc5tja is still sore to this day taht Linux hasn't shrunk over time. 20:16:53 It's only gotten bigger, and bigger, and bigger, and bigger, and ... 20:16:58 And the complexity of it is through the roof. 20:17:04 Whatever happened to "Linux for the Desktop?" 20:17:07 Bah. 20:17:09 Piece of shit. 20:17:12 I hate it. 20:17:13 I hate lInux. 20:17:16 I hate WIndws.\ 20:17:19 asdf 20:17:22 I hate Windows. 20:17:25 I hate BSD. 20:17:28 I hate OS/2 20:17:30 I hate them all! 20:17:48 Every frigging OS for the PC is EITHER based on Unix, or based on CP/M in some manner or another. 20:17:49 kc5tja: you should get back to dolphin 20:17:56 I want to see more OSes 20:18:10 Herkamire: I am getting back to Dolphin. FS/Forth has a huge role to play in delivering Dolphin 0.5 to the market. 20:18:25 kc5tja: what about the mac? 20:18:29 The alternative is to code Dolphin 0.5 purely in assembly language. 20:18:31 what is FS/Forth. you keep mentioning it 20:18:40 FS/Forth is the Forth environment that I'm coding up. 20:18:42 kc5tjaforth Herkamire 20:18:43 gilbertdeb: What about it? 20:18:52 do you like it? 20:19:01 gilbertdeb: huh? 20:19:10 gilbertdeb: I like its user interface, but that's it. Its OS architecture makes Windows disgustingly simple in comparison. 20:19:43 MacOS used to be pretty simple, back in the day. But today, it's insanely complex. 20:19:58 how did you lrn so much about the amigaos innards? 20:20:03 And MacOS X only makes it worse, since it's MacOS System 9, MacOS X native, and NeXTStep all roled into one system. 20:20:15 gilbertdeb: I coded software for Amiga back in the mid to late 80s. 20:20:23 gilbertdeb: Later I used to work for Amiga, Inc. 20:20:31 i see 20:20:33 (post Gateway sale) 20:20:36 well, i wouldnt say it's os9 and osx and nextstep 20:20:44 the bluebox is just a spearate exectuable 20:20:55 ianni: I would. It's all so seemlessly integrated, it may as well be one big chunk o' code. 20:21:03 well 20:21:05 my mom just bought a mac, and it didn't have OS 9 installed. 20:21:08 yeah, foundation.. hmm 20:21:11 Heh -- are they still calling it yellow box and blue box? :) 20:21:12 i wouldnt knoiw 20:21:17 my mac os x machines came with os9 20:21:26 I don't know - just that they call classic environment blue box i think 20:21:27 iirc 20:21:29 it's only ran when an older application needs it and doesn't support mac os x 20:21:36 Apple doesn't ship boxes that run OS9 anymore.. 20:21:43 for good reason... 20:21:48 everyone should go to OSX 20:21:59 it was on the CD's I think 20:22:06 My friend's MacOS X-based laptop came with MacOS 9 as well. You double-click on an OS9 application, and it spends 15 minutes loading and running the MacOS 9 software. Complete with "loading extensions". :) 20:22:08 thoguh i'd be pissed if i needed os9 and i got a new one 20:22:20 kc5tja 15 mins?! mine takes bout 10 seconds 20:22:25 kc5tja: classic environment boots in less than 60 seconds for me 20:22:29 15 minutes??? 20:22:29 njd: I was being facetious 20:22:34 ;) 20:22:39 ah 20:22:59 it runs pretty well, for being the entire OS9 resident inside the other os 20:23:11 Most of the MacOS "Classic" environments I've seen take more than 60 seconds to boot, because they have so many drivers and extensions loaded. I've seen those icons go three rows deep on the screen. :) 20:23:19 Yes, it does. 20:23:24 I asumed it wasn't all integrated. I can (and did at work) run Mac OS 9 inside Linux 20:23:32 kc5tja damn that's alot 20:23:46 But where MacOS boots in less than 60 seconds, AmigaOS (similarly equipped) boots in less than 10 seconds flat. 20:24:05 My Amiga 500 boots in only 4 seconds, after the cold-boot memory check. 20:24:29 that's one of the things that pisses me off in a major way about recent Operating Systems. 20:24:31 And it's still running on a bone-stock processor at 7MHz. 20:24:39 what the hell could they possibly be doing that would take 60 secconds. 20:25:00 Herkamire: Well, part of the problem is that MacOS X is, you got it, Unix. 20:25:09 It's going through the normal Unix boot sequence. 20:25:17 all I want my computer to do when I turn it on is pick up where I left off, which it doesn't even do. 20:25:21 Mounting file systems, checking volumes, etc. 20:26:26 the dock is very nice though :) 20:26:38 njd: That's NeXTStep's dock. :) 20:26:52 apple steal alot of things 20:27:03 MacOS X is the next NeXTStep. The API is even littered with function names and classes that all start with NS. 20:27:04 njd: they borrowed it from Jobs. 20:27:19 who's seen pirates at silicon valley 20:27:23 njd: "Borrowed"? "Stole?" No, sir; this was Jobs' plan right from the start. 20:27:24 kc5tja: not really littered.. it is an opensdtep! 20:27:26 Borrowed?! They paid $400M for it. 20:27:31 kc5tja: oooooh. I never figured out why they had NS in them 20:27:33 And it works great. 20:27:44 * kc5tja nods to TreyB 20:27:47 and it makes win32 look like qbasic 20:27:52 obfuscated 20:27:58 i found a bug in qbasic! 20:27:59 From the day Jobs left Apple and created NeXT, inc., this has always been part of Job's vision of the next Mac. 20:28:03 heh nice :) 20:28:04 He *knew* what would happen all along. 20:28:14 kc5tja: isn't he the sneaky one? 20:28:18 never used next 20:28:23 but openstep kicks ass! 20:28:30 its like java, but better 20:28:34 ianni: It's pretty much the same thing. 20:28:38 nod 20:28:38 what's openstep ? programming language? 20:28:41 it's the spec 20:28:57 njd: It's the minimal API specification for NeXTStep, basically. 20:28:59 objective C just provides basic syntax 20:29:13 openstep is like the class libraries and memory allocation stuff, 20:29:21 kc5tja: wouldn't you say server software is simply large and thats why all these other os'es are so large? 20:29:21 oh yep 20:29:29 gilbertdeb: No. 20:29:35 gilbertdeb: no 20:29:41 gilbertdeb: Think about it: every GUI application has an event loop at its core, correct? 20:29:46 eg winNt's vms influence, linux/bsd's unix influence etc ? 20:29:54 gilbertdeb: And every server has an event loop at its core, correct? 20:30:04 kc5tja: sure if you say so :) 20:30:06 gilbertdeb: Why, then, is apache more than 10 times as large as the average GUI program? 20:30:06 I really don't know. 20:30:15 hmmm. 20:30:17 whats wrong with apache 20:30:24 I think GUI software is harder to write (and ends up bigger) than server software. 20:30:38 cocoa makes gui software a joy to write 20:30:53 (apple's nextstep) 20:30:54 gilbertdeb: It's because of the following: to talk over the network, you need to use sockets. To talk to the filesystem, you need to use file handles. To talk to sub-processes and threads, you need to use pipes, message queues, or the like. 20:31:15 Each of these "file-like" objects all have *completely* different semantics in Unix, and as a result, all require bizarre ioctl()s and what not to configure them. 20:31:15 kc5tja: I know you can setup an http server in rebol... given that the whole language is < 500k ... apache could seem bloated from that pov. 20:31:29 gilbertdeb: Apache is a mammoth. 20:31:51 But let's not forget that Linux actually has an embedded web server *IN IT* that Apache relies on to optimize the network performance for speed. 20:32:11 apache doesn't rely in the kernel httpd 20:32:20 i heard they are getting rid of that 20:32:21 so kc5tja if you redid it, would you then have just one ioctl? 20:32:50 Herkamire: My rear end it doesn't. That's why it was placed there to begin with; the Apache programmers were complaining that linux was too slow compared to BSD's network performance, and optimization attempts showed it to be the massive user-kernel-user boundary changes. 20:32:59 *nod*, apache ships with macosx for ex. 20:33:09 theres no linux kernel there 20:33:16 ianni: Ever heard of #ifdef? :) 20:33:26 It's the conditional compilation directive for C compilers. 20:33:26 so wait 20:33:30 kc5tja: sure apache goes faster with it. but it works fine without it. 20:33:32 yes, of course I have 20:33:37 Herkamire: Did I say it didn't? 20:33:39 what does apache rely on? 20:33:42 im curious 20:33:50 ianni: what do you mean? 20:33:51 ianni: Whatever is available in the kernel. 20:33:56 it relies on an OS :) 20:33:58 kc5tja for a webserver? 20:34:03 ?!?? apache is one 20:34:07 that makes no sense haha 20:34:20 ianni: Apache sits on the port, and waits for HTTP requests. 20:34:35 When it gets one, and it's not a CGI, it passes the port and file handle to the kernel, and says, "Send it." 20:34:49 The kernel then sends the file to that port, all without the gratuitous user/kernel boundary changes. 20:34:50 would that not bring performance improvements? 20:35:00 ianni: That's why it's there. 20:35:02 i mean isnt that what would happen in the end anyway? 20:35:04 ah 20:35:07 i follow 20:35:07 No. 20:35:20 --- quit: semtex (Connection timed out) 20:35:28 Because otherwise, you'd have to call upon the sockets API to send the data, and there, you're repeatedly making calls to send() or some such. 20:35:30 its telling it what and where to send instead of manually telling it what to send and where 20:35:37 Precisely. 20:35:38 *nod* 20:35:48 interesting... 20:35:51 All in the attempt to reduce user/kernel boundary crossings. 20:36:02 it's intresting that orion server, a pure java application, could beat apache 1 at static content 20:36:03 I'm not too sure about streams and filehandles and stuff. 20:36:08 --- join: semtex (~Speuler@mnch-d9ba4d4f.pool.mediaWays.net) joined #forth 20:36:09 according to some benchmarks 20:36:24 ianni: I use Zope without Apache, and have had zero problems with it. 20:36:34 Apparently this performance "bottleneck" only appears on heavily loaded servers. 20:36:54 But realistically speaking, if you're that heavily loaded, you're going to have the cash to either webcache or distribute the web loads anyway. 20:37:01 Why pollute the damn kernel with this crap? 20:37:08 It really pisses me off. 20:37:26 I would try Zope, except last time I checked it required a certain version of python. and I'm not going to screw with python because that's what my package management is written in (Gentoo) 20:37:47 I ahve to admit that AmigaOS's ROMs were 256K and 512K in size, and included all the relavent drivers to boot the system and whatnot. But good grief, Linux goes way, way overboard. 20:38:06 Herkamire: Zope has always come with its own Python version, ever since 1.0. 20:38:23 Herkamire: At least the Linux distributions have. 20:38:25 kc5tja: when was that? 20:38:29 Herkamire: Since 1.0 20:38:59 kc5tja: it's funny when people do the equivalent of getting a watch maker to fix their cheap timex, when they could just buy a real watch :) 20:39:17 ianni: Exactly! And that's the problem I have with Linux. 20:39:31 Ever try to use CORBA with GTK? You can't do it!! 20:39:33 Just can't !! 20:39:41 My question si WHY though? 20:39:42 kc5tja: ok, so nobody has bothered to make Zope a proper build script for Gentoo. 20:39:51 oh that's scary... I avoid corba and I avoid GTK like the plague :) 20:40:04 i only recently learned C++ 20:40:06 Herkamire: Oooohhhh...gentoo likes to fsck with a lot of stuff. I really don't like Gentoo for doing that. 20:40:13 before then it all looked scary.. now it just looks scary and stupid.. 20:40:21 CORBA is the best system around. 20:40:26 I've not yet found anything better. 20:40:38 kc5tja: gentoo is so many miles better that YDL (based on Redhat) 20:40:39 it's for RMI? 20:40:49 im not familiar 20:40:55 ianni: No. 20:41:10 gentoo will automagically install almost everything I want, and I can hack the sources when I like. 20:41:22 what is zope ? php-type thing ? 20:41:32 ianni: CORBA is to enable remote object invokations, regardless of language. RMI is Java-specific. Though RMI uses IIOP, it is not CORBA. 20:41:54 njd: No; PHP is passe. Zope is a Cold Fusion destroyer. http://www.zope.org 20:42:18 nice... 20:42:20 PHP is passe? 20:42:20 I do J2EE 20:42:29 Herkamire: I tried Gentoo. It royally fscked up my whole system, to the point where Portage just plain didn't work at all. Eveyrthing I tried to install via Portage just errored out. The system became unusable. 20:42:30 php seems nie for small websites or scripting maybe 20:42:42 j2ee is better for real enterprise/web apps 20:42:43 kc5tja: bugger 20:42:50 kc5tja: I haven't heard of that 20:43:16 kc5tja: I uninstalled python once, but other than that I had much trouble 20:43:25 ianni: J2EE is CORBA compatible, IIRC. With only minimal work, you can expose Java objects as CORBA objects. 20:43:46 Herkamire: I assume you mean hadn't instead of had 20:44:04 kc5tja: mmmm yes :) 20:44:36 Dolphin was going to use CORBA rather extensively at first, back when I was gearing it under a microkernel architecture. 20:44:38 asside from a few things it wouldnt install or wouldn't install my way, I've been very very happy with gentoo 20:44:55 But now that I'm heavily leaning towards exokernel, I am leaving that decision up to the user-space software developers. 20:45:17 CORBA sounds frightening. but I don't have a real clear idea what it is. 20:45:38 Herkamire: Well, the first red-flag I had was when I modified the USE variable to include "-xdm", and it happily installed and configured it, subsuming my preferences entirely, regardless. 20:46:05 Herkamire: CORBA is a glorified (and very, very run-time efficient) object-oriented remote procedure call system. 20:46:18 s/run-time/network bandwidth/ 20:46:29 ok. still scarry... 20:46:37 Why is it scary? 20:46:48 how does authentication work? 20:46:59 It doesn't. 20:47:04 that's scary 20:47:07 No, it's not. 20:47:11 Why is that scary? 20:47:13 what is it used for? 20:47:33 why don't you open a tcp socket and just communicate to the other computer 20:47:52 or just send it a message with udp 20:47:52 Remote object invokations, network management, distributed GUI architectures (e.g., Berlin uses CORBA), pretty much anything that you would otherwise have to create your own networking protocol for. 20:48:09 Herkamire: Because then you end up having to write all that infrastructure yourself. 20:48:24 CORBA just takes an IDL file, and generates server and client code for you. You just fill in the gaps. 20:48:41 what about authentication? 20:48:49 What about HTTP authentication? 20:48:54 What about SMTP authentication? 20:48:59 What about FTP authentication? 20:49:08 they suck 20:49:10 It isn't the job of the network transport to authenticate. 20:49:17 It's the job fo the software behind it. 20:49:23 They don't suck. 20:49:52 If those suck, then there is literally *no* authentication system that will satisfy you. 20:50:07 HTTPS is ok 20:50:17 So use CORBA over an SSL channel. 20:50:20 Problem solved. 20:50:21 I'm kinda interested in securidy right now 20:50:41 * kc5tja believes in capability-based security, not ACL-based. 20:50:52 particularly in a way of knowing for sure who the message is coming from 20:50:54 It's significantly lower-overhead, and is just plain eaiser to deal with. 20:51:04 You always know who the message is coming from anyway. 20:51:28 by ip? 20:51:38 IP and port. 20:51:46 And if you spoof an IP, it subsumes even SSL anyway. 20:51:49 So where's the benefit? 20:52:10 * kc5tja used to work for Hifn, a company that specialized in making security-related products for the Internet. 20:52:31 ok, so you can do authentication in CORBA the same as you might do it over a socket. 20:52:35 Authentication should always be high-level, and software backed. Network transport should have *nothing* to do with it. 20:52:54 I don't see the advantage of corba over tcp/udp 20:52:54 If the ORB provides that service, yes. Most don't, because most find it's simply not needed. 20:53:01 * kc5tja slaps his forehead. 20:53:02 kc5tja: yes, there are corba libs for java 20:53:21 thats where most of my experience with it comes from, seeing the corba libs :) 20:53:26 OK, you can spend the three weeks it takes to write a client and server for your highly proprietary network exchange format. 20:53:32 not really even in use.. just seeing them around 20:53:57 And you can waste (and I do mean waste) ports for each individual session. 20:54:02 kc5tja: i think java/j2ee has corba-like stuff. its just if i needed to talk to something else 20:54:04 kc5tja: it's not that hard. and you only have to do it once. 20:54:16 Herkamire: I've done it, and I hated it. 20:54:17 * ianni only avoids corba because of ignorance and not needing anything of that nature 20:54:17 I'm sure I could write the tcp code much faster that learning CORBA 20:54:25 Herkamire: It is the biggest time sink I can think of. 20:54:41 Because you're just writing the same software, over, and over, and over, and over again, for each individual application. 20:54:47 Think of all the different servers on a typical Unix box. 20:54:54 Think of all the socket code that they ALL have in common. 20:55:00 But they're all so very different, at the same time. 20:55:01 Why? 20:55:04 There's no need. 20:55:09 CORBA eliminates this problem. 20:55:28 And it makes it so that you can access remote objects on the same system, WITHOUT intervening with the network. 20:55:40 This means, that "remote" objects that aren't really remote, get invoked via a mere subroutine call. 20:55:41 so you put the code in a common C file (or whatever language) and include it in your project 20:55:46 kc5tja: what are you saying? that with corba you can reduce some of the complexities signifcantly? 20:56:10 i think he's saying corba does what you want 20:56:20 No, you write an IDL file (Interface Description Language). You then compile this IDL file, and it will generate client and server skeletons for you. These skeletons use a consistent server library. 20:56:31 thats nice 20:56:46 The server, then, is written like any other application object. 20:56:52 In C++, the server is a C++ class. 20:56:53 etc. 20:56:57 * ianni is kinda scared, a DCOM framework going into production soon 20:57:05 at the mercy of MS 20:57:06 hehehe 20:57:47 The client works by calling upon the remote object, which looks exactly like a normal, say, Python object (assuming the client is written in Python). 20:58:31 The client stub is responsible for determining if the object referenced is local (if so, just call it directly), or remote, and if remote, to create a network packet with the relavent data (method parameters), and invokes the service. 20:59:09 I think that offering access to function calls on objects to remote applications would introduce TONS of security holes. 20:59:13 The ORB (think of it as an HTTP server, because it's very similar to one) receives this packet, and dispatches the request to the relavent software skeleton, where the parameters are unmarshalled, and the actual server code invoked. 20:59:26 Herkamire: CORBA ahs been around since 85. 20:59:32 I'm not familiar with a single security breach. 20:59:50 not a bad track record 21:00:10 Each request to the ORB has the equivalent of a URL included in it: it has a (machine ID, object ID) tuple which uniquely identifies the object. If that object doesn't exist, the method isn't invoked. 21:00:31 If it does exist, then yes, the method IS invoked. 21:00:48 HOWEVER, like all secure software, THE SERVER IS RESPONSIBLE for checking credentials! 21:00:54 ok, so CORBA is like tcp or udp, but it has a better API 21:01:02 This means, you pass, as an implicit or explicit parameter, some kind of object that the server can verify. 21:01:12 It relies on TCP. 21:01:40 kc5tja: what do you (personally) use corba for? 21:02:00 * gilbertdeb wants to hear more about how os'es can slim down significantly. 21:02:19 gilbertdeb: they can start from scratch 21:02:21 OMG this is the best episode of aquateen hunger force EVER! It's the attack of the killer web pop-up ads! 21:02:22 When I was working for Armored Internet, I used it for automating user creation and maintenance, where a single console application would create user accounts on our web server box, our news server (for news server authentication), our mail server, or FTP server, etc. 21:02:27 Herkamire: I thought they did. 21:02:38 Each of these servers were separate boxes. 21:02:38 gilbertdeb: ther's a bunch of tiny Operating Systems for x86. 21:02:49 A simple shell script would not suffice, and was not scalable. 21:02:56 Herkamire: do they have all the functionalities? 21:03:03 eg reliable servers etc ? 21:03:39 I also used CORBA to monitor these services, to ensure that they stayed up. 21:04:10 We had a dedicated logging machine that could report to us (via e-mail to pagers) whether power went out, network went out, which individual services went out, etc. 21:04:40 huh. 21:04:44 Using CORBA, it didn't matter that all these services were located on the same machine or not -- the software codebase was exactly the same either way. 21:04:56 Today, I don't use it for much of anything because I simply lack the need to. 21:05:22 kc5tja: would you put corba in your kc5tjaforth? 21:05:25 I am working at home for the most part, and I have no need for distributed computing; my 800MHz Athlon box is plenty sufficient for my needs. :) 21:05:26 I would use ssh for the remote commands, and write a local script that would hit the servers regularly, and notify me if it couldn't reach them 21:05:31 gilbertdeb: Absolutely, as the need arised. 21:06:29 Herkamire: But see, you're doing the job of CORBA. And it's a hell of a lot more inconvenient and doesn't report the same information that the CORBA system could. 21:06:39 I've used ssh, tcpclient and tcpserver for my networking. 21:06:45 I took existing server software, and hacked in CORBA support, giving me internal views of each server. 21:06:49 You can't do that with shell scripts. 21:07:09 I don't want an internal view. I want to know that it's working. 21:07:26 Yes, and you're completely re-inventing the wheel every time, and it's network inefficient (you're passing data back and forth as text, not binary). 21:07:26 but i think you could get both from the former 21:07:28 to test if Apache is working, I would sent it a request. If it get's back to me in a reasonable amount of time, then all's well 21:07:37 Herkamire: And so do I. 21:07:44 Why do you think I got internal states of the servers? 21:08:17 I haven't bothered writing server monitors. 21:08:28 For tech support especially, I needed to see what passwords people were typing in. "But I AM typing my proper password!" "No sir, you're prepending a space before typing your password. That's why it's not logging you on." <-- That type of stuff. 21:08:36 I ran a business. I *HAD* to write it. 21:08:52 If I did, I would put some monitoring stuff on the server it's self, and have it e-mail me if it found something odd/bad. and I'd put something local to make sure the server is still up. 21:09:12 Again, hack hack hack 21:09:18 Hacks will break. 21:09:25 In my experience, repeatedly, hacks will break. 21:09:26 and what of your hacks? 21:09:42 svscan works great 21:10:01 They never broke for me. And I had the benefit of real-time status updates. 21:10:13 As soon as something went wrong, *boom* I knew it. 21:10:27 do yo have to watch the status screen? 21:10:40 For some of the technical support stuff, yes. 21:10:43 Very much so. 21:10:54 Especially when people *were* typing in proper user names and passwords. 21:10:54 same as watching a pager though 21:11:02 ianni: Nope. Not at all. 21:11:08 ianni: That isn't real-time. 21:11:10 i mean you have to watch something 21:11:15 but you had logs? 21:11:30 ianni: Only the logs that the servers produced. They don't log everything. 21:11:46 (of course, we did change that, but we still found the Corba interfaces to be overwhelmingly more productive) 21:12:39 The only server we didn't instrument was DNews, and that's because it was a commercial application. 21:13:15 Fortunately, that server pretty much took care of itself. And when it did go down, nobody knew about it, because nobody reads usenet news anymore. 21:13:29 I'll stick with ssh, tcpserver, tcpclient, wget and the like. 21:13:39 * kc5tja shrugs 21:13:50 time for bed 21:13:59 see yous later 21:14:13 --- quit: Herkamire ("zzzZZZ") 21:15:08 Another downfall to using SSH, in particular, is the sheer length of time it takes to establish a connection. 21:15:15 Quite definitely NOT real-time. 21:16:24 It makes me very, very sad when people look at technologies like CORBA and they just don't get it, and then they go and create software that does *exactly* what CORBA was designed to do. 21:16:28 * kc5tja just doesn't understand it. 21:17:35 One of the reasons I like Forth is that it lets me re-use more of my code than other languages, more productively. 21:18:03 CORBA is just one way I can re-use code in an operating system environment like Unix or Windows. 21:22:11 brb -- I need to reset my X server; my window manager isn't accepting a new configuration for some retarded reason 21:22:17 (This is another MAJOR problem that I have with OSes!!) 21:22:25 --- quit: kc5tja ("[x]chat") 21:27:36 --- join: kc5tja (~kc5tja@ip68-8-206-137.sd.sd.cox.net) joined #forth 21:29:00 Cool. Everything works again. 21:30:51 isn't linux great? 21:31:00 kc5tja: I am tempted to find me an amiga running the os. 21:32:07 Heheh :) 21:32:19 Well, I'm looking to move forward from AmigaOS. 21:32:29 As great as AmigaOS is, it still is an OS. 21:32:45 I'm looking for something that is more ... personally involving than AmigaOS. 21:32:54 That's why I am "returning" to Forth for this purpose. 21:33:33 But I do definitely want to resume work on Dolphin at some point, so as to put to rest, once and for all, the concept of Linux as being viable for the desktop. >:) 21:35:34 kc5tja: linux is only viable because there is a lot of software for it. 21:35:42 but, what about the backend? 21:35:44 the server side? 21:36:45 I don't understand your question. 21:37:20 you say desktop. 21:37:25 I think thats not too hard ... 21:37:38 but what about simple servers that do all the stuff todays servers do? 21:38:17 I am concentrating on the desktop because that's where the user's "experience" comes from the most. 21:38:36 The average user doesn't care about servers. 21:40:13 That being the case, I've heard good things about AmigaOS being used for server applications. But AmigaOS is a personal computer operating system; there isn't a lick of multi-user support anywhere in the system. 21:43:04 so how would you design a better server? 21:43:28 are there any models to go on? 21:45:01 A typical GUI program is purely event driven. 21:45:15 It has an event loop that looks something like this (in Python pseudo-code): 21:45:20 def Main(): 21:45:24 InitializeProgram 21:45:31 WHILE not Done(): 21:45:36 evt = GetEvent() 21:45:43 HandleEvent( evt ) 21:45:49 FinalizeProgram 21:46:02 Interestingly enough, server code has *exactly* the same structure. 21:46:21 what kind of servers are popular? 21:46:28 database, web, mail, ftp, and whatelse? 21:46:35 oh irc and im. 21:46:41 does that cover everything? 21:46:42 That's because they really are doing the same thing: the GUI framework is calling upon the application to do something via its event queue; likewise, a client is calling upon the server to do something via the IPC channel. 21:46:54 * kc5tja shrugs -- I have no idea, nor do I care. 21:47:00 To me, a server is a server. 21:47:11 They all boil down to that code fragment above, in one way or another. 21:47:30 so a lot of 'factoring' is possible you think? 21:47:55 In AmigaOS, *all* I/O functions were inherently asynchronous. The *ONLY* thing that ever caused a program to stop was the exec.library call Wait(), which waited for something to happen. 21:47:57 Yes. 21:48:14 As it happens, AmigaOS uses the above code idiom extensively. Indeed, much of the OS is itself written with that same fragment. 21:49:02 The separation of event signals from asynchronous I/O made for a highly scalable, highly factored, highly reusable architecture. 21:49:13 With Unix you have to work *HARD* to get that. 21:49:26 which other oses do you know? 21:49:27 vms? 21:49:36 AmigaOS is heavily influenced by VMS. 21:49:42 really? 21:49:43 VMS was a great operating system. 21:49:44 Yes. 21:49:52 but it was humongous wasn't it? 21:49:59 VMS is where it got AmigaDOS's CLI syntax, and exec.library's event and messaging architecture. 21:50:05 Yes. 21:50:13 Which goes to show you the power of factoring. 21:50:29 I don't see the power of factoring if vms was so large! 21:50:39 or you mean the amiga version? 21:50:39 VMS == multi-megabyte operating system. 21:50:53 AmigaOS == less than 256K for kernel and device drivers, and GUI. 21:51:27 AmigaOS is a highly refined operating environment. It's well engineered, the APIs are designed to be like Legos -- reusable and configurable. 21:51:40 kc5tja: forth I say :) 21:51:52 gilbertdeb: Yes, Forth shares many similar attributes. 21:51:55 sassenrath still lists a forth on his personal home page. 21:52:13 Well, he did author that Forth, but I doubt he still supports it or even works with Forth. 21:52:25 The last I conversed with him, he didn't. 21:52:26 yeah there was no link to it. just a mention. 21:52:51 so was the amiga os lacking anything from vms? 21:53:20 But don't under-estimate him. exec.library (the part of AmigaOS he was responsible for, also the single most significant part of the whole OS) is a piece of art, and it definitely shows that he is skilled in writing well factored, highly reusable code. 21:53:27 Yes. 21:53:37 whats that? 21:53:40 As I indicated, AmigaOS is purely a single-user OS. 21:53:45 ah that. 21:53:47 VMS supported a lot of users. 21:54:02 Also, AmigaOS is a single-address-space (SAS) operating system; it worked without the aide of an MMU. 21:54:03 could it have been extended to support multiple users and still be relatively small? 21:54:12 --- quit: sifbot (Read error: 110 (Connection timed out)) 21:54:15 VMS, however, enforced inter-process memory protection; it required a MMU to work. 21:54:24 Yes, but that's dangerous. 21:54:34 why? 21:54:36 Because any one user could peek/poke another user's program memory. 21:54:45 oh I see. 21:55:05 Dolphin was going to extend the AmigaOS API, at some cost in speed, to support memory protection. 21:55:22 Messaging between threads would be lightning fast -- just some pointer manipulation. 21:55:43 Messaging between processes would take longer, since it had to remap pages and copy a maximum of 8KB of data, depending on data alignment. 21:56:42 It also relied on a handle-based security system that was virtually infallible. 21:57:05 I heard the vms team was behind winNT* 21:57:12 Back then, this made some sense, as I was basing it on a microkernel architecture. But today, I'm not so sure. I'd like to use exokernel if at all possible. 21:57:13 why did they make it so big then? 21:57:15 and sucky too. 21:57:27 NT's kernel isn't big (it's only 250KB), and it's not sucky. 21:57:38 you prefer nt? 21:57:41 It's the win32 layer that sits on top of the NT kernel that is sucky, big, bloated, and outrageously slow. 21:58:04 No, I still prefer AmigaOS over NT. 21:58:05 was the vms team responsible for the win32 layer? 21:58:08 No. 21:58:14 so they did learn :) 21:58:14 Microsoft was purely responsible for the Win32 layer. 21:58:22 Nope. :( 21:58:29 the vms team i mean. 21:58:30 Microsoft had nothing to do with the creation of the NT kernel. :( 21:58:41 who created it? 21:58:44 surely not IBM! 21:58:53 About half of the original VMS team. 21:59:01 The other half went on to other projects at the time. 21:59:23 IBM is responsible for OS/2, another pretty solid design (though inspired by VMS, it's much less so than AmigaOS). 21:59:50 250k you say for a vms-ish kernel? 21:59:53 OS/2's primary influence, though, is VM/MVS, IBM's mainframe operating system. 21:59:57 gilbertdeb: Yep. 22:00:00 It's not that big. 22:00:02 the vms kernel on the vaxes were they that small too? 22:00:25 I think the kernel without the device drivers, was probably about 300 to 400K back then. 22:00:48 hmm. 22:00:56 The device drivers and terminal I/O support, plus record processing services which came standard with the OS (don't ask -- big-iron mainframe stuff) took up most of the space. 22:00:57 how does one find out more about vms'es internals? 22:01:09 it sounds like the whole damned thing can fit on a floppy and be just fine. 22:01:20 I just did a lot of Internet research via Google, and I happened to find a book on VMS internal architecture design. 22:01:28 did you read it? 22:01:33 That book's in storage now, so I cn't post an ISBN, but when I find it, I'll be sure to pass it on. 22:01:35 Yes. 22:01:46 did you like the stuff it said? 22:01:51 is it doable by one person? 22:01:57 or does it require team lifting? 22:02:32 I say team lifting in the sense that one man can build a wright flyer1, but it takes a corporation to build a jumbo jet. 22:05:16 With careful study, it is quite doable by one person. 22:05:35 in forth? :) 22:05:36 But it does take a lot of time to get the details right. 22:05:39 Yes, definitely. 22:06:02 It doesn't matter what language the OS kernel is written in; as long as it presents a consistent and easily accessible system call interface. 22:08:02 have you seen/heard much about plan9 and inferno? 22:08:07 what do you think of those? 22:08:24 I think they're neat toys. 22:08:31 I don't see anything serious coming from them. 22:08:43 They miss the point about designing operating systems for *people* to use. 22:09:52 how large do you suppose the very first unix was? 22:10:08 Now, maybe it's true that a Forth OS that exposed Forth to the user wouldn't be any easier, but certainly, there is a huge niche for a single-user, simple, fast, small and easily configured operating system for today's PCs. 22:10:16 gilbertdeb: About 30KB. 22:10:20 :O 22:10:22 It only had 33 system calls. 22:10:31 thats pretty fscking small. 22:10:34 what happened to it? 22:10:39 Remember it had to fit in the memory space of a PDP-7 with only 64K words of RAM. :) 22:11:24 What happened to it? Computer "scientists" got their hands on it, that's what happened to it. 22:13:26 wow. 22:14:07 See, it's not hard to write a small operating system that is fast and reliable. 22:14:22 But the desire to sell the latest, greatest, gee-whiz products causes it to grow without bounds. 22:14:43 The result is a thoroughly unmanagable monstrosity that requires a team of 250 to maintain. 22:14:52 Did you know that Windows NT is backed by over 1500 programmers? 22:14:55 Isn't that pathetic? 22:15:11 :O 22:15:37 I say linux should walk over those guys just to show them what :) 22:16:17 so is there any one person who understands the whole thing? 22:16:46 No 22:16:55 Just as there is no one person who understands all of Linux. 22:17:16 Linus is as close as you'll get, and I can guarantee you he has zero knowledge of about half the drivers that ship with Linux (especially the ham radio related stuff). 22:17:42 hehehe 22:18:00 VAX/VMS Internals and Data Structures 22:18:05 is that the book you read? 22:18:09 Yes, that's it! 22:18:24 Is it online? Black book with white lettering on it? 22:18:36 no. 22:18:44 i googled for vms internals 22:18:50 and thats what came up. 22:19:17 See, this is why I want to write Dolphin in Forth. It'll help create a nice, small, compact executable for starters. Secondly, a single person could understand it, maybe with the help of an architectural document explaining how the pieces fit together. 22:19:30 whats dolphin? 22:19:53 Third, if something needs changing in the kernel, a single person can do it, *fast*. I'm willing to bet that a single person can affect the same amount of change in Dolphin as a team of 10 can in Linux. 22:19:59 Dolphin is the name of my operating system. 22:20:20 oh true, does it have a website or anything 22:20:25 Not anymore. 22:20:29 kc5tja: but how would you pretend to understand all the drivers and such it needs? 22:20:32 It's been years since I last worked on it. 22:20:38 oh 22:20:44 what programming language? forth? 22:20:45 I don't even have the original source code to 0.2 or 0.3 anymore. I never started 0.5. 22:21:00 Dolphin was originally written in assembly, then in C, and for 0.5, I'm looking to do it in Forth. 22:21:15 ah i see 22:21:21 0.1 and 0.4 don't get a mention? 22:21:41 Nope. :) 0.1 was a failed experiment, and 0.4 was ... embarrassing. :) 22:22:23 0.4 was my first attempt to retrofit MMU-based memory management on top of the 0.3 kernel. The result was that I could only address 4MB of memory because I accidentally locked myself out of the page table data. :) 22:23:00 It also lacked memory allocation functions, because I couldn't figure out how to do it effectively in a paged environment. 22:23:19 guessing it was console-based? 22:23:28 Not even that. 22:23:34 oh 22:23:40 It was purely the kernel. 22:24:04 I did write a keyboard driver for it, but it only worked in Dolphin 0.3. But it otherwise didn't do much with it. 22:24:30 Had I been aware of Forth at the time, I would have written a Forth environment for it. But I didn't discover Forth for another year afterwards. 22:25:47 i've just recently started forth. i'm making a brainfuck interepter in it (an idea of Speuler's for me to start off). i've done everything up to the []'s 22:26:02 Heheh :) 22:26:23 i don't know what to do for the []'s so yeah 22:26:24 that's me done 22:27:12 That's an interesting project, actually. Although I wouldn't use Brainfuck, I would consider using something like Befunge 2D for the purposes of teaching Forth. 22:27:33 * njd googles befunge 22:28:40 befunge? 22:28:45 kc5tja: it is so fugly!!! 22:28:57 looks harder 22:29:01 Yeah, but it's a challenge to write code in! :) 22:29:15 And it's ideal for Forth's blocks. 22:29:30 Though it does set a limit for how big a Befunge program you can execute. 22:31:49 { copy.f: copy file. usage: copy < infile > outfile } 22:31:49 ß[^$1_=~][,]# 22:31:49 right 22:32:33 kc5tja -> http://ebay3.ipixmedia.com/abc/M28/_EBAY_47e31d4b91d415fa96087063ea33e356/i-1.JPG 22:32:41 does that qualify or is that too old? 22:34:37 btw whats the difference btn vms and openvms ? 22:35:05 Ahh, the Amiga 500! :) That's what I have. 22:35:14 :) 22:35:57 is that a good amiga? 22:36:01 with os and all that? 22:36:07 OpenVMS is "open", or supposed to be, in the same sense as Unix. Of course, the community refuses to port it to x86 -- only VAX and DEC Alpha. If it were available for x86, I might consider giving it a try. As it is, they're stubbornness prevents me from experimenting with it. 22:36:27 kc5tja: can anyone view its source? 22:36:55 Amiga 500s are iffy with the OS; they were made in an era back when AmigaOS 1.2 and 1.3 were common. The modern OS might not run on the machine without some hacking on the motherboard (the ROM socket needs a jumper from the microprocessor to a pin that isn't connected on the socket). 22:37:01 gilbertdeb: I haven't checked. 22:37:11 My Amiga 500, for example, has just such a hardware hack. 22:37:24 Amiga 3000s and 4000s have native support for AmigaOS 2.04 and later. 22:39:09 is the 500 the machine sassenrath worked on? 22:41:22 No; he worked on AmigaOS, not any hardware per se. 22:41:37 yes I mean is his os on this machine? 22:41:42 But when he created AmigaOS, it was back in the days of the Amiga 1000 (the first Amiga to be made; in fact, it's the only Amiga without a number on the case) 22:41:47 Yes 22:42:17 The exec.library for the Amiga 4000 is virtually unchanged from the original found on the Amiga 1000. 22:42:37 amiga 500 sounds < than amiga 1000 22:43:08 It's actually better. 22:43:24 The Amiga 500 is the "home computer" version of the Amiga 2000, which was intended to be a "business computer." 22:43:53 The only thing the Amiga 500 lacks over the Amiga 2000 is the support for multiple expansion slots (it has only one slot, like the Amiga 1000). 22:46:10 hmmm. ever heard of the amiga guru book? 22:46:49 Yes. 22:46:52 I never owned it though. 22:47:03 But it contained a listing of all the system error codes (GURU Mediation alerts) 22:47:07 And what they meant. 23:00:16 bloody hell. So I'm 99% sure the bogus data I'm getting is caused by noise 23:00:53 I've got a ribbon cable with a bunch of TTL lines in it. I've got a ground line inbetween each data line. But I'm still getting big noise spikes. What can I do? 23:08:01 natty: Is the board wire-wrapped or is it printed circuit board? Also, how fast is data being transferred? 23:08:58 PCB, groundplane construction, pretty decent. I'm pretty sure the crosstalk is occuring in my ribbon cable. 23:09:09 There's 4 lines carrying the signal from a 4 bit counter 23:09:12 and theres one trigger line 23:10:00 When the counter rolls over from 15 to 0 it induces a pretty big spike on the trigger line, which I suspect is why the PIC is reading random zeros interspersed with the correct values 23:10:15 it makes sense, it just sucks 23:10:24 maybe some decoupling caps 23:12:24 how do you keep the crosstalk down on a ribbon cable? 23:13:00 --- nick: natty -> natzzz 23:14:07 doh, he left. 23:14:31 Though I don't have an answer. A ribbon cable is supposed to be pretty well shielded as long as you have interleaved ground lines... :( 23:17:35 --- join: karingo (karingo@196.portland-03-04rs.or.dial-access.att.net) joined #forth 23:19:12 kc5tja: how small do you reckon linux could be with some refactoring and re-doing? 23:19:26 kernel, gui, servers, etc. 23:22:24 I'd say the whole system could fit within 10MB of harddrive space. 23:22:39 But such a system wouldn't be Linux anymore. 23:24:53 I'm still here sorta, just on my way to be 23:24:54 e 23:24:55 d 23:27:26 it's a pretty narrow spike, but it only has to be 10ns long to trigger the PIC 23:28:53 Yeah, I don't know. :( 23:28:59 I would say to add more decoupling on it. 23:29:08 One thing's for sure, ribbon cable isn't coaxial cable. :) 23:29:33 Interesting. I accidentally found a page containing GNU software for programming PIC chips. 23:29:39 Yup 23:29:40 http://www.gnupic.org/i_compile.html 23:29:45 I think GCC has a PIC target 23:30:01 I know theres at least one PIC forth compiler 23:30:07 * kc5tja nods 23:30:54 then again maybe it doesn't 23:35:58 --- join: bwb (~bwb@ip68-4-121-108.oc.oc.cox.net) joined #forth 23:39:28 --- quit: gilbertdeb (Read error: 110 (Connection timed out)) 23:44:54 Well, I should be going to bed soon. I need to get up for school tomorrow. 23:45:49 --- quit: kc5tja ("THX QSO ES 73 DE KC5TJA/6 CL ES QRT AR SK") 23:59:59 --- log: ended forth/03.04.20