00:00:00 --- log: started forth/19.02.28 00:04:31 --- quit: zy]x[yz (Ping timeout: 250 seconds) 00:19:30 OK, enough for tonight.. Tomorrow I retest the branching and then I can ditch that opcode and start using it. 00:42:54 rdrop-exit, good morning 00:43:18 Good afternoon presiden :) 00:43:27 --- join: zy]x[yz (~corey@unaffiliated/cmtptr) joined #forth 00:51:14 --- quit: zy]x[yz (Ping timeout: 245 seconds) 01:10:07 --- join: dave0 (~dave0@223.072.dsl.syd.iprimus.net.au) joined #forth 01:14:21 --- quit: yrm (Quit: yrm) 01:15:58 Morning Forth 01:16:24 Good afternoon WilhelmVonWeiner 01:17:18 Got my first big ol (metaphorical) paycheck (it's 2019, everything's digital) today 01:17:57 Going to write a forth program to analyse my finances 01:20:36 :) 01:21:36 I read a worrying statistic today: 20% of savers only save 5% of their annual income. An even smaller percentage of those people know about Forth 01:22:16 :) 01:57:46 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 02:02:18 --- join: zy]x[yz (~corey@unaffiliated/cmtptr) joined #forth 02:04:44 --- quit: ashirase (Ping timeout: 268 seconds) 02:07:01 --- quit: zy]x[yz (Ping timeout: 255 seconds) 02:08:31 what fraction of people are not savers? 02:09:33 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:10:27 something like 30, 40% 02:10:48 so that number is a bit odd 02:34:10 --- join: zy]x[yz (~corey@unaffiliated/cmtptr) joined #forth 02:42:50 --- quit: zy]x[yz (Ping timeout: 240 seconds) 02:55:44 so, any opensource forth os on x86/x64 that I can peek around? 02:58:31 I imagine there's an eForth port 03:00:02 i remember someone in this channel had sent me a minimal x86 forth for learning purpose 03:00:20 unfortunately i forget his nick and i dont have that files 03:10:27 there is jonesforth 03:10:33 i wrote a simple forth 03:30:32 --- join: proteusguy (~proteusgu@cm-58-10-208-131.revip7.asianet.co.th) joined #forth 03:30:32 --- mode: ChanServ set +v proteusguy 03:44:47 yunfan, 'Darksecond' maybe? """building my own forth os experiment [...] https://github.com/darksecond/unx-forth is what I have so far, still working on it""" 03:45:24 ... this was a year ago, or so. 04:03:03 interesting 04:03:27 are you interested in the forth interpreter/compiler, or in the os part 04:05:37 the os part 04:09:34 WilhelmVonWeiner: emacs forth-mode doesn't have an auto-align thing 04:09:43 that would be convenient 04:22:30 --- quit: ircbfs (Ping timeout: 240 seconds) 04:43:00 dddddd: ah, that unx-forth sound like it 04:47:07 --- join: zy]x[yz (~corey@unaffiliated/cmtptr) joined #forth 04:49:08 corecode: I think it does 04:49:41 Because I have to switch to fundamental-mode to stop it indenting past semicolon words I define 04:50:27 oh not on the same line actually 05:02:15 --- nick: Guest34409 -> rprimus 05:02:44 --- nick: rprimus -> Guest11951 05:06:25 --- quit: Guest11951 (Quit: leaving) 05:06:53 --- join: rprimus_ (~micro@unaffiliated/micro) joined #forth 05:42:30 --- quit: smokeink (Ping timeout: 244 seconds) 05:50:38 --- quit: rdrop-exit (Quit: Lost terminal) 06:25:04 I've been porting Forth to an in-game computer recently 06:25:11 Started today 06:25:16 just got base printing to work: https://i.imgur.com/lWi5mN8.png 06:25:22 computer internals: https://i.imgur.com/WIB51zi.png 06:25:52 The large red region is the RAM, that little bit of data is the forth kernel so far 06:26:18 I was considering writing a Forth for the PICO-8 06:26:28 Here's the source: https://github.com/siraben/r216-forth/blob/master/forth.asm 06:26:33 Does the PICO-8 have a bytecode? 06:26:41 I was about to say, I don't know if it does 06:26:57 there's a similar virtual console that was released recently too 06:27:16 I shan't be writing a Forth in their BASIC clones though 06:27:17 Mine's not really qualified to be a Forth yet, but it does have DOCOL and EXIT 06:27:35 It's in the blurry region between Forth and assembly 06:28:35 The original creator of the computer is pretty intense, his demo was a quadratic equation solver 06:28:36 https://github.com/LBPHacker/R216/blob/master/quadratic.asm 06:28:56 Implemented the IEEE 754 standard and has complex numbers too! 06:29:17 the R216 eh?... interesting 06:29:46 Extremely well documented: https://lbphacker.pw/powdertoy/R216/manual.md 06:30:30 I'm using the 8192 16-bit cell version, which should be enough memory, right? 06:31:29 I've seen a forth for the Speccy in ~1k, so... probably 06:31:56 I didn't realise there was a CPU made in powder toy 06:31:59 that's awesome 06:33:03 It's probably the most advanced so far 06:33:30 I love creative nerds dammit 06:33:32 --- join: smokeink (~smokeink@42-200-118-142.static.imsbiz.com) joined #forth 06:34:15 Speaking of in game computers, Sethbling updated his Atari 2600 emulator which now runs at 1 frame per second 06:34:17 https://youtu.be/mq7T5_xH24M 06:34:32 Compared to the previous version which took 4 minutes per frame 06:34:38 ^ This is in Minecraft 06:39:16 --- quit: smokeink (Quit: Leaving) 06:39:49 Surely there's an Atari forth somewhere 06:54:34 --- quit: dave0 (Quit: dave's not here) 07:19:39 volksforth has an atari version 07:20:29 so who wants a fpga cpu devboard 07:37:11 --- quit: tabemann (Ping timeout: 250 seconds) 07:48:21 I do. 07:48:35 Are you looking to give one away? 07:48:53 well, i'd have to design and build them first 07:49:13 can't do it for free 07:49:13 Ah. Hah hah. 07:49:24 in my experience free devboard = never used 07:49:35 Ok - well, I'm hoping to do something similar one of these days. 07:50:16 Actually what I want to do on the hardware front is design a "cor circutry block," with CPU, FPGA, power supply, bluetooth, Wifi, etc. that I can then use in arbitrary embedded gadgets. 07:50:29 And this Forth I'm writing will be the "core software" for those devices. 07:56:24 Anyway the goal would be to have the basic core hw + core software that would come up and talk to me and function as a basic environemnt. Then I could spin a board with that on it, add additional app-specific circuitry, write additional app-specific code, and have something new. 07:56:41 The FPGA would be optional - I could just depop it if an application didn't need it. 07:57:55 the fpga is my cpu :) 07:59:31 Right - that's very fun. FPGAs are very power hungry, though, so that leaves you without a low-power appraoch. 07:59:51 But it's definitely the most fun approach, I think. 08:00:01 wa 08:00:06 very power hungry? 08:00:18 And of course I could play those games with my circuit too, if I just want to have fun. :-) 08:00:41 I definitely want to actually deploy a FPGA-housed stack machine one of these days. 08:00:58 I've tinkered with it so long on paper and in my head that it would be a shame never to try out the ideas. 08:02:45 Yes, typically FPGAs consume significant amounts of power. 08:03:00 They're rarely used in power-sensitive battery-powered applications. 08:03:27 Maybe there are some brands out there that try to address that, but certainly the popular Xilinx ones fall into the power hungry category. 08:03:35 Seems like someone has a family called CoolRunner. 08:03:46 I don't know details about that family. 08:03:52 But you could shop around. 08:04:14 where do you get this significant amounts of power figure from? 08:04:26 Professional experience. 08:04:42 You just don't consider Xilinx FPGAs for low-power applications. 08:04:48 typically an fpga will be more energy efficient for the same compute application, compared to a general purpose cpu 08:05:07 who's talking about xilinx? they're not the only game in town 08:05:23 Right - like I said above; you could shop around. 08:05:48 now, implementing a soft core, that's not power efficient 08:05:55 But *generally* FPGAs designed for performance will require a good bit of power. 08:06:05 same for cpus designed for performance 08:06:05 This is pretty well-known in the business. 08:06:59 Well, I don't feel like arguing about it. I'm on a phone call at work that I should pay attention to. I just shared what I know from working in such areas over the years. 08:07:29 I worked in battery-power seismic for a while, and we darn sure didn't use an FPGA, for that reason. We wanted our units to collect data for weeks on one battery charge. 08:07:43 Anyway, maybe there's something out there you'll like - good luck with it. 08:07:50 maybe you should look into low power fpgas :) 08:08:05 i already have a board with fpga on it 08:08:10 it's just special purpose 08:09:43 KipIngram: I worked with some low-power circuit in an internship. Cool stuff. 08:10:34 Are you talking low power FPGA, or just low power techniques in general? It is a pretty cool area. 08:10:35 EFM32 Gecko. 08:10:49 Haven't heard of that - googling. 08:10:56 So not an FPGA 08:11:07 with forth on it? 08:11:15 Nope, I used C 08:11:29 It's really remarkable how efficient they've gotten some of those gadgets. 08:12:22 It had several sleep modes and I used some fun tricks to bring power usage down to a very low level. 08:12:47 Yes, we made these seismic units so they could sleep out in the field for months. 08:13:06 Anytime you wanted to collect data, you'd send a message out over the mesh network and they'd wake up and ready themselves. 08:13:12 I calculated that it could run on my phone battery for years :p 08:13:17 There might be tens of thousands of them out there. 08:13:37 Woah, that's cool stuff. 08:13:50 And in order to get good seismic images, they all need to be time synchronized - we had that built in to the mesh network radio protocol so they could line up their clocks to within a few hundred picoseconds. 08:13:54 I'm sorry - nanoseconds. 08:14:24 They all had variable frequency oscillators with phase lock loops, so they pretty much all matched their frequencies. 08:14:37 It was like having one huge circuit out there, spread out over acres and acres. 08:14:58 Heh 08:15:00 how do you wake up remotely while being low power? 08:15:02 And the noise floor had to be insanely low - we were taking 24-bit samples from the geophones. 08:15:20 They wake themselves periodically and see if a wake-up call is being given. 08:15:25 ok 08:15:28 If not, they go right back to sleep. 08:15:49 So it was a tradeoff - if you wanted to be able to wake the network quickly, they had to check more often and battery idle life was less. 08:15:51 at a specific time, or the wakeups are broadcast long enough? 08:16:10 If you were willing to wait longer, you could have them wake less often. 08:16:25 in my experience crystal frequency drift puts a limit to low power 08:16:33 I don't recall that detail - it's been a number of years. 08:16:46 ok 08:16:57 They can't be time synced when the mesh network isn't active, so you can't count on their clocks agreeing. 08:17:09 The deep sleep low power clocks aren't necessarily terribly accurate. 08:17:14 yea 08:18:05 --- quit: dave9 (Ping timeout: 250 seconds) 09:25:46 --- quit: nighty- (Remote host closed the connection) 09:34:29 --- quit: X-Scale (Ping timeout: 244 seconds) 09:35:35 --- join: X-Scale` (~ARM@244.200.137.78.rev.vodafone.pt) joined #forth 09:38:36 --- quit: cheater (Ping timeout: 268 seconds) 10:14:50 --- join: dave9 (~dave@223.072.dsl.syd.iprimus.net.au) joined #forth 10:58:03 --- quit: reepca (Remote host closed the connection) 11:07:59 --- join: reepca (~user@208.89.170.37) joined #forth 11:13:07 --- quit: dddddd (Ping timeout: 258 seconds) 11:36:45 --- join: cheater (~cheater@unaffiliated/cheater) joined #forth 12:17:17 --- join: mtsd (~mtsd@94-137-100-130.customers.ownit.se) joined #forth 12:23:24 --- quit: mtsd (Quit: WeeChat 1.6) 12:45:16 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 14:40:02 --- join: mykespb (~myke@213.141.133.133) joined #forth 14:40:35 --- join: dave0 (~dave0@223.072.dsl.syd.iprimus.net.au) joined #forth 14:44:02 hi 14:55:06 Hi dave0. 14:58:15 sup KipIngram 14:58:29 Not a whole lot. 14:58:41 Got a nice "edit line" word working lat night. 14:58:43 last 14:58:48 i'm drinking coffee C4[_]~ C8[_]~ C3[_]~ C2[_]~ 14:58:57 ah cool 14:59:09 edit line is user-friendly 14:59:15 It uses the work I did previously on EXPECT and QUERY, so it was pretty easy. 14:59:29 I need to factor it a little, but even in first draft form it's not ridiculously long. 14:59:47 It is pretty friendly. But I want more editor keys. 14:59:57 All I have right now is cursor left, cursor right, and backspace. 15:00:01 And Enter to wrapup. 15:00:10 I need things like word left, word right, delete word, etc. etc. etc. 15:00:22 Home, end... 15:00:33 are you gonna do a history ? like up & down arrows 15:00:42 I've already done a history. 15:00:47 ah cool! 15:00:49 QUERY deploys it. 15:01:06 There's a base word READ that handles one line with horizontal editing, into a buffer. 15:01:26 It can be re-started, so it handles only those keys and returns on all others. 15:01:46 EXPECT just immediately re-starts it if the key wasn't ENTER, but QUERY checks for the up and down keys. 15:01:57 how do you map eg. left arrow to a key code? 15:02:15 This edit word just deals with one line, so it's more similar to EXPECT. A screen editor would be more similar to QUERY, just with different functions for up and down arrow. 15:02:18 --- quit: Zarutian (Read error: Connection reset by peer) 15:02:30 I don't use the cursor keys. I don't like them anyway. 15:02:39 I use ctrl-H for left and ctrl-l for right. 15:02:43 oh okay 15:02:43 Right there under my fingertips. 15:02:46 --- join: Zarutian (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 15:03:02 j and k for up and down. 15:03:15 oh that's vi keys! haha 15:03:30 ;-) But with ctrl required, which is a bit like emacs. 15:08:26 What's new with your stuff? 15:09:12 nothing to report 15:09:19 :-) 15:09:37 i read through jonesforth again yesterday, it is indirect threading 15:09:49 I do like indirect threading. 15:11:04 I think it just provides "more features more easily" than the other models. You can usually "get there" with any of them, but with the other ones you often have to jump more hoops for the edge features. 15:11:47 Plus it keeps all of the actual machine code in one tight region, where it can all likely get pulled into an instruction cache and stay there, if there's not a bunch of other stuff competing with it. 15:11:55 indirect threading is where each xt in a word points to the code field of each word invoked? 15:12:02 i liked that non-primitive words are just a list of addresses... there's no code... so you don't have to fuss around to make the data secton executable 15:12:15 Um, the fields in the definition point to a field that itself points to code. 15:12:21 KipIngram: yep isolates the machine code.. very nice 15:12:26 Whereas with direct threading the definition fields point to code directly. 15:12:29 --- join: rdrop-exit (~markwilli@112.201.168.172) joined #forth 15:13:19 right. Now I am wondering about ISAs such as the canonical dual stack machine from Philips Koopmans book 15:13:31 So before each definition list you have a *pointer* to docol, rather an a copy of or a jump to docol. 15:14:20 I rather feel that if you put a jump to docol you've given the performance advantage of direct threading right back, so to me it defeats the point if you don't have a full copy of docol there to directly target. 15:14:33 on such ISA any instruction above say 32 is an call to that address 15:14:58 : square dup * ; would be a list of addresses .int DOCOL,dupe,star,EXIT no machine code 15:15:10 Yes, when I'm looking at processor architectures I typically treat a cell with the MSB 0 as a call, and a cell with the MSB 1 as packed opcodes. 15:16:12 KipIngram: no, I am not talking about packed opcodes here. But instructions 32 and below (to and including zero numerically) being hardware implemented primitives 15:16:15 There has to be a way to eventually have something not be an address, right? 15:16:30 Oh, 32 was an explicit number - I thought it was just an example. 15:17:04 got it - so instead of using the MSB they're using all of bit 5 and above. 15:17:10 I see. 15:17:32 That means opcodes for single instructions still have to use all the bits, then, right? 15:17:41 All those zero bits are required to designate it a primitive? 15:17:49 easyly implemented by checking if the first x MSB bits are zero (a primitve) or not (a call to that address) 15:17:53 yes 15:18:07 Good morning Forthwrights c[_] 15:18:07 i saw a webpage that profiled a forth on the x86 line, and DTC worked well except for on a pentium something where there was a great speed loss due to mixing machine code with data 15:18:17 so on that pentium, ITC was better 15:18:40 But on the other hand you get to use the whole address space, whereas I give half of it away 15:18:41 dave0: probably on most Pentiums as they tried spliting instruction and data caches up. 15:18:42 hi rdrop-exit 15:18:50 KipIngram: yeb. 15:19:07 Hi dave0 15:19:46 Well, almost the whole space. All except for 32 locations. 15:20:29 I've considered this both for 16-bits (3 packed opcodes, 1 designator bit) and 32 bits (6 packed opcodes, 2 designator bits). 15:20:43 With two designators you can do call, jump, conditional call, and something else. 15:20:51 I'm sorry, I meant conditional jump. 15:20:58 conditional call is a possibility for the "something else." 15:22:29 heck a PU (processing unit) made up of two stack memories, one shared memory for data and program and the other stuff could be tiled over same die area as say an Intel Haswell and probably do more processing with less energy cost and less heat dissapation requirements. (I would go for 16 bit cellsize personally) 15:22:36 The 32-bit system also lets you choose between six 5-bit opcodes or five 6-bit opcodes. 15:23:00 I think so too. 15:23:17 I really wish we could know how thoroughly such a thing could be optimized. 15:23:32 I know we have the Green Arrays chip, and that's nice, but I doubt it's the optimum. 15:23:47 hmm.. how much does it cost to get such a chip manifactured at say 28 nm feature size by TMSC, I wonder 15:23:59 Plus it's kind of far from general Forth - it has a lot of Chuck's personal preferences in it. 15:24:01 brb need more coffee 15:24:30 I think of it as an array of Forth *microcontrollers*, not full on microprocessors. 15:25:09 what I have in mind is pretty much have tiled conventional Forth machines that have comm ports with Von Neuman neighbours and run FlowBasedProgramming composed programs ontop of that. 15:25:23 yes. 15:25:30 I think that would be very powerful. 15:26:05 And likely would be simple enough that we'd be less likely to get things like Spectre and Meltdown. 15:26:17 They've let the x86 get so complex they can't keep up with it any m ore. 15:27:08 Whoever decided that you didn't have to fault on *speculative* execution of a privileged instruction really screwed the pooch. 15:29:19 hmm.. I am thinking that each such PU would have very very simple MMU. One based of one I saw for an Motorola 68c816 based system. 15:29:44 Cache? 15:29:51 --- join: mark4 (~mark4@12.41.103.244) joined #forth 15:30:03 no cache. Except maybe off chip/die 15:30:21 Ok. I've always scratched my head over whether caches are "Forthy." 15:30:22 freeking HATE c. something thats a 2 liner in forth is literally IMPOSSIBLE in c 15:30:37 Seems like just having an explicit fast RAM that the programmer used as he pleased would be more Forth-style. 15:30:38 i literally need a C macro to create named C functions 15:30:48 Intead of trying to have hardware figure out what to keep in the fast RAM. 15:30:55 So a tiered memory. 15:30:57 On-chip scratchpad 15:31:03 Yes. 15:31:05 mark4: what do you mean by named C functions? 15:31:06 a c macro to create c functions that take varargs... 15:31:16 (or what are unnamed ones?) 15:31:17 Explicitly addressed. 15:31:50 yes 15:31:55 I'm a fan of putting the programmer in control. 15:32:33 i need a macro to create functions so i pass the name of the function and the functions parameters (varargs) to the macro and the macro creates the function. CANT be done 15:32:36 the MMU is pretty basic, 16 slots of bank selector registers. Where one bank at one selector is where those registers are accessable. That spefic bank gets selected back in at an interrupt. 15:32:36 Then all that logic that was used for making those decisions can be used for something directly productive. 15:32:39 c is so freeking crippled 15:32:56 Same with branch prediction. Provide a way for the programmer to say which way to prefer. 15:33:16 Right a Scratchpad is basically a cache without the brains 15:33:28 Yep. 15:33:30 I like it. 15:34:04 some of the bank select values do cause vectored interrupts when an access (execution, read or write) goes through them. 15:34:27 Too sophisticated IMO 15:35:36 sophisticated but damn simple to implement hardware wise and allows for same kind of protection as most problem/priviledged bit based systems. 15:35:53 0 0 format (bs) 2 0 format (bell) 6 2 format (csr) <-- trying to do the same thing in c. 15:36:38 --- join: yrm (~yrm@host155.shizentai.jp) joined #forth 15:36:39 very difficult to explain what those do 15:36:55 I like capabilities for protection. 15:37:00 first parameter is an array offset. second parameter is the number of parameters the created word takes 15:37:09 I was rather impressed how little was needed yet allowed for full process address space seperation and virtualization. (No I/O instructions everything memory mapped) 15:37:20 Every process "owns" its own assigned address space, and therefore can create capabilities to any part of that range. 15:37:24 so when i call (bs) it knows it takes 0 parameters and can access index 0 of some array 15:37:29 And can share those with other processes if they wish, 15:37:38 And that's it - other than that you call the privileged OS. 15:37:55 but (csr) takes 2 parameters and access index 6 of the array 15:38:02 KipIngram: like that Magic Number machine and Burroughs 5000? I let you know I think I have read everything written seriously about capabilities. 15:38:23 the "format" macro does not know what parameters will be passed to the words it creates, just the number of parameters that word takes 15:39:04 I have not, Zarutian. I've read "some" about them, and think they seem sensible. 15:39:10 So I defer to your expertise there. 15:39:34 mark4: I don't see where you're going with that yet, but it seems like it might be going somewhere interesting. :-) 15:39:52 KipIngram: im trying to port my forth terminfo stuff to c. 15:39:53 KipIngram: well, feel free to ask in #erights on freenode about this kind of stuff ;-) 15:39:55 * KipIngram has only read the bare basics about capabilities. 15:40:07 I thought it looked "terminal-ish." 15:40:11 Just based on the names. 15:40:44 the forth word format creates a "constant" that has 2 items and which calls another forth word that fetches those items. one is an array index and the other is a count of expected items on the stack 15:40:54 As a hardware guy, I'd tend to design such things so that rights boundaries were on power-of-two boundaries. 15:41:03 Otherwise you find yourself adding in the hardware. 15:41:13 Though I guess you could define upper and lower bounds. 15:41:19 mark4: Why do you need this? 15:41:23 ? 15:41:32 i need the impossible 15:41:42 8-D 15:41:43 a c macro that can lay down a c function 15:42:01 i think in c++ they call those templates or something 15:42:31 I used macros a lot in my C implementation of Forth (the one before this one). 15:42:45 I had CELL() which defined a definition entry, and that was fine. 15:43:16 But I also wound up with META(), which came into play with POSTPONE and so on, and even a level beyond that for reasons I can't specifically remember right now. 15:43:31 By the time it was all over I was dizzy and could hardly keep up with what was going on. 15:43:38 I'll never go down that road again - at least not like that. 15:43:50 i either need a c macro to create c functions or i need an associative array that does NOT have to do name searches at run time :/ neither exist in c 15:44:06 Seriously, on the most involved ones I could write it cold to about the 97% point, and then guessed at the rest until it worked. 15:44:09 And that's no way to program. 15:44:32 It felt mildly dirty. 15:44:39 hmm i wonder if i could do this in assembler 15:44:47 Assembler rocks. 15:44:49 no this needs to be pure c 15:45:10 KipIngram: not the GNU assembler. that has absolutely the WORST fucking macro faciltiy of any assembler i ever used 15:45:18 and no using the c preprocessor would be even worse 15:45:22 It takes a while to get to the point where your assembler program really does much of anything, but once you get to that point it's quite a sense of freedom. 15:45:30 I'm using nasm. 15:45:41 heh 15:45:43 I once wrote a forth-like macro language in C 15:45:54 I've managed to macro what I wanted to macro, but I really can't comment on exactly how good its macro capability really is. 15:45:55 kip nasm's macro facility is also crippled compared to some of the assemblers ive used 15:46:17 Ok. Well, I'm glad it managed to get me where I needed. 15:46:24 I wasn't asking a particular lot of it. 15:46:26 using eric isaacsons a386 assembler for dos i could not only assemble linked lists of forth words but HASHED VOCABULARIES!!!! 15:46:34 cant do that with either nasm OR gnu as 15:46:39 ah, I remember that guy. 15:46:50 Hmm something's causing interrupts to disable when I play around with my main menu 15:46:51 Very hard core about telling you not to pirate his tool. :-) 15:46:55 he lives in columbus indiana, thats where i live :P 15:47:00 Might be a drawing routine 15:47:03 i never met him 15:47:04 "The assembler leaves signatures - if you use it I will know." 15:47:10 "And I *will* sue you.* 15:47:12 "God is my co-pilot; C is my preprocessor" 15:47:12 :-) 15:47:42 yes he relied on things in the instruction encoding to watermark the code his assembler generated 15:47:59 for example he COULD assemble mov eax, ebx as a mov ebx, eax with the direction flag inverted 15:48:00 But - nothing wrong with that. It was his creation, after all, and he was willing to share it for personal use. 15:48:07 So hat off to him. 15:48:18 mov eax, ebx can literally be mov src, dst OR mov dst, src 15:48:32 a386 was the best assembler i ever used 15:48:34 The last time I coded in x86 assembly I used Flat Assembler 15:48:43 followed closely by the amiga devpac assembler 15:48:43 I do remember being pretty impressed with it. 15:48:51 i registered 15:49:00 But see, back then they tought you the deep dark details of how this stuff worked when you went to school. 15:49:04 https://flatassembler.net 15:49:05 They gloss over a lot of that now. 15:49:18 Focus instead on the other end - big data, etc. 15:49:57 I used flat when I started (but didn't finish) an asm Forth back on my last Linux machine. 15:49:59 none of this solves my current problem and to quote AVE on youtube, im all out of ideas and i thought of nothing 15:50:22 But when I finally got around to really DOING an asm imp, I was on MacOS, and nasm was the easiest to make work. 15:50:34 So when I then wanted to port it back to Linux, I sought out nasm. 15:50:42 x4 is built using nasm 15:50:55 I've been pretty happy with it. 15:51:00 t4 is built using the gnu assembler because there are LITERALLY no fucking arm assemblers for linux 15:51:12 As far as the macros go, I really needed stuff there to do my header macros. 15:51:21 I store them separately, but wanted to declare them inline. 15:51:31 take a look at the macros x4 uses 15:51:32 Wanted them to pad out certain areas, etc. 15:51:52 i literally assemble an executable identical to what the meta compiler would create from the same sources 15:51:55 Well, I think you may have given me one of the tips I needed to make my stuff work, six or eight months ago. 15:52:15 mark4: there is a devpac-compatible assembler: http://sun.hasenbraten.de/vasm/release/vasm.tar.gz 15:52:27 dave0: for linux? 15:52:34 or for 68k 15:52:47 i mean linux x86? 15:52:53 mark4: copiles on unix, generates code for amiga 15:52:54 avr's! 15:52:57 * PoppaVic chuckles 15:53:06 ave not avr 15:53:13 but i did write my own avr assembler in forth :P 15:53:22 and it can assemble code for ANY avr device 15:53:31 :-) Nice. 15:53:34 except maybe the tiny's which are pointless anyway 15:53:54 there is at least one forth avr-assembler.. I flogged it to work on the host instead. I remember hating it, but hating elf-crap more 15:54:19 my avr assembler is very x4 specific 15:54:24 and never released so far 15:55:10 i could create a structure of structures but thats such a fucking pain in the ass in c 15:55:17 because then you have to instantiate it 15:55:22 heh 15:55:39 I have a number of header macros - one for primitives with dictionary names, one for primitives without, and so on for definitions, process variables, system variables, etc. 15:55:46 in all cases I write something like 15:55:59 header_d "name", name 15:56:06 name_d: ... etc. 15:56:15 I could automate that name_d if I really wanted to. 15:56:34 the no-dictionary ones have a 0 at the end of the macro name, and no quoted string as a parameter. 15:56:48 Then that's immediately followed by the machine code of definition implementation. 15:56:50 i also srsly want to avoid foostructure.xxx when all i want is xxx() 15:57:07 using an array of structures is going to clusterfuck these sources 15:57:11 "or definition" 15:57:49 the other option is to simply hand code all 999999999999 functions, all of which are almost completely identical except for the vararg part 15:58:11 For variables there's a third (or second) parameter saying how many bytes to give it, and the allocation is done in the macro. 15:58:23 but because of how bullshit crippled c is that is probably my only viable option 15:58:31 heh i wonder if i should go ask in ##c lol 15:58:47 So something like header_p "base", base, CELL 15:59:02 "p" --> process variable. 16:09:17 The only reason I went with Flat Assembler is that I didn't want to bother writing an x86/64 assembler, for anything else I'd just make a Forth-based assembler. 16:12:04 --- join: nighty- (~nighty@b157153.ppp.asahi-net.or.jp) joined #forth 16:14:45 I don't envision ever targeting x86 again, so it's a non-issue now. 16:26:09 --- quit: mykespb (Quit: Leaving) 16:27:14 PoppaVic: sorry - can't recall - you mentioned a term the other night - shields? was relating to our conversation re: help info 16:27:41 shadow? 16:28:54 shadow-screens 16:32:19 Who knows what evil lurks in the hearts of men? The Shadow knows! 16:33:25 yes, and I remember that one too ;-) 16:33:38 ;-) 16:34:02 big ol' hat, cape over long coat, twin 45's - and no PC mercy 16:34:23 rdrop-exit: I even recall Doc Savage and THe Phantom ;-) 16:35:06 ..and Doc was always a quick read and entertaining.. Tom Swift? The Hardy Boys? heh.. The Happy Hollisters? 16:35:11 * PoppaVic chuckles 16:36:52 I used to collect Pulp reprints. I have four issues of the original Doc Savage from the late 30s. 16:38:26 yeah, we had a collection of paperbacks. 16:39:19 I have all the Bantam reprints from the 70s 16:41:32 yeah, those 16:42:22 ..and, of course, junk-shop and used-bookstore stuff that date back to $0.25 and $0.15 westerns and such - all gone now. I refused to lug them ever again 16:42:35 :) 16:44:19 I use shadow-screens, although mine just start with a word rather than the odd/even scheme 16:45:42 I use the word SHADOW for a block that documents code, and the word PREAMBLE for a block that explains a subsystem 16:55:29 --- quit: john_cephalopoda (Ping timeout: 264 seconds) 16:55:30 --- quit: Zarutian (Read error: Connection reset by peer) 16:55:40 --- join: Zarutian_2 (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 16:55:46 --- nick: Zarutian_2 -> Zarutian 16:56:48 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 17:18:40 the_cuckoo: Here's an example of a shadow/preamble screen, 16 lines x 64 chars 17:18:55 0 preamble Host UI - Console Pane - History 17:18:55 1 17:18:56 2 future @ + 0 ~chronology + 17:18:56 3 | | 17:18:56 4 v v 17:18:58 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 17:19:00 6 history-flags |x|x|x|0|0|0|0|0|0|0|0|x|x|x|x|x|x|x| 17:19:03 7 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 17:19:06 8 history-data |x|x|x| | | | | | | | |x|x|x|x|x|x|x| 17:19:08 9 +-----------------------------------+ 17:19:10 a |<----------- #history ------------>| 17:19:13 b 17:19:18 c-c-c-combo breaker! 17:19:37 hey! yer screens short! 17:19:39 c *** N.B. Circular addressing into buffers. *** 17:19:40 d 17:19:40 e 17:19:40 f 17:19:45 ah, there it is ;-) 17:19:49 Oops :) 17:19:59 kids nowadays ;-) 17:20:49 :)) 17:24:12 --- quit: mark4 (Read error: Connection reset by peer) 17:28:30 --- quit: dave9 (Quit: dave's not here) 17:28:51 --- join: dave9 (~dave@223.072.dsl.syd.iprimus.net.au) joined #forth 17:29:00 yay.. brads new forth book is due saturday.. I hate spending money, but I need to get meself presents on occasion ;-) 17:30:17 What's the book? 17:31:04 https://www.amazon.com/gp/product/1718124996/ref=ppx_od_dt_b_asin_title_s01?ie=UTF8&psc=1 17:31:30 "Moving Forth - Internals and TTL Processor: Forth Internals" Paperback 17:31:46 Cool! 17:33:22 TTL? You mean made up of 7400s series chips? 17:33:44 (besides perhaps EEPROM and RAM and ALU chips) 17:34:24 No idea, but I read brads pages often enough that a $10 paperbook is worth it. 17:34:56 Ah, it's a reprint of his TCJ articles, I think I have the originals. 17:35:38 ahh? well, I still ain't got 'em, so it's still worth the $10 17:36:29 Sure, it's good to support those who share their expertise 17:37:36 Even if I only refer to it rarely - like my otherwise useless F83 and F-PC texts. 17:37:43 Next time I'm in the States, I'll pick up the series 17:37:54 ..The big hurrah is a couple damned Arm asm books. 17:38:18 --- join: mark4 (~mark4@12.41.103.244) joined #forth 17:38:33 I enjoy revisiting old FORML proceedings 17:39:01 (Forth Modification Laboratory) 17:39:21 I never had any of them. 17:41:45 Some of mine are falling apart, haven't found any scans online. 17:42:26 Most of the JFARs are available on the MPE site though 17:43:00 (Journal of Forth Applications and Research) 17:44:18 I have the issues of Computer Language and Dr. Dobbs that had Forth articles 17:44:50 And most of the ACM SigForth newletters and proceedings 17:48:27 And most of the Forth books except this new series on Amazon 17:49:22 --- quit: dddddd (Remote host closed the connection) 17:49:44 Getting more c[_] 17:55:24 back 17:57:20 --- join: tabemann (~travisb@rrcs-162-155-170-75.central.biz.rr.com) joined #forth 17:58:41 The next thing on my Forth reading list is the HS/Forth (Harvard Softworks) manual. I haven't cracked it open in decades. 17:59:40 hey guys 17:59:48 Hi tabemann 18:03:30 --- quit: mark4 (Read error: Connection reset by peer) 18:07:06 PoppaVic: i cant buy that book's soft version 18:10:46 --- join: mark4 (~mark4@12.41.103.244) joined #forth 18:11:42 yeah, that happens with trade-paper. 18:15:29 i hope it could be publish at leanpub, which dont check buyer's region , i'd bought some book on there 18:16:24 --- quit: PoppaVic (Remote host closed the connection) 18:20:47 back 18:21:17 * tabemann finally got hashforth back to a non-crashy state 18:21:54 Cool 18:23:42 --- join: PoppaVic (~PoppaVic@unaffiliated/poppavic) joined #forth 18:25:24 what I miss about programming in haskell is that haskell made all bugs obvious... except for the bugs involving space usage, which are hard as fuck to debug 18:26:07 haskell bugs are like... the compiler catches it for you... or good luck finding why your hello world is taking up 8 gigs of RAM 18:26:21 =8-O 18:26:57 debugging forth is more like debugging c minus a debugger 18:28:25 the tracers that I've implemented in both my forths definitely helps... except when the bug is somewhere in code that is doing parsing, because it will trace every single name lookup in full 18:29:13 (one solution that did come to mind is to make the code that looks up parsed names temporarily turn off the tracer) 18:32:16 trace on ... trace off, wax on ... wax off 18:32:45 :) 18:32:59 debugging is for pansies. 18:34:35 HCF 18:35:01 I haven't found it particular hard to debug my Forth. 18:35:27 particularly 18:35:48 most of my debugging involves just reading the code, over, and over, and over 18:36:06 but I wish that I had things like breakpoints and stepping and whatnot 18:38:49 You could add debug support instructions to your VM 18:39:17 in attoforth I had a debug support instruction where when executed it would execute a function that I could then set a breakpoint on in gdb 18:40:01 which was useful because I could definitively confirm that I reached a certain point in the code, and from there I could manually examine the stack and like 18:41:27 Yes, I do a lot of code staring. 18:41:31 "Mental execution." 18:41:37 currently in the hashforth VM, though is just tracing and stack underflow detection 18:41:41 In Forth QUIT is a breakpoint. 18:42:30 --- quit: mark4 (Ping timeout: 240 seconds) 18:42:33 in forth, QUIT terminates YOU! 18:43:44 quit in forth you terminate 18:44:07 the problem with QUIT in hashforth is that it invokes PAUSE, because whenever one uses the REFL PAUSE is invoked 18:45:17 well, there is an option to turn off PAUSE when parsing input 18:48:37 Are these bugs in the VM or the Forth running on the VM? 18:49:03 there is also a way to turn it off when using ACCEPT, which is used by REFILL 18:49:20 rdrop-exit: the bugs I have been debugging are bugs in the Forth running on the VM 18:49:35 it's been a while since I've encountered an actual VM bug 18:50:16 What's PAUSE do and why is it a problem? 18:50:27 PAUSE switches tasks 18:50:34 that's my standard approach for tracking down where a segfault is occurring. 18:50:36 Oh, I see. 18:50:47 If it segfaults, it's before quit. 18:50:51 If it doesn't - it's after quit. 18:50:54 Home in. 18:51:10 Then adding some debug instructions to the VM should work 18:51:16 my strategy is to sprinkle my code with things like ." a " 18:51:29 Yes, I do that too. Usually 1 . for me. 18:51:58 also I sprinkly my code with .s as well 18:52:00 I also have s. and (s.). First one prints the whole stack, second one some number of items. 18:52:07 ^ Right. 18:53:45 Same here I have .#s to print some number of items 18:53:46 I make liberal use of a mechanism to turn multitasking IO into single-tasked IO that blocks, so that these ." a " and .s don't interfere with the overal control flow by switching tasks 18:54:06 execute-single-task-io it's called 18:54:12 Yes, I can see that being important. 18:54:20 like ['] .s execute-single-task-io 18:54:22 I'm not that far along yet - I don't have my other tasks running. 18:54:39 Why does output switch tasks? 18:54:55 Is it running over a serial link or something? 18:55:00 because if output blocks, it switches to the next task 18:55:11 Why does character output block? 18:55:14 currently it isn't, but it could be 18:55:32 I plan on porting this to some smaller system at some point 18:55:51 Ok, gotcha. That's my answer to a lot of "why" questions as well. :-) 18:56:01 KipIngram: there are no guarantees from the kernel that IO won't block 18:56:02 "Because someday ..." 18:56:36 Ok. 18:56:38 PAUSE before and after any syscall is probably a good idea 18:56:47 I don't really see why it would need to - the console is there, right? 18:56:54 It doesn't "fill up." 18:57:11 and because hashforth uses non-blocking IO normally, it's programmed to switch tasks whenever a system call would block 18:57:38 execulte-single-task-io switches how IO functions and makes it use blocking IO temporarily 18:57:45 *execute-single-task-io 18:57:49 Well, I definitely see the need for a "single tasking mode." 18:58:19 When you make a syscall control is out of your hands 18:58:26 Well, I've pretty much run out of excuses to postpone developing in Forth now. I can LOAD and I can edit lines of blocks. :-) 18:58:32 It's alive... 18:58:42 Kudos! 18:58:48 Yeah, pretty cool. 18:58:54 cool 18:59:08 I think the first thing I'll do is a little wrapper for the line edit word, that prints the portion of the block in editing in so I have some context. 18:59:20 That word itself just prints that one line and puts you in it. 18:59:53 With a cursor move or two I could actually move to where that line is in the listing and edit it in place. 18:59:55 rdrop-execute: the main system calls that I treat as potentially blocking are read() and write() - and when I get around to implementing socket IO, send(), recv(), connect(), and accept() 18:59:56 I've modified my host Forth so that the current block is always on-screen 19:00:06 Then jump back below when I'm done to get the next command. 19:00:21 I PAUSE on any syscall 19:00:27 except exit() 19:01:01 Well, maybe I'll decide that's the right thing to do too, but at the moment I'd planned that only on the keyboard reads. 19:01:58 there are some potentially blocking sycalls that I cannot actually do anything like open(), because they never return the errnos EAGAIN or EWOULDBLOCK, and/or do not have a fd to set as nonblocking in the first place 19:02:26 typically open() is not blocking... unless one is using network file systems or ClearCase or whatnot... 19:02:28 My host is meant to run on any POSIX layer, even an emulator, once you make a syscall you have no idea how long it may take. 19:03:15 Imagine POSIX emulation on a Windows machine. 19:03:33 rdrop-exit: I could offload my IO into a separate IO manager pthread, but I specifically designed hashforth with single-pthread operation in mind 19:04:11 Well, I guess my syscalls are blocking, because control goes off to the system, and when I get it back it's all done. 19:04:16 I don't use POSIX threads 19:04:38 there is an IO manager of sorts in hashforth, but it is completely written in Forth aside from the code that directly interfaces with the syscalls 19:04:45 I figure I will, because I want to be able to support multiple cores. 19:04:46 The point is that when you make a syscall there are no guarantees 19:05:53 to me, the only way to run a syscall as blocking without interrupting the execution of forth code is to offload it into another OS thread 19:06:47 and trying to communicate between multiple OS threads severely complicates design and hurts performance 19:07:03 (as I found out in writing attoforth, which does just this) 19:07:26 Again the point is that when you make a syscall you lose control, there are no guarantees 19:08:50 There are a lot of weird gotchas in POSIX 19:09:09 well, I am used to "no guarantees" and los of control - it's like an hourly thang ;-) 19:09:32 Here's an example: 19:09:35 aka "shit happens - usually when you think everything is peachy!" 19:09:45 IEEE Std 1003.1-2017 - 11.1.7 Non-Canonical Mode Input Processing: 19:09:46 [...] POSIX.1-2017 does not specify whether the setting of O_NONBLOCK takes 19:09:46 precedence over MIN or TIME settings. Therefore, if O_NONBLOCK is set, read() 19:09:46 may return immediately, regardless of the setting of MIN or TIME. Also, if no 19:09:46 data is available, read() may either return 0, or return -1 with errno set to 19:09:48 [EAGAIN]. 19:10:07 yup 19:12:34 the question is do you code for the actual behavior of the OS, or do you code for the potential behavior allowed by the standard regardless of whether that behavior is seen in the implementations targeted? 19:13:08 coding to the standard lets you feel righteous and indignant ;-) 19:13:45 to me, if it works in Linux, xBSD, macOS, and Cygwin, that is what one should code for, regardless of what POSIX dictates 19:13:52 Well if you want it to run on any POSIX platform, which is the point of bothering with POSIX in the first place, you code to the standard. 19:14:43 Then you should specify that. 19:15:16 but like in this case, the standard doesn't specify anything, it just says that a range of different behaviors could happen because none is specified as the correct behavior 19:15:38 So you have to handle the range of behaviors. 19:16:40 If you don't the next upgrade of one of your targets might break you code. 19:16:49 * your code 19:18:05 If you don't care, then just code for the specific platforms, and don't bother with POSIx. 19:19:05 so in essence if the standard doesn't specify a correct behavior, what do you do? just not rely upon that section of POSIX at all or try to code around them, because they could potentially trigger nasal demons? 19:19:52 You code to the range of behaviors, you don't rely on anything that isn't guaranteed by the standard. 19:20:48 like in this case, you don't use O_NONBLOCK at the same time as MIN or TIME, because POSIX doesn't guarantee any behavior 19:22:36 But it gives you a range of behaviors, you deal with them. 19:26:22 In my host MIN and TIME are set to 0 AND O_NONBLOCK is set. 19:27:21 Therefore the first part of the gotcha is dealt with, for the second part I handle both return value scenarios. 19:29:54 I still wonder how you deal with open() blocking 19:30:12 because open() will not report EAGAIN or EWOULDBLOCK, since it has no fd to set non-blocking 19:30:59 and I have seen open() block in Real Life, namely when trying to open a file in ClearCase while the CC server is down 19:31:40 brb 19:36:23 You deal with it by surrounding the open() with a PAUSE before and after 19:36:35 no, that doesn't work 19:36:42 because open() blocks your OS thread 19:36:52 if all your tasks are executing in the same OS thread 19:36:59 open() blocks all your tasks 19:37:32 Then you suffer the consequences of the loss of control 19:37:36 the only way around it is to execute open() in a different OS thread 19:39:32 in my case I figured that the only cases where open() actually blocks for any considerable amount of time are ones like network file system servers going down, so it was okay for most intents and purposes to treat open() as if it were non-blocking 19:40:02 s/non-blocking/taking an infinitesimal time to execute 19:41:19 My only POSIX Forth is a host Forth, the only "file" I normally open is the tether. 19:41:37 i.e. the only things I treat as potentially blocking are things that may return errno EAGAIN or EWOULDBLOCK 19:42:26 I just PAUSE for any syscall except exit() 19:44:08 I execute PAUSE after each time a syscall reports EAGAIN or EWOULDBLOCK 19:45:11 By surrounding a syscall with PAUSES, I give other tasks a chance right before and right after the OS has control. 19:46:40 What the OS does in between the PAUSES is out of my hands. 19:50:32 I try to execute IO without PAUSEing if I can 19:51:45 If you don't PAUSE before giving the OS control then you're at more at the mercy of the OS. 19:52:28 The only way to minimize any disruption is to PAUSE both before and after. 19:53:30 Of course the PAUSE code shouldn't include any syscall itself, or else all bets are off. 19:55:28 Dogs are whining, have to walk them. Catch you all later. Keep on Forthin' 19:55:35 see ya 19:55:50 --- quit: rdrop-exit (Quit: Lost terminal) 20:05:40 --- quit: tabemann (Ping timeout: 255 seconds) 20:32:09 --- quit: groovy2shoes (Remote host closed the connection) 20:33:21 --- join: tabemann (~travisb@2600:1700:7990:24e0:78df:6a9:450a:b439) joined #forth 20:39:27 --- join: mark4 (~mark4@12.41.103.244) joined #forth 20:56:31 --- quit: mark4 (Quit: Leaving) 21:22:38 --- join: mark4 (~mark4@12.41.103.244) joined #forth 21:22:59 so someone showed me how i COULD do my escape sequences in C by defining every single one of them as a macro. that works 21:23:19 but when every fucking macro is going to be used 10,000 times your executable is going to be FFFFUUUUCCCKKKIIIINGNNGGGG HHHUUUGGGEEE!!!!!!!!!!!!!!!!!!! 21:23:49 and guess what. you cant fucking instantiate those macros into functions because a macro can take ONLY var args 21:23:57 #define foo(...) ....... 21:24:01 but a fucking function CANT 21:24:06 void foo(...) { } 21:24:20 nope you have to have a fucking NAMED parameter before ... 21:24:28 no fucking reason why you have to, you just fucking have to 21:24:45 and while i can hard code MOST of them 21:24:54 void bell(void) { .... } 21:25:01 i CANT fucking hard code the sgr 21:25:17 beause the sgr can take 1 parameter, 2 parameters, 3 parameters, 4 parameters ..... 9 parameters 21:25:31 and there we are right back at NOT fucking being able to do 21:25:38 sgr(...) { ... } 21:27:24 c99? I used to get them raging at me for writing such as int foo(/*fuckoff*/); - not declaring the args in protos. Are you having varidac issues? 21:28:23 --- part: mark4 left #forth 21:28:40 --- join: mark4 (~mark4@12.41.103.244) joined #forth 21:28:45 sorry wrong button 21:29:00 major issues 21:41:32 put a count of the number of parameters as the first parameter of a function 21:42:49 i could do void foo_wrapper(real parameters here) { call real function with #parmaeters and parmeters here } 21:43:02 and turn something that was ultra simple into a major clusterfuck 21:43:14 because i would have to use varargs and i STILL cant code it 21:43:23 because sgr_wrapper_function(...) 21:43:35 sgr can take 1 or 2 or 3 or 4... or 9 parmeters 21:44:26 psst... create and load a struct; pass it. One struct ptr t N parameters. 21:45:08 although, an argc isn't a bad idea either. I prefer the struct. 21:46:23 you dont understand 21:46:36 i have a function called _format(..........) that takes some paremeters 21:46:44 but i dont know how many!!!!!!!!!!!!!!!!!!!!! 21:46:51 that's always fun 21:46:52 the umber of parameters is IN THE PARAMETER LIST!!!!!!!!!!!!!! 21:47:11 it should be the first. 21:47:19 make the first argument the number of parameters 21:48:28 no because when there are NO parameters no there is one parameter of 0 21:48:35 fucking inefficient 21:49:11 * PoppaVic chuckles 21:49:17 are they all the same width? 21:50:05 actually with regard to the sgr taking between 1 and 9 parameters almost NO terminfo file in existence actually supplies a format string for that escape sequence 21:50:22 and i would hazzard a guess that absoluytely none of them do 22:13:49 --- quit: dave0 (Quit: dave's not here) 23:00:10 I have this weird bug where this forth implementation segfault after I define : S" 23:00:43 but if I define : BYE before it, it no longer segfault 23:01:03 (define, not use) 23:03:02 i'd guess at a stack or heap corruption - how are you writing it? 23:03:12 the forth that is 23:03:52 the_cuckoo, yeah, that's my suspicion too 23:04:01 c? 23:04:40 the_cuckoo, it's jonesforth port, x64 linux nasm assembly 23:04:57 it's the one I linked here the other day 23:05:20 https://github.com/matematikaadit/JombloForth 23:05:25 ok - that's going to be fun to locate then :) 23:06:36 looks pretty clean at least 23:06:45 my goal is to understand how stuff implemented 23:07:12 I would wonder about an alignment issue, too 23:07:13 but debugging kind of PIA 23:08:31 um... I mean PITA, not PIA :P 23:08:36 :) 23:12:07 PoppaVic: and yeah - shadow-list - thanks :) 23:12:21 np 23:13:14 nice explaination from rdrop-exit too - cool 23:16:08 i was considering something last night - it's not about docs, but about security - i was looking for a name and i was struggling to remember the name of the thing you described :) - had this vague recollection that it would probably fit :) 23:16:39 aw, you were thinking "shadow passwd" ;-) 23:17:28 heh - probably had some influence, yeah 23:18:33 either way, nice to get the full explaination - and yeah, makes sense to organise things like that - quite far removed from what i was thinking about of course, but cool name :) 23:18:40 ok, hittin' the rack.. too late to suffer debugging new code ;-) 23:18:45 Have fun with it ;-) 23:18:52 nite :) 23:21:00 mark4: a function in c can take variable arguments - https://en.cppreference.com/w/c/variadic 23:22:15 but you will need at least 1 argument 23:31:16 so, has anyone made TIS-100 clone, but using FORTH instead of Assembly? http://www.zachtronics.com/tis-100/ 23:34:52 --- join: dave0 (~dave0@223.072.dsl.syd.iprimus.net.au) joined #forth 23:35:45 heh - that's kinda neat 23:36:39 :)) 23:37:05 I'm imagining it to have an input stack and output stack (in 4 directions) 23:37:20 instead of register 23:38:31 and pop on a cell will wait the coresponding push event from the neighboring cell 23:38:50 my local hackers groups (there are 2 of them) had both shutdown recently - ongoing rennovations at one of them, the other guy just moved (and is now no longer within the 45m walking distance - more like a 2h walk :() - anyway, i went by bus as he reopened and we spent the evening putting desks and shelves together - was fun 23:39:59 anyway, it was the first time i'd been this year - and since i only started rpany on the 29th december, none of them had seen it - got some really good feedback about it :D 23:41:27 on monday next, i'll be doing a larger demo at work, so was good to have the practice 23:46:18 re 23:50:32 hi 23:59:59 --- log: ended forth/19.02.28