00:00:00 --- log: started forth/18.10.06 00:19:06 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 00:25:36 --- quit: pierpal (Read error: Connection reset by peer) 00:27:17 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 00:34:07 --- quit: pierpal (Read error: Connection reset by peer) 00:36:22 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 00:40:15 --- quit: pierpal (Read error: Connection reset by peer) 00:40:35 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 00:43:39 --- quit: pierpal (Read error: Connection reset by peer) 00:46:27 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 01:12:41 --- quit: pierpal (Read error: Connection reset by peer) 01:14:45 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 01:16:11 --- join: epony (~epony@unaffiliated/epony) joined #forth 01:18:42 --- join: ncv (~neceve@2a02:c7d:c5c9:a900:6eaf:6ef7:3b81:d5f6) joined #forth 01:18:42 --- quit: ncv (Changing host) 01:18:42 --- join: ncv (~neceve@unaffiliated/neceve) joined #forth 01:19:12 --- join: siraben (~user@unaffiliated/siraben) joined #forth 01:20:41 --- quit: pierpal (Read error: Connection reset by peer) 01:42:11 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 01:50:40 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 01:51:19 hi 02:04:00 --- quit: ashirase (Ping timeout: 244 seconds) 02:06:39 --- quit: rprimus (Remote host closed the connection) 02:09:56 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:10:08 --- join: dys (~dys@tmo-103-17.customers.d1-online.com) joined #forth 02:18:34 --- join: rprimus (~micro@a9.lence.net) joined #forth 02:18:37 --- quit: rprimus (Changing host) 02:18:37 --- join: rprimus (~micro@unaffiliated/micro) joined #forth 03:40:18 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 04:03:23 --- quit: wa5qjh (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) 04:08:07 --- quit: ncv (Read error: Connection reset by peer) 04:13:44 --- join: rdrop-exit (~markwilli@112.201.162.180) joined #forth 04:17:06 hi 04:17:24 hello :) 04:18:07 Does anyone know of a website with handy assembly routines? 04:18:21 Say I wanted a routine to convert a string into a BCD float 04:18:39 Which processor? 04:18:49 Z80 04:19:07 Nope sorry 04:19:21 BCD float sounds like a strange concept 04:20:06 It's used everywhere on the TI-84 http://tutorials.eeems.ca/ASMin28Days/lesson/day18.html 04:20:14 Well, it's a calculator. 04:20:32 Interesting 04:20:35 To represent 1980612202.6510 it would mean this in memory: $00, $89, $19, $80, $61, $22, $02, $65, $10 04:20:46 Maybe I could just write it in assembly, shouldn't be too hard 04:21:18 The hard part is with parsing. I'd have to accept -1234 494.3428e38 -129.0e-3 04:21:20 And so on 04:21:42 Maybe it would be better to define it in Forth. 04:21:57 I did a quick search on that page, it doesn’t mention BCD 04:22:10 Ah yes, but it is BCD 04:22:27 Strangely the tutorial doesn't mention BCD at all, except saying that DAA is used for BCD and that the author won't cover it. 04:22:29 Strange. 04:22:43 DAA is a Z80 instruction, I don't know how to use it either. Something to do with BCD 04:23:18 IIRC x86 has it also 04:23:36 Talk about confusing documentation: http://www.z80.info/z80syntx.htm#DAA 04:23:52 I haven’t dealt with either BCD or floats in ages 04:25:00 Double length numbers working now, so I can have 32 bit unsigned numbers. 04:25:54 Looks like the same instruction as on x86, perhaps do a search on « DAA x86 float » on google, see if you find anything useful 04:26:58 I think I'm going the wrong way with DAA anyway, once I have string->float conversion done I can just rely on the OS ROM calls for floating point. 04:30:11 IIRC the DAA instruction is to adjust the result of doing an add when the input was in BCD 04:30:27 Right. 04:33:47 --- join: wa5qjh (~quassel@175.158.225.207) joined #forth 04:33:47 --- quit: wa5qjh (Changing host) 04:33:47 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 04:35:30 My host Forth is 64 bit integers, no floating point 04:36:10 I see. 04:36:38 --- quit: wa5qjh (Remote host closed the connection) 04:36:53 Having floating point on my target is a good idea because I already have most parts of it implemented in the OS, the floating point stack for instance, which integrates nicely with the Forth model. 04:40:21 I don’t think I’ll ever need floats, but I can always add them for a specific target if the need ever arises. The host Forth is just for cross-assembly/compilation, it never runs on a target just talks to them. 04:41:59 The host Forth is 64-bit, but the targets could be anything, 8, 16, 32-bit, or whatever. 04:42:15 Interesting. How do you generate assembly code for different targets? 04:42:20 Recode the primitives? 04:44:01 You write a cross-assembler and/or cross-compiler that you run on the host Forth. This type of setup is usually called a « Tethered Forth » or an « Umbilical Forth ». 04:45:18 You can think of the host Forth as an IDE that can talk to a target through a serial connection. 04:46:20 Interesting. 04:46:29 How did you learn to write such an implementation? 04:47:04 Umbiilical Forths have been common since the 80s. 04:47:30 Forth Inc.’s Swift-X is an example. 04:48:04 MPE also has them. 04:49:30 There were many write-ups in the Forth literature on various home-grown ones too. 04:52:45 It’s a very flexible approach, you use the host dialect *only within the host environment* to communicate with targets and interactively cross-develop to targets. The code you cross-develop to a target can be anything from minimal machine code routines to your own custom onboard Forth. 04:55:25 Could you link to some write-ups on implementing Forths in this style? 04:57:18 There were articles in FORML proceedings, let me do a search of Forth Dimensions and Forthwright. BRB 04:57:50 --- quit: Labu (Quit: WeeChat 2.0.1) 04:59:08 --- join: Labu (~Labu@labu.pck.nerim.net) joined #forth 05:01:19 --- quit: Labu (Client Quit) 05:02:39 --- join: Labu (~Labu@labu.pck.nerim.net) joined #forth 05:03:40 A cursory search of the Forth Dimensions and FIGUK sites didn’t yield anything. 05:04:23 I’m sure there are articles in FORML proceedings, but those aren’t online. 05:04:43 I’ll check JFAR. BRB 05:08:10 Couldn’t find anything in JFAR either 05:09:52 There’s an entry in the CLF FAQ: http://www.complang.tuwien.ac.at/forth/faq/faq-general-5.html 05:10:01 Huh. Where can I find interesting papers on Forth? 05:10:57 Ah that's the same website that contains http://www.complang.tuwien.ac.at/forth/backtracking-in-ansforth 05:11:54 (Ab)uses the exception handling system to hand control back and forth. 05:13:47 All issues of Forth Dimensions, Forthwright, and JFAR are available as online PDFs. Unfortunately the FORML proceedings, and the ACM SigForth newletter and proceedings aren’t. 05:14:35 What more modern languages are doing with new control structures (continuations, exceptions, non-local exits, etc.) Forth seems to be capable of all of these because of the return stack. 05:15:19 Ok. I'll take a look at the PDFs. 05:15:20 Forth can do just about anything, the question is always should it. 05:16:19 Hold on, I’ll paste some links 05:16:23 Always depends on factors beyond the languages. What are you trying to implement, use cases, etc. 05:16:59 Speed, space concerns and what not. 05:17:22 JFAR scans are available on MPE’s site: https://www.forth.com/forth-books/jfar-archives/ 05:17:37 oops wrong link 05:17:52 http://soton.mpeforth.com/flag/jfar/index.html 05:18:32 What happened to JFAR? Is it still active/ 05:18:38 Scans of Forth dimensions are available here: http://forth.org/fd/contents.html 05:19:50 Forthwrite are available here: http://www.webring.org/l/rd?ring=forth;id=46;url=http%3A%2F%2Fwww%2Efiguk%2Eplus%2Ecom%2F 05:20:18 Do you have some personal favorites in terms of papers? 05:20:19 or here: http://www.figuk.plus.com/articles.htm 05:21:37 Not really, I enjoyed most of the FORML proceedings from the 80s and 90s, lots of variety in approaches. 05:22:51 FORML was the Forth Modification Laboratory conference, it encouraged Forth developers to share there experiments with Forth. 05:23:33 You know what they say, if you’ve seen one Forth… well you’ve seen one Forth. :-) 05:25:34 That’s the thing with Forth it can be your personal language, OS, IDE, etc… 05:26:31 I may not have agreed with the directions some people were taking their Forths, but it always made for interesting reading. 05:27:09 JFAR is long dead 05:28:39 All the Forth publications are long dead. There’s still the EuroForth proceedings, but most of the EuroForth crowd seems very ANS Forth oriented. 05:32:42 BTW, one nnice thing about working with an umbilical Forth is that you can vary the architecture of the target Forths, you could make some that are token-threaded, others subroutine-threaded, or indirect-treaded. For really small targets that can’t handle an onboard Forth you could just use your host Forth to cross-assemble machine code on the target. 05:34:08 You can also vary how you partition your Forth, you could have a header-less Forth on the target, and just store the headers on the host if you wanted to. 05:36:02 You can check out SwiftX here: https://www.forth.com/embedded/ 05:36:38 And the equivalent from MPE here: https://www.mpeforth.com/software/forth-cross-compilers/forth-7-cross-compilers/ 05:38:01 Yeah, the language is so dynamic it's nice in its own way. 05:38:31 If programming is to be more universal people should be able to make their own little languages. 05:39:02 Does Forth have a module system? For instance to deal with name collisions 05:39:53 BTW I believe the Silicon Valley Forth Interest Group (SVFIG) has many old FORML hardcopies available for sale. 05:41:26 Most Forths have a vocabulary sub-system that allows you to create and modify the dictionary search order. 05:41:43 Gotta go, nich chatting. See you around. 05:42:10 --- quit: rdrop-exit (Quit: rdrop-exit) 07:02:23 --- quit: dave9 (Quit: dave's not here) 07:27:38 siraben: Forth has vocabularies to deal with name collisions. 07:28:15 Hey, re: that SVFIG book sale - I recommend trying for a copy of McCabe's Forth Fundamentals, 2 volume set. 07:28:59 siraben: A vocabulary is implemented as a separate linked list, that "connects up" to the main list somehow. 07:29:07 It's done different ways in different implementations. 07:29:24 Some have all vocabularies words themselves belong to the root list. 07:29:43 Some have the vocabulary word belong to whatever vocabulary is current when you declare the new vocabulary. 07:29:53 That gives a more complex 'tree structure." 07:29:58 --- join: kumool (~kumool@adsl-64-237-233-169.prtc.net) joined #forth 07:30:23 It can also vary as to whether you continue searches into parent vocabularies when you reach the end of the vocabulary you're searching itself. 07:31:08 And, finally, if you do continue searches into ancestors, you have to decide whether to search the parent from the child back, or whether to jump to the latest word in the parent and continue searching from there. 07:31:20 The vocabulary word itself stores a pointer to the latest defined word in itself. 07:31:31 So those words supply the "entry points" to the tree structure. 07:32:43 A word CONTEXT specifies what vocabulary/vocabularies get search at any given time. 07:33:06 Old FIG Forth and other older imps have a single cell for CONTEXT, so you search from a single entry point. 07:33:23 Some later implementations make CONTEXT a list of vocabularies, usually organized as a stack. 07:33:36 Mark's got a nice system, where he works with "stacks of stacks." 07:33:59 The word CURRENT is a single-cell variable designating which vocabulary new definitions are placed in. 07:34:23 Anyway, this is a powerful mechanism for managing namespaces. 07:36:44 I like Mark's "stack of stacks" CONTEXT - it seems to provide the cleanest way, since you can adjust the search context however you wish for what you're doing now, and then restore the previous context unblemished. 07:37:05 But he puts all vocabularies in root, and I'm not sure how I feel about that part yet. 07:40:02 My tendency has been to define vocabularies in the CURRENT vocabulary. 07:41:14 Also, I've considered but never actually implemented a "root" vocabulary - I generally just start everything with the Forth vocabulary. 07:41:28 I see the potential benefits of having a root, though. 07:41:52 I think it would provide more power for cases where you wanted to make only a specific set of application words available, and hide everything else. 07:42:46 I may do it differently this time, because in the past part of my motivation was to be able to hide the definitions of "helper words" that were used only in defining API words and are then no longer needed. 07:43:05 But this time I have my :: / ::WIPE idea for that, and so the previous approach isn't really as needed. 07:43:09 Ah, so I need to implement vocabularies. 07:43:16 Currently it's a linked list. 07:43:18 It's the traditional way. 07:43:23 There's some name hiding with HIDE 07:43:28 It's still linked lists; just with more structure. 07:43:35 But Starting Forth showed off vocabularies as well. 07:43:56 The linkages form a tree structure. 07:44:29 I've managed to finally separate the interpreter from loaded programs, so I can convert a .fs file -> list of ASCII bytes -> assembler -> flash to calculator. Then on the calculator I run LOAD MYFILE 07:45:08 But with this separation of programs there is no separation of namespaces, so if I LOAD multiple files with the same internal colon definitions, only the latest one is visible. 07:45:21 Right. 07:45:34 With vocabularies, you'd do this (and this could be in your files, actually): 07:45:54 VOCABULARY PROG1 PROG1 DEFINITIONS 07:46:07 FORTH DEFINITIONS 07:46:20 VOCABULARY PROG2 PROG2 DEFINITIONS 07:46:43 Now you can run prog1 words by just saying PROG1 , or prog2 words with PROG2 07:47:09 Regardless of how you answer the questions I laid out above, when you execute a vocabulary name it becomes the first vocabulary that will be searched. 07:47:35 Ah, so PROG1 and PROG2 would modify the LATEST pointer before executing the next word? 07:47:55 No. LATEST always returns the tip of the linked list referenced by CURRENT. 07:48:04 The searches don't start with LATEST anymore. 07:48:09 So is it like a linked list, with the old shared definitions and branching out from the separate vocabs? 07:48:12 They use the vocabularies. 07:48:21 PROG1 and PROG2 will store "latest" pointers for their list. 07:48:31 Yes, right. 07:48:39 Like I said above, there are various ways of structuring it. 07:48:39 e.g. ALPHA_VOCAB -> <- BETA_VOCAB 07:48:57 So you start searching from ALPHA_VOCAB or BETA_VOCAB, but still have access to the old definitions? 07:49:06 Right. 07:49:19 Yes - usually searches hit the end of the vocabulary itself and continue into the parent in some fashion. 07:49:42 But that's not required - you could have a complex CONTEXT (a stack) like I do, and you could have searching one vocabulary search ONLY that vocabulary. 07:49:53 It's amazing how Forth was not necessarily designed with structured programming in mind and yet people write very structured programs in it like a high level language. 07:49:58 But your context stack would direct you into FORTH after you searched PROG1 or PROG2. 07:50:10 Context stack? How do I implement it? 07:50:37 Well, any way you like - I just allocate a block of RAM for it, and use the first cell as a pointer to the "top of the stack." 07:51:12 I use that first cell to get to some element in the array, presume it points to a vocabulary variable, get the lastest linkee form there, search. 07:51:25 Then I drop one level deeper in the context stack, repeat. 07:51:29 Ah. I'm running short on RAM yet again. I'll need to rewrite some of the parts of my implementation to ask the OS to give it a 5 KB space for a "program" variable, and store arbitrary data there. 07:51:41 Only if I search all of the vocabularies that are specified in that stack and don't find the word do I "not find it." 07:51:59 In fact I could have separate data sections for the stacks you mentioned 07:52:10 Mark has a higher level stack, with each entry in it being a stack like I just described. 07:52:20 Ah, so it's not really a tree, but a list of "LATEST" pointers? 07:52:24 A stack I mean 07:52:36 So he can push a fresh element to that higher level stack, set up any context he wants in that, do his business, and then pop the higher level stack, leaving the previous search environment intact. 07:52:36 And if the search fails it goes down to the underlying vocabulary? 07:52:43 Right. 07:52:46 That's a good idea. 07:52:47 The DICTIONARY is tree structured. 07:52:59 CONTEXT provides a stack of access pointers into that tree. 07:53:26 Should I refer to the ANS forth standard on this? 07:53:38 I have no idea how they do it these days. 07:53:46 As I said, it's varied over the years. 07:54:03 FIG had a full on tree; vocabulary words themselves could be defined in any vocabulary (branch of the tree). 07:54:23 But if I'm not badly mistaken Forth 79 put all vocabulary words in FORTH, regardless of what CURRENT was when you defind the voc word. 07:54:37 So F79 had a "trunk," with one level of branches coming out of it. 07:54:48 FIG had a trunk, branches, limbs, twigs, etc. etc. 07:55:19 I have a preference for that more flexible structure, I think. 07:55:43 Hm. Ok. If the need arises I'll implement vocabularies. 07:56:04 So that would mean that if you did PROG1 and PROG2 like I said above, and while PROG1 was current you defined another vocabulary, you wouldn't be able to see that one unless PROG1 was in the search context. 07:56:09 Just like any other word in PROG1. 07:56:22 Right. 07:56:25 I still don't have an editor on the target, so to speak. Any particular guidelines on making on? 07:56:29 making one* 07:56:39 Well, it's super easy to write a line editor in Forth. 07:56:50 I usually do that first, until I have something better. 07:57:02 Lines are unfortunately only 16 characters on my target. 07:57:04 I just retype the whole line when I want to change it - what it's really doing is managing lines in blocks for me. 07:57:19 But eventually I'll want a better screen-oriented one. 07:57:31 Oh, if I can figure out how to get the small font display and some variant of AT-XY to display things at a particular location, it's just a matter of drawing screen elements. 07:57:34 To do that, though, you have to be doing things on a "per keystroke" basis. 07:57:35 Something like Vi would do 07:57:46 Yes; I'll probably emulate VI to some degree. 07:58:03 I expect my screen editor will share code quite nicely with the command history. 07:58:03 String insertion is a strange problem, I want to go from "helloworld" to "hello world" 07:58:16 To do that I'd have to shift everything after the insertion point, right? 07:58:16 In some sense command history is like a screen editor, with just one line visible at a time. 07:58:28 The cursor doesn't actually move up or down - the content you see changes. 07:58:34 Ah, command history is on my list of things to do next. 07:58:42 But it won't be hard to go from there to having a bunch of lines and the navigation moves the cursor up and down. 07:58:51 Command history is nice. :-) 07:59:09 Ping me when you're thinking about that - I'll share some thoughts. 07:59:48 Also, I should probably have actual QUIT and INTERPRET words to handle errors and the spam of "ok" messages that happens during file loading 08:00:04 I'm pleasantly surprised at how it's turned out so far though. 08:01:00 Hm. What's also strange is that emitting \n and \t don't behave in the way that one expects on the TI-84. 08:01:21 Yes, it turns out that the community worked out a very close to optimum structure for all that stuff. 08:01:28 Deviating from it rarely helps. 08:02:04 I don't know your TI-84 environment at all; so no idea how it handles those things. 08:02:22 It's an interesting world. 08:02:28 I can imagine. :-) 08:02:34 Normally one would be using a serial terminal, right? 08:02:51 Well, I guess so. That's sort of the "mental target." 08:03:05 I found that my system had a lot of special handling of control keys done under the hood. 08:03:15 It replaced ctrl-m with ctrl-j, for instance. 08:03:24 I turned all that off, and handle those keys all myself. 08:03:32 ctrl-a through ctrl-z just give me 1-26 now. 08:03:43 But that means I don't have ctrl-c break anymore. 08:03:44 Same here. I read the key codes with a system call and use a lookup table 08:04:07 I could implement my own ctrl-c support, though. 08:04:10 Just haven't done so yet. 08:04:13 Oh, I don't have Ctrl-C yet, I just take out the batteries when I want to stop an infinite loop :) 08:04:23 The logical thing for it to do would be to run WARM. 08:04:33 Or perhaps just throw and error; that way error recovery would restore things. 08:04:38 an error 08:04:51 I'd put that test directly in KEY 08:04:52 There is an ON button which sends a certain code to one of the calls, I should handle that case by resetting the stack pointer 08:05:04 Right, handling it at KEY 08:05:17 Usually you can just call QUIT or WARM for such things. 08:05:26 WARM is different from QUIT how? 08:05:30 QUIT will reset the return stack but keep the data stack; WARM resets the data stack and then falls into QUIT. 08:05:33 So it resets both. 08:05:43 ^ 08:05:53 Huh, I thought QUIT resets the data stack as well, no? 08:05:54 That's potentially the only difference. 08:06:01 No, usually just the return stack. 08:06:18 Starting Forth talked about how typing "XXX" at the console is "a good way to clear the parameter stack" 08:06:20 It's nice to be able to debug with QUIT. 08:06:31 Right, but I find that clearing the stack is annoying 08:06:34 Just put it in your code where you want it - you get control back, and you can inspect the data stack. 08:06:50 Clearing it when? 08:07:03 When, say, an undefined word is encountered. 08:07:11 In gforth it clears the stack 08:07:14 Which can be annoying. 08:07:17 Use WARM in those cases, then. 08:07:33 I'm more elaborate - I have snapshotted everything (including the stack) at the beginning of the line - I restore that. 08:07:46 So only the stack actions that have occurred in the line with the error get reversed. 08:07:58 But without that, I'd use WARM when doing error processing. 08:08:30 Most of the bugs currently stem from the fact that undefined words don't cause some sort of reset. In ": foo bar dup 1 2 ; ", if bar is not defined it just isn't executed or compiled and "dup 1 2" is compiled next 08:08:37 And my COLD restores my termios and then just jumps to the entry point of the whole program. 08:08:42 So it wipes out EVERYTHING. 08:08:43 So I hope to fix that with a call to QUIT 08:08:49 Definitions, heap allocations, etc. 08:08:51 Ah I see. 08:09:14 You'll find, particularly as you do vocabularies, that errors can get you into a real mess. 08:09:27 Can you cause your Mac to crash when you write NASM? 08:09:29 If you've done certain things prior to the error. 08:09:52 Or are there things that the OS does to prevent the system from segfaulting? 08:10:14 I'll be right back. 08:11:44 Those "fragile" things that left me in a bad state after errors were my primary motivation for implementing a solid error recovery thing. 08:12:00 And yes, I can easily segfault my system. 08:12:14 Primarily by doing an illegal memory reference. 08:12:29 1 @ 08:12:33 Dead. :-) 08:12:51 I'd like to figure out how to catch that error and handle it myself. 08:13:16 Could end up being undecidable. 08:13:41 Well, I think those references raise a hardware exception, so a vector somewhere is executed. 08:13:47 I should just be able to trap that vector. 08:13:57 Yeah, if you could before the system goes down 08:14:02 So your computer just blacks out? 08:14:10 The hardware would still be deciding when it happened - I'd just be running error recovery instead of crashing back to the OS. 08:14:15 No, the MacOS catches it. 08:14:23 Kills my program, takes me back to the OS. 08:14:42 1 @ Segmentation fault: 11 08:14:45 Kips-Air:nasmForth kipingram$ 08:15:00 That's interesting. I ran 1 @ on my implementation and it returned 58882 08:15:05 Even 0 @ 08:15:13 Well, any address 0-65535 is a valid address. 08:15:21 Well, my hardware is capable of marking memory ranges off limits. 08:15:30 Or read only, or execute only, or whatever. 08:15:34 Ah, so there is a way to catch segfaults at least at the OS level. 08:15:47 It's a processor capability. 08:15:56 Via the memory management unit. 08:16:00 Yeah I expect more problems will crop up as I move to adding words that deal with archived memory (flash) 08:16:04 Invalid pages and so on 08:16:28 It's used sometimes for virtual memory handling - if you reference an address that's not resident, an exception occurs; the exception handler can read that info from disk, put it somewhere and adjust the mapping, and then let you continue. 08:17:18 In Linux, and MacOS, you can set permissions on RAM in 4k blocks. 08:17:25 Each 4k block can get a permission setting. 08:17:37 The blocks can be larger (multiples of 4k) but not smaller. 08:17:59 For example, the range my code is in (the assembly created code)is read only. 08:18:05 The .text section in the assembler file. 08:18:12 I can read and execute from there, but I can't write. 08:18:17 I could do a system call to make it writeable. 08:18:46 But I consider it a good thing - the system is structured so that you never need to write down there, so it's good protection. 08:19:11 --- quit: kumool (Quit: Leaving) 08:19:24 I don't know what the system is using that first bit of space for (the part I can't even read). 08:20:17 Addresses 0-4095 (my first 4k) are unreadable. 08:20:23 I can begin reading at address 4096. 08:21:03 But I can't write until after the whole .text section, where .data or .bss begins. 08:21:34 I'm not surprised you can read anything - I doubt your processor has any memory protection at all. 08:26:27 Let me take a screenshot of memory location 0 to 766 08:27:34 So MacOS is setting my process up so that it "sees" addresses starting at 0. Who knows where it is in physical RAM. 08:27:49 That's why the MACHO relocatability requirement peeves me so. 08:27:53 https://i.imgur.com/YmXvCDJ.png 08:28:05 They put me at the SAME VIRTUAL ADDRESS every time - why won't they let me make absolute references to those addresses? 08:28:05 Top left is address 0, the black and white pixels correspond to 0 and 1 08:28:12 I mean 1 for black and 0 for white 08:28:14 There's no REASON to demaand the position independence. 08:28:33 Oh, interesting. 08:28:40 Yeah, who knows what's in there. 08:29:01 I have a Common Lisp file to process that PNG and extract the bits out and write to a binary. 08:29:26 But disassembling Z80 is pretty hard, it's hard to distinguish between code and data. 08:29:29 Well, I couldn't tell you what's in my 0-4095, since I can't read it. 08:29:49 I guess I could hexedit the binary. 08:29:56 I think it's loader information. 08:30:09 I just look for nonsensical sequences of instructions like loading into the same register right after loading into it already: ld a, h \ ld a, c ... 08:30:25 Assembling this thing in 64 bit mode requires linking a library - maybe that library is down there. 08:30:31 I'm not sure why it's required, but it is. 08:30:53 --- quit: robdog (Ping timeout: 250 seconds) 08:31:06 My only outside references are via syscall. 08:31:23 If you're interested here's the base64 encoding of that screenshot data: https://pastebin.com/raw/fR8rRDzW 08:31:38 The only thing I can make out is a string "2.55MP" which corresponds to the OS version. 08:32:06 Other than that, I don't really know how to be a good disassembler 08:43:58 * Zarutian scrolls back 08:45:56 Having a way to PLOT things is useful. I'm trying to find a good pseudo-random number generator and I keep seeing patterns 08:48:38 KipIngram: It's a shame this target doesn't have a color display. 08:49:02 But porting to the newer models would involve a lot of rewriting because the assembly is not forward-compatible. 08:49:13 KipIngram: the first 'page' (4KibiBytes) is usually not mapped to catch 'null references' 08:51:50 Ah, makes sense. 08:52:25 KipIngram: do you need all the speed you can get from the processor? I have found that implementing an version of a dual stack machine from Stack machines the New Wave as an vm makes the forth much more portable. 08:54:42 I had seen quite a few years back an elf binary whose .text section (RO&EXE) was just one page (4 KB) and rest was in .data (RW but no EXE) 08:56:45 I do want good performance, but I'm also prepared to profile and optimize (i.e., write custom assembly) when I really need the absolute max. 08:57:20 I am trying to regard this as a vm, and those macros run on that. 09:00:55 I'll take a look at the book - maybe I could improve my vm. 09:00:55 where is the mecrisp project officially hosted now ? 09:01:18 can't seen to be able to download stuff from the sourceforge link 09:02:13 I am looking for the stellaris version for STM32 09:02:16 Zarutian: I already feel like I'm losing some speed because of the MacOS requirements for relocatability - I can't use absolute addresses in my definition lists; they're offsets from the system base, and I have to add that in NEXT. 09:05:11 I'm also jumping to next, instead of inlining it. 09:05:39 In both of those cases my reasoning was that "it doesn't have to have 'ultimate' performance - it just needs to be 'good'." 09:10:11 well, the NEXT, so to speak in that afore said binary does this: fetch next 'instruction' into instr, do an AND on it where the destination register is junk/ignored, branch to CALL if status bit z is zero or do an jump table branch to the apropos primitive 09:10:54 I do not know it that is slower than adding system base offset though 09:11:29 Oh, interesting. So docol is sort of woven into NEXT? 09:12:07 (the ANDing is to figgure out if the upper bits of the instruction is all zeros or not) 09:12:47 not sure what you mean. It is just a simple and small emulator written in assembly 09:13:36 from the perspective of the forth the VM ISA is the 'bare metal' it is running on. 09:14:52 Well, my next works the same way for everything - primitives or : defs. For : defs it just routes to docol, which handles the call. 09:15:02 There's no decision in NEXT itself. 09:16:27 you have an indirect jump in it, no? 09:17:34 Yes; so I guess that is a "decision." 09:17:44 For primitives that indirect jump just takes it to the primitive code. 09:17:53 For : defs that indirect jump takes it to docol. 09:18:08 But there's no "bit checking" or anything. 09:19:00 How can I make a definition of VARIABLE with DOES> ? 09:19:11 well, the "bit checking" and the jump table code is usually how something like C switches are implemented in assembler 09:19:30 : VARIABLE CREATE CELL ALLOT ; 09:19:51 You don't need does, because the run-time action of CREATEd things and VARIABLEs is the same. 09:20:01 CREATE just doesn't allocate the storage, so you need to do that. 09:20:17 But you don't need to modify the run-time action (or extend it), so you don't need DOES> 09:20:27 : CONSTANT CREATE , DOES> @ ; 09:20:34 KipIngram: but what about VALUEs? 09:20:48 I don't know exactly what those do - I haven't used them. 09:21:03 basically they are changable 'constants'. 09:21:06 lesse 09:21:18 Ah. Ok. So what's the syntax of changing them? 09:21:30 value TO FOO 09:21:54 TO switches a flag that VALUEs check iirc 09:21:59 Ok. So I guess TO would find the following word, get its PFA, and store there? 09:22:12 much simpler than that 09:22:12 But when you execute FOO you just get the value, just like with a constant? 09:22:33 Do tell - I'm curious. 09:23:02 Executing FOO tells you nothing about where it is, so it seems like a dictionary search would be inevitible. 09:24:13 VARIABLE TO_FLAG FALSE TO_FLAG ! : TO TRUE TO_FLAG ! ; : VALUE CREATE ALOT DOES> TO_FLAG @ IF ! ELSE @ THEN ; \ iirc 09:24:56 Oh, so the word's runtime does something different depending on the flag. 09:25:06 So, ok, roughly 09:25:09 sorry! : VALUE CREATE ALOT DOES> TO_FLAG @ IF ! ELSE FALSE TO_FLAG ! @ THEN ; \ iirc 09:25:38 : VALUE CREATE , DOES> TO_FLAG @ IF ! ELSE @ THEN ; maybe? 09:25:51 Oh, I forgot to clear TO_FLAG. 09:25:59 yeah but it needs to flip the flag back 09:26:05 Right. 09:26:25 Ok, so that provides convenience but with an "always there" performance penalty. 09:26:42 yeah, that is an issue 09:26:50 Whereas doing it with a dictionary search would provide fast runtime for fetching the value, but require a BIG performance penalty for changing it. 09:27:05 I think the decision would depend on how often you needed to change the value. 09:27:11 some other implementations do what you said, where TO looks up the next word and changes the 'constant' 09:27:23 If I need to change something that often I'd probably just make it a variable and do the @ explicitly when fetching. 09:27:34 Compiling that would a hassle, though. 09:27:47 It could be done, but it would be kind of tacky. 09:27:50 I never saw the point of them VALUEs though 09:28:30 but it helps to be aware of them when reading some older forths or forth code that use them 09:28:38 Yes. 09:29:10 siraben: Did the above answer your quesiton? 09:29:16 when transliterating/copying/transcriping such code over to the forth I use I usually just make the variables 09:29:36 s/the v/them v/ 09:30:20 Yes, I think I would too. 09:30:55 I have some things of this nature. When I initialize the system I put my symbol table somwhere, and the variables for managing it are in the first 16 bytes of the table. 09:31:07 I have some words that provide those address, so I can treat them like variables. 09:31:16 But effectively they're constants that are defined by the init code. 09:31:25 They never need to change. 09:31:39 --- join: [1]MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 09:31:44 say, what would you say of the idea of using crypto hashed blocks? I have sketch of a UDP protocol where an server on the lan responds to multicasted request and block pushes 09:32:22 Interesting - that sounds like it could be useful. 09:33:30 basically the request packet is say \x01 followed by sha256 hash of the block contents and the block push packet is \x00 followed by 1024 octets of data 09:34:25 (other first bytes reserved for other crypto graphic hash algorithms because they could get broken someday) 09:34:38 (first byte values*) 09:34:59 --- quit: MrMobius (Ping timeout: 245 seconds) 09:34:59 --- nick: [1]MrMobius -> MrMobius 09:35:26 then block 'numbers' would just be the apropos hashes. 09:36:14 though words like --> would need to be updated to take an hash as a parameter because you can not just increase the block 'number' 09:36:53 KipIngram: Yep. Thanks! 09:37:13 I was debugging why VARIABLE was not working in my implementation, turned out to be a bad definition of +! 09:37:40 How do I make some words compile-only? 09:39:54 Make them immediate, and check state when they run. 09:40:06 If STATE is 0, you're not compiling; throw an error. 09:40:19 If STATE is one, them POSTPONE the actual action. 09:40:57 : C_ONLY STATE @ IF POSTPONE (C_ONLY) ELSE ERR THEN ; 09:44:27 Ah I see. I'll implement that tomorrow. I'm off for now. 10:11:16 --- join: kumool (~kumool@adsl-64-237-233-169.prtc.net) joined #forth 10:20:25 --- quit: pierpal (Ping timeout: 240 seconds) 10:43:50 --- join: ncv (~neceve@2a02:c7d:c5c9:a900:1ec6:932f:1b02:d27e) joined #forth 10:43:51 --- quit: ncv (Changing host) 10:43:51 --- join: ncv (~neceve@unaffiliated/neceve) joined #forth 10:51:51 --- quit: dddddd (Remote host closed the connection) 10:59:55 siraben: I like xorshift as a pseudo-random number generator for small systems http://www.excamera.com/sphinx/article-xorshift.html 10:59:55 You can plot random pixels using sixel graphics in your terminal http://ix.io/1ov2 11:27:43 --- quit: ncv (Remote host closed the connection) 11:36:13 * Zarutian has translated some routines from http://members.chello.at/~easyfilter/bresenham.html but hasnt tested them 11:56:36 --- quit: tabemann (Ping timeout: 252 seconds) 12:31:16 Zarutian: for sixels? 12:31:50 to plot lines, brazier curves, ovals and circles 12:32:36 ploting into an v-buffer or frame buffer then outputting that via sixels might work 12:34:57 Zarutian: next... http://jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions/ http://iquilezles.org/www/articles/distfunctions/distfunctions.htm 12:35:53 and perhaps this https://www.ocf.berkeley.edu/~fricke/projects/israel/paeth/rotation_by_shearing.html too? 12:36:56 Brad Nelson did sdf in forth https://github.com/flagxor/sdf seems like a forthy, modular, composable way to do 3d graphics in forth. 12:38:13 Zarutian: that looks rather concise. 12:38:16 * Zarutian finds http://datagenetics.com/blog/august32013/ as a better explanation 12:39:54 +1 12:44:41 http://bjh21.me.uk/all-escapes/all-escapes.txt mentions escape codes for getting pixel mouse coordinates and events. 12:44:41 : +mouse csi ." 2;1'z" csi ." ?1003h" ; : -mouse csi ." ?9l" ; 12:47:02 drawing program in terminal? 12:51:02 terminal escape code reporting arrives as ascii decimal numbers that need to be captured with KEY 12:53:18 ...But that means they could have a variable number of characters and they need to be translated to numbers. Awkward. 13:07:59 --- quit: jedb (K-Lined) 13:12:55 I could just ACCEPT to TIB or PAD and EVALUATE 13:19:37 Yes, those multi-char key codes are a pain. 13:19:45 I just haven't handled them yet. 13:20:03 I wanted ctrl- keystrokes for cursor control anyway - I hate having to reach over to the cursor keys. 13:20:14 I don't like moving my fingers from "home position." 13:21:44 So I do ctrl-h == c-left, ctrl-j == c-down, ctrl-k == c-up, ctrl-l == c-right. 13:21:59 ctrl-j and ctrl-k also navigate my command history, in the right context. 13:26:18 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 13:38:06 pointfree: heard of Ripscrip, ReGIS or NAPS LPS? 13:41:01 Zarutian: I've heard of ReGIS, but not the others. 13:42:43 the last one was used for the USA equiv of TeleText iirc, the first one was some what popular with CBBSes before ISPs (some who used to be big boards btw) brought the Internet to most people. 13:44:59 ...sixels seem to be the best supported graphics across various terminal emulators though. It would be nice if there were more support for tek4014. 13:45:48 pointfree: got a link to description of tek4014 ? 13:47:43 Zarutian: https://github.com/cstrotm/forth-tek4014 https://en.wikipedia.org/wiki/Tektronix_4010 13:47:48 what all three I mentioned have and recommend are probing CSIs to see if the terminal supports them or not 13:58:46 pointfree: I am wondering how DECVEC from that all-escapes.txt works 14:04:23 KipIngram: something I always found pussling is that most USA keyboard are missing ten keys, that is are 101 keys instead of 111 (I want 17 more added to that, but not quite a space cadet keyboard though) 14:21:47 See, to me 101 keys is "standard." What are those 10 keys? 14:22:09 And for many years now I've worked exclusively on notebook computers or bluetooth keyboards with quite a bit fewer keys. 14:23:13 My Macbook Air has... 72. 14:29:36 --- quit: epony (Remote host closed the connection) 14:29:56 --- join: epony (~epony@unaffiliated/epony) joined #forth 14:32:27 Do all terminal irc clients filter out these escape codes? Could I give people sixel image embeds? 14:33:08 Well, I've seen some "graphic-y" looking things in some people's stuff from time to time. 14:33:17 And I have about as "terminal" a client as you could ask for. 14:33:25 Try one and I'll tell you what it does. 14:37:49 --- nick: pointfree -> pointfree_ 14:39:32 --- nick: pointfree_ -> pointfree 14:45:42 KipIngram: keys that are used by Europeans to map to symbols such as ö þ and such. 14:46:34 plus, and this has always annoyed me with USA keyboards, the pipe angle bracket key between z and left shift 14:50:20 --- join: pointfree_ (~pointfree@2601:646:c103:f550:b40d:f3ba:5033:6d73) joined #forth 14:50:33 Interesting. 14:50:45 My pipe's in the top right, beneath the delete key. 14:50:52 Shifted \ 14:52:02 Pq#0;2;0;0;0#1;2;100;100;0#2;2;0;100;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1!14@\ 14:52:49 pointfree: damn you! now I am thinking of how to make an frame buffer to sixel scanner 14:54:05 KipIngram: I see the image in my terminal irc client. Do you? 14:55:03 Using https://tools.suckless.org/ii/ 14:58:45 No, I just got a text screen 14:58:51 string 15:00:13 KipIngram: https://github.com/saitoha/libsixel#terminal-requirements 15:00:14 It may also get filtered out by ncurses 15:06:14 https://ma.ttias.be/terminal-escape-sequences-the-new-xss-for-linux-sysadmins/ 15:09:35 --- join: wa5qjh (~quassel@175.158.225.207) joined #forth 15:09:35 --- quit: wa5qjh (Changing host) 15:09:35 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 15:09:46 mouse movement event escape sequences in a git diff?!? 15:10:22 --- quit: groovy2shoes (Read error: Connection reset by peer) 15:13:42 hmm... maybe there's a way to use the reported mouse event coordinates directly as part of a sixel image without code.. 15:13:59 * Zarutian starts on https://gist.github.com/zarutian/972457a02a4b8b396dbcc59e71d45792 15:14:59 Zarutian: +1 15:15:25 how was it, does one do ALLOT before or after VARIABLE FOO ? 15:15:31 after I assume 15:15:53 to make a buffer? 15:16:31 to make a buffer 15:16:57 after, but you probably want create for that since variable will also allot a cell 15:17:22 and it adds a does> @ ; 15:18:22 `create buff 10 allot` == `variable buff 10 cells + allot`? 15:19:14 After. 15:19:35 And VARIABLE gives you one cell, of course - you just allot the rest. 15:19:55 pointfree: You use ii? Awesome. 15:20:00 er sorry, i was thinking of value. it does not add a does> @ 15:20:02 * koisoke blushes 15:20:03 No, it's CONSTANT that adds DOES> @ ; 15:20:12 KipIngram: right 15:20:12 :-) 15:20:18 :| 15:20:25 No worries - just means you know so much it gets confusing at times. 15:20:31 if you want >1 cell, just use create 15:21:15 so `create x 10 allot` is 10 cells? 15:21:21 Yes. 15:21:23 No. 15:21:26 That would be 10 bytes. 15:21:30 as I thought 15:21:34 create x 10 cells allot 15:21:34 you want 10 cells allot 15:21:49 so you might as well `variable x 10 cells + allot` 15:22:08 That would underflow 15:22:30 lol. 15:22:41 wew I got my cells syntax confused again 15:23:00 on the @ you need then `n cells +` 15:24:12 what are you expecting the addition is for? 15:24:28 cells just multiplies by the cell size 15:24:44 Watching Zarutian "live"code on gist. He's thinking. Taking his time. 15:24:59 koisoke: if you want to get cell 2 of x it's `x 2 cells + @` 15:25:10 Right. 15:25:24 : [n] cells + ; 15:25:28 x 2 [n] @ 15:25:55 not worth factoring imo, it's 8 characters 15:26:11 That's fair. 15:26:16 a little bit of verbosity never hurt nobody 15:26:28 :-) 15:26:40 WilhelmVonWeiner: right but allot takes a number of characters not a pointer 15:26:42 It would make a nice primitive. shift left 3 bits, add. 15:28:26 koisoke: yeah, I corrected myself. KipIngram pointed it out, the + sh/w/could underflow. 15:34:06 ah *nod* 15:56:19 --- quit: epony (Ping timeout: 246 seconds) 16:01:38 --- join: epony (~epony@unaffiliated/epony) joined #forth 16:26:13 pointfree: Will that still work for 16-bit numbers? 16:26:46 I do have double length support, but speed would be a limiting factor 16:29:15 If I disconnect, please still do reply, I'll check the public logs afterwards. 16:31:41 WilhelmVonWeiner: howzzat, eh? ;-Þ 16:31:44 --- join: eponym (~epony@unaffiliated/epony) joined #forth 16:33:48 --- quit: epony (Ping timeout: 252 seconds) 16:35:46 --- nick: eponym -> epony 16:37:07 Ah it seems like it generates two 16-bit numbers, which is good. Thanks! 16:37:58 siraben: http://ix.io/1owt http://www.arklyffe.com/main/2010/08/29/xorshift-pseudorandom-number-generator/ 16:38:30 pointfree: https://gist.github.com/zarutian/972457a02a4b8b396dbcc59e71d45792 <- what do you think? I might have the CSI wrong though 16:38:43 --- join: tabemann (~tabemann@rrcs-162-155-170-75.central.biz.rr.com) joined #forth 16:40:29 okay, step one for essentially reimplementing Readline in Forth has been achieved 16:41:25 it's not much, but now I can have input crossing multiple lines of input 16:41:48 and I can go back and forth in the input, and I can insert characters in the middle of the input 16:42:09 and likewise delete characters in the middle of the input 16:45:12 Zarutian: gforth does not have << nor >> 16:45:42 does it have 2* and 2/ ? 16:47:25 --- quit: kumool (Ping timeout: 246 seconds) 16:48:06 it does 16:48:26 no underscore in framebuffer 16:48:47 gforth does not have R:( 16:50:19 --- quit: epony (Ping timeout: 268 seconds) 16:53:12 pointfree: what about now? does it pass gforth? 16:54:01 missing space after ." 16:54:07 Zarutian: yep 16:54:09 now it does 16:54:18 --- join: epony (~epony@unaffiliated/epony) joined #forth 17:08:56 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 17:10:01 hi 17:10:17 hey 17:10:27 * tabemann just added support for delete forward to Attoforth 17:11:33 --- quit: epony (Ping timeout: 252 seconds) 17:15:19 --- quit: siraben (Ping timeout: 252 seconds) 17:36:35 --- join: epony (~epony@unaffiliated/epony) joined #forth 17:48:57 --- quit: tabemann (Ping timeout: 252 seconds) 18:18:56 --- join: jedb (~jedb@199.66.90.113) joined #forth 18:50:15 --- join: kumool (~kumool@adsl-64-237-233-169.prtc.net) joined #forth 18:52:24 --- join: mark4 (~mark4@cpe-2606-A000-8096-FE00-5A94-6BFF-FEA6-29D4.dyn6.twc.com) joined #forth 19:07:03 --- quit: epony (Ping timeout: 252 seconds) 19:12:00 --- join: epony (~epony@unaffiliated/epony) joined #forth 19:26:00 --- quit: wa5qjh (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) 19:27:47 --- join: wa5qjh (~quassel@175.158.225.207) joined #forth 19:27:47 --- quit: wa5qjh (Changing host) 19:27:47 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 19:29:59 --- quit: wa5qjh (Client Quit) 19:33:25 --- join: wa5qjh (~quassel@175.158.225.207) joined #forth 19:33:36 --- quit: wa5qjh (Changing host) 19:33:36 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 19:37:55 --- quit: wa5qjh (Remote host closed the connection) 19:39:48 --- join: tabemann (~tabemann@2602:30a:c0d3:1890:b90b:3bee:a83b:ed44) joined #forth 19:42:42 --- join: wa5qjh (~quassel@175.158.225.207) joined #forth 19:42:42 --- quit: wa5qjh (Changing host) 19:42:42 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 19:49:46 --- quit: wa5qjh (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) 19:52:15 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 19:54:05 --- quit: epony (Ping timeout: 268 seconds) 19:58:12 hi KipIngram 20:01:14 --- join: epony (~epony@unaffiliated/epony) joined #forth 20:04:23 --- quit: epony (Excess Flood) 20:04:49 --- join: epony (~epony@unaffiliated/epony) joined #forth 20:07:55 Hi Dave. 20:10:24 --- join: reepca (~user@208.89.170.250) joined #forth 20:12:09 --- quit: epony (Excess Flood) 20:16:25 --- quit: wa5qjh (Remote host closed the connection) 20:18:15 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 20:18:59 --- join: epony (~epony@unaffiliated/epony) joined #forth 20:21:02 --- quit: epony (Max SendQ exceeded) 20:33:22 --- join: epony (~epony@unaffiliated/epony) joined #forth 20:45:31 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 20:53:01 --- quit: pierpal (Quit: Poof) 20:53:21 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 20:53:54 --- quit: wa5qjh (Remote host closed the connection) 20:55:49 --- join: wa5qjh (~quassel@175.158.225.207) joined #forth 20:55:49 --- quit: wa5qjh (Changing host) 20:55:49 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 20:56:17 --- quit: kumool (Quit: Leaving) 21:06:52 --- quit: pierpal (Read error: Connection reset by peer) 21:07:07 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 21:11:46 --- quit: dddddd (Remote host closed the connection) 21:44:58 --- quit: wa5qjh (Remote host closed the connection) 21:47:24 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 21:49:07 --- quit: phadthai (Quit: hardware upgrade) 22:14:04 --- quit: pierpal (Read error: Connection reset by peer) 22:14:13 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 22:19:15 --- quit: dave9 (Remote host closed the connection) 22:19:35 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 22:20:51 --- quit: pierpal (Ping timeout: 252 seconds) 22:22:33 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 22:26:57 --- quit: pierpal (Read error: Connection reset by peer) 22:27:12 --- join: pierpal (~pierpal@host168-226-dynamic.104-80-r.retail.telecomitalia.it) joined #forth 22:49:02 --- join: phadthai (mmondor@ginseng.pulsar-zone.net) joined #forth 23:42:15 --- quit: pointfree_ (Ping timeout: 252 seconds) 23:59:59 --- log: ended forth/18.10.06