00:00:00 --- log: started forth/19.02.01 00:21:51 --- join: pierpal (~pierpal@host1-142-dynamic.116-80-r.retail.telecomitalia.it) joined #forth 02:03:47 --- quit: ashirase (Ping timeout: 252 seconds) 02:34:03 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 03:02:46 --- join: Montgomery (7da1896d@gateway/web/freenode/ip.125.161.137.109) joined #forth 03:03:06 Hi everyone :) 03:21:01 --- quit: Montgomery (Ping timeout: 256 seconds) 03:57:12 --- join: [1]MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 03:58:14 nite all 03:58:35 --- quit: dave0 (Quit: dave's not here) 03:59:43 --- quit: MrMobius (Ping timeout: 246 seconds) 03:59:43 --- nick: [1]MrMobius -> MrMobius 04:23:02 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 04:46:48 I need a one-handed keyboard 04:47:48 this trackball is awesome 04:48:00 hehe 04:48:11 one handed dvorak? 04:59:11 I was thinking more, something chorded 04:59:31 I made one in college out of switches, arduino and carboard 04:59:37 might just do that again 05:17:08 --- quit: pierpal (Quit: Poof) 05:17:27 --- join: pierpal (~pierpal@host1-142-dynamic.116-80-r.retail.telecomitalia.it) joined #forth 05:34:25 --- join: john_metcalf (~digital_w@host86-172-212-236.range86-172.btcentralplus.com) joined #forth 06:27:45 someone once mentioned this https://software-lab.de/penti.html here, its only for android though... actually I think it was you that mentioned it 06:38:58 * Zarutian is slowly getting his Forth VM, written in C working with all the interfaces he wants 06:52:42 Kudos Zarutian 06:55:47 just got directory listing traversal working. 06:58:59 --- quit: cantstanya (Remote host closed the connection) 07:01:56 --- join: cantstanya (~chatting@gateway/tor-sasl/cantstanya) joined #forth 07:07:25 --- quit: nighty- (Quit: Disappears in a puff of smoke) 07:39:16 --- quit: tabemann (Ping timeout: 268 seconds) 07:58:12 --- quit: PoppaVic (Remote host closed the connection) 08:18:52 --- join: PoppaVic (~PoppaVic@unaffiliated/poppavic) joined #forth 08:50:20 --- join: darithorn (~darithorn@75.174.231.56) joined #forth 09:00:27 --- join: MickyW (~MickyW@p4FE8C395.dip0.t-ipconnect.de) joined #forth 09:03:07 Kumool: I remember that coming up once, don't think it was I 09:16:02 --- quit: MickyW (Quit: Leaving. Have a nice time.) 09:16:14 --- quit: pierpal (Quit: Poof) 09:16:32 --- join: pierpal (~pierpal@host1-142-dynamic.116-80-r.retail.telecomitalia.it) joined #forth 09:39:55 maybe you can use your android phone to ssh into your machine? 09:40:29 android screens aren't the most ergonomic nor tactile. I'm going to draw up a plate over the weekend 10:35:09 --- quit: rdrop-exit (Quit: Lost terminal) 10:41:55 --- join: aebkop (~tehidiot@cpc106046-hudd13-2-0-cust140.4-1.cable.virginm.net) joined #forth 12:14:48 --- quit: gravicappa (Ping timeout: 240 seconds) 13:32:49 --- quit: xek (Ping timeout: 240 seconds) 13:53:41 --- join: dave0 (~dave0@193.060.dsl.syd.iprimus.net.au) joined #forth 13:54:17 hi 13:54:19 --- quit: aebkop (Read error: Connection reset by peer) 13:57:35 --- quit: Croran (Quit: No Ping reply in 180 seconds.) 13:58:50 --- join: Croran (~quassel@2601:601:1801:6dde::4276) joined #forth 14:04:22 * Zarutian just wtfs! Apearantly passing doing gcc runtime.c -o zeForth is not the same as doing gcc -o zeForth runtime.c 14:07:00 yikes 14:07:05 how do they differ 14:07:30 well the former makes an segfaulting executable. It segfaults even before main() ever runs 14:07:32 Zarutian: hmm it shouldn't matter? 14:08:02 oh 14:08:55 anyway, the main reason why I am just doing this single source file executable is to run my zeForth VM code 14:09:08 exactly because of stupidity like this 16:48:18 --- quit: pierpal (Ping timeout: 240 seconds) 16:50:52 --- quit: Zarutian (Read error: Connection reset by peer) 16:51:22 --- join: Zarutian (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 16:56:38 --- join: pierpal (~pierpal@host1-142-dynamic.116-80-r.retail.telecomitalia.it) joined #forth 16:58:25 --- join: rdrop-exit (~markwilli@112.201.168.172) joined #forth 17:00:50 --- quit: john_cephalopoda (Ping timeout: 252 seconds) 17:02:54 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 17:09:26 Kumool, WilhelmVonWeiner: It was me https://x0r.be/@pointfree/100789199205467782 ...and I still need to get a good 6 button mouse. 17:31:46 I used to use a Razer Naga Hex for entering directions on hexmap games. Razer's are kinda junky, but the button layout was convenient for that purpose. 17:32:42 Good morning Forthlings :) 18:39:36 --- join: tabemann (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) joined #forth 18:54:36 --- join: [1]MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 18:56:35 hm, so my ! cannot remove 2 items from the stack 18:56:44 so i'll call it !' or so 18:57:04 now, should i just pop the address, and keep the value 18:57:23 or should i drop the value, and keep the address 18:57:39 --- quit: MrMobius (Ping timeout: 272 seconds) 18:57:39 --- nick: [1]MrMobius -> MrMobius 19:03:17 it's pretty limiting if you cannot remove to values from the stack 19:03:24 two* 19:03:42 There's !+ ( x a -- a' ) 19:04:11 where a' is a incremented by the cell size 19:04:17 yea, i can't do that 19:04:25 tabemann: why? 19:04:41 only one word (@) that does that 19:05:19 there's plenty of words that consume more than one argument on the stack 19:05:49 yea, but they are usually defined as thread 19:05:55 and are not primitives 19:06:14 why can't you consume more than one argument? I'd consider that a bug 19:06:22 because i can't 19:06:31 why? 19:06:35 i would have to fetch two memory locations at once 19:06:38 it's like tacos - just eat 'em one after the other.. *burp* 19:06:53 are you doing a hardware implementation? 19:06:56 yes 19:06:59 my second one 19:07:10 doesn't that imply an "accumulator"? 19:07:29 TOS is sort of the accumulator 19:07:50 then keep the top two elements on the stack in registers 19:07:58 not worth it 19:08:13 increases the size of the design 19:08:15 i think 19:08:35 but maybe not - i'll investigate later 19:08:59 at the moment, i can only change the stack by one per cycle 19:09:02 if you can't manage that, logic and math is gonna' blow. 19:09:09 yeah 19:09:10 why? 19:09:28 + - * / = <> < > all consume two arguments 19:09:29 because most of it deals in 2 ops 19:09:34 no, they consume one 19:09:39 no, they consume two 19:09:41 +----------------+ 19:09:41 ------ clk -->| CPU |-- t ----W--> 19:09:41 -3---- ds_cmd -->| Data Stack |-- x ----W--> 19:09:41 -W---- t_nxt -->| |-- y ----W--> 19:09:41 -W---- x_nxt -->| | 19:09:43 | dstack.sv | 19:09:46 +----------------+ 19:09:50 oO 19:10:08 they produce one as well 19:10:15 so they only remove one element 19:10:18 and update TOS 19:10:18 but you're still doing two reads 19:10:23 no i am not 19:10:29 TOS is in a register 19:10:48 you have to read one memory location for an argument and you have to read another to refill the TOS 19:10:57 even if TOS is "a register", you need to pull the 2nd op aswell, and sometimes push a result 19:11:11 no, TOS becomes the result of the ALU op 19:11:37 so you just need to decrease the stack by one 19:11:56 PoppaVic: yes, you read from NOS 19:12:01 but you can do that in the previous cycle 19:12:13 so in the current cycle, you already have NOS data present 19:12:57 meh.. Throw more solder at it, until it sticks. Problem solved. 19:15:23 not sure what that means 19:15:34 i was just asking about what to do with !' 19:16:13 Turn it into !+ 19:16:22 i can't 19:16:23 wait a cycle to read a new cell into the TOS 19:16:35 Then you have bigger problems 19:16:43 why? 19:17:02 !+ would need another adder 19:17:08 or another mux 19:17:25 is it necessary to do everything in a single cycle? 19:17:35 no, but it simplifies things immensely 19:18:02 i can just do : ! POSTPONE !' POSTPONE DROP ; IMMEDIATE 19:18:04 it's premature optimization 19:18:05 If you want single cycle then your stacks should be register files not RAM 19:18:13 tabemann: no 19:18:19 rdrop-exit: why? 19:18:23 and I agree with rdrop-exit 19:18:37 it says 60MHz clock speed 19:18:38 ish 19:18:43 seems fine to me 19:18:44 single cycle accesses require hardware register files 19:19:02 RAM cannot be guaranteed to return values in a single cycle anyways 19:19:04 no, works with with BRAM 19:19:12 yes it can 19:19:30 unless you're tying your processor cycle time to the memory cycle time, which imposes signficant costs on the processor 19:19:38 because memory is low 19:19:40 *slow 19:19:53 please check my design, it's possible i missed something 19:19:58 --- quit: dave0 (Quit: dave's not here) 19:19:59 i just ran it in the simulator so far 19:20:54 you're better off using a cache with your memory and not expecting your memory to have single cycle accesses, or if you need single cycle accesses, using a hardware stack that is on die 19:21:47 i'm using an fpga 19:22:05 of course in an ASIC i wouldn't go to off-chip RAM for the stack 19:22:55 off-chip RAM is going to be slow regardless 19:22:59 yes 19:23:01 i agree 19:23:10 but the FPGA has integrated BRAM 19:23:21 --- join: dave0 (~dave0@193.060.dsl.syd.iprimus.net.au) joined #forth 19:23:25 is it guaranteed to have single-cycle access times? 19:23:28 yes 19:23:55 some even are asynchronous and can return data in the same cycle 19:24:00 but not on the ice40 19:24:06 re 19:24:39 hey dave0 19:24:49 Hi dave0 19:25:11 hi tabemann, rdrop-exit 19:25:46 still, I wouldn't restrict your implementation to solely have single-cycle instructions 19:26:11 why? 19:26:21 consider the divisor - that's going to be way slower than your adder - but if you insist on single-cycle instructions, all instructions will be as slow as the slowest one 19:26:32 i don't have divide 19:26:39 nor multiply 19:27:22 there is a reason why just about every architecture since the 8086 has included a multiplier and a divisor 19:27:34 A slow single cycle design can be useful for deterministic realtime 19:27:37 yea, they have a lot of space on the die 19:27:42 because implementing those things in software is damn slow, slower than any reasonable hardware implementation 19:27:48 60MHz doesn't feel too slow 19:28:09 tabemann: yea i know, it's the tradeoff i'm making for this design 19:28:15 i want this to be small 19:28:51 but i'd love to look at some of your designs to get some ideas 19:28:54 bbiab 19:28:59 being increasingly small has diminishing returns 19:29:02 i'm just starting with cpu design 19:29:12 all of my designs are software ones 19:29:28 yea the tradeoffs are different with software 19:30:22 I've implemented two Forths, attoforth and hashforth, with attoforth being a "big" forth that supports stuff like preemptive multitasking whereas hashforth is a comparatively smaller forth that uses cooperative multitasking 19:31:20 hashforth is meant to be a proof-of-concept for an #forth implementation 19:31:37 ok 19:31:47 whereas attoforth was my first forth, and I was thinking way too big when I implemented it 19:32:43 yea my implemented my first forth last month, i kept it quite small 19:33:26 of course attoforth has some nice features hashforth lacks, such as a readline-style line editor 19:40:34 corecode: If you want simple on an FPGA, make it Harvard, code in on-chip ROM, data in on-chip scratchpad RAM, register file stacks. 19:41:19 No external memory. 19:43:30 i don't use external memory 19:43:59 i don't have the address space for external memory :) 19:44:07 and yes, it's a harvard architecture 19:45:04 Basically it's an "Instant ASIC" 19:45:38 just add silicon? 19:47:57 Just add a ROM image when you compile the design. 19:48:04 yea 19:48:18 or write to iram via spi 19:54:05 In the block diagram I posted earlier, the ds_cmd can be either replace, push, or pop. The design of a return stack can be simpler. 19:54:26 yes, i have that too 19:54:50 i call it dec, change, update, but i guess your names and functions are better 19:55:02 ds_cmd is one-hot encoded 19:55:07 yes 19:55:33 +----------------+ 19:55:33 --------- clk -->| CPU |-- r ----W--> 19:55:33 -3------- rs_cmd -->| Return Stack | 19:55:33 -W------- r_nxt -->| | 19:55:33 | rstack.sv | 19:55:35 +----------------+ 19:55:48 how do you generate those diagrams? 19:56:05 My fingers. :) 19:56:10 ok 19:59:09 module rstack #( 19:59:09 W, // word width 19:59:09 RS_DEPTH // number of words in stack 19:59:09 ) 19:59:09 ( 19:59:11 input logic clk, // clock 19:59:14 input logic [2:0] rs_cmd, // command, one-hot encoded 19:59:16 input logic [W-1:0] r_nxt, // top word of return stack at next clock, 19:59:19 // N.B. r_nxt ignored if rs_cmd is pop 19:59:21 output logic [W-1:0] r // top word of return stack 19:59:24 ); 19:59:41 yea 20:02:30 bbiab 20:07:25 BTW, these are circular stacks, hence no overflow/underflow. 20:07:55 well, you overflow when you put more in than what you have space for :) 20:08:24 Yes, but you can't "physically" overflow/underflow per se. 20:09:14 yea, that would be extra hardware to look at carry 20:09:33 I always though circular sounded like a great way to crash - too far forward or back 20:11:10 You can't be cavalier with circular stacks, your code needs to be very carefully crafted. 20:11:39 isn't that true for any stack? 20:11:58 It should be. 20:14:23 how large is your cpu? 20:15:26 the design is parameterized, it depends. 20:15:53 well, um.. "you can't overflow" - yes, you nuke old "bottom-of-stack".. If you ever get bacj there, you get surprised. So, Not sure it gains anything.. Unless I am too tired to realize the math/indexing is cheaper? 20:16:24 say 16 bit width, min stack size 20:17:22 PoppaVic: wraparound stack is easier - no special signals for overflow 20:18:42 I don't want to give out too much info, as I have a commercial use in mind. If that doesn't materialize, I'll be more forthcoming. 20:20:07 np. I've used rings for other things - it just worries me a little. 20:20:27 i guess you won't disclose the commercial use either 20:21:02 Not at the moment, no. 20:21:55 Sorry :) 20:22:12 this secrecy business is always very surprising to me 20:22:53 either you have a valuable product, then people can't dupe you, or you don't, and you'll quickly get duped anyways 20:23:15 Some stuff you give away, some stuff you sell. 20:23:22 sure 20:23:38 that's what licenses are for 20:23:49 yer posta patent the stuff - then sell it to doze or ibm ;-) 20:25:24 If I had been fast and loose, I would have delayed my retirement by 10 or more years. 20:30:30 Retirement is fine - the lack of income sucks. 20:34:28 My maternal grandfather died the very day of his retirement, I was 10 years old at the time, it was a major life lesson. 20:37:42 Death is certainly a Life Lesson 20:38:30 there is a pun in there somewhere 20:38:48 :) 20:39:06 bbiab 20:39:13 going any further would either be rude or wrong. 20:44:21 hm, so this new cpu design is a bit smaller, but also slower 20:46:13 --- join: gravicappa (~gravicapp@h77-94-116-79.dyn.bashtel.ru) joined #forth 22:05:20 --- quit: darithorn (Remote host closed the connection) 22:29:22 --- quit: X-Scale (Read error: Connection reset by peer) 22:33:58 --- quit: dddddd (Remote host closed the connection) 23:59:59 --- log: ended forth/19.02.01