00:00:00 --- log: started forth/10.03.23 00:38:38 --- join: kar8nga (~kar8nga@jol13-1-82-66-176-74.fbx.proxad.net) joined #forth 00:41:39 --- quit: boscop (Ping timeout: 258 seconds) 00:49:23 --- join: ASau` (~user@77.246.231.137) joined #forth 01:09:46 --- quit: proteusguy (Ping timeout: 276 seconds) 01:10:58 --- quit: TR2N (Ping timeout: 264 seconds) 01:15:16 --- quit: skas (Quit: Leaving) 01:21:53 --- join: proteusguy (~proteusgu@zeppelin.proteus-tech.com) joined #forth 01:38:58 --- join: X-Scale (email@89-180-153-132.net.novis.pt) joined #forth 01:50:46 --- join: qFox (~C00K13S@5356B263.cable.casema.nl) joined #forth 02:13:47 --- quit: ygrek (Ping timeout: 245 seconds) 02:21:34 --- join: gogonkt (~info@121.9.179.149) joined #forth 02:38:51 --- quit: Snoopy_1611 (Ping timeout: 260 seconds) 02:50:58 --- quit: jabb (Ping timeout: 246 seconds) 04:13:35 --- quit: kar8nga (Remote host closed the connection) 04:30:18 --- quit: proteusguy (Ping timeout: 276 seconds) 04:40:18 --- join: ygrek (debian-tor@gateway/tor-sasl/ygrek) joined #forth 04:42:17 --- join: proteusguy (~proteusgu@zeppelin.proteus-tech.com) joined #forth 04:55:36 --- join: ahelon (~ahelon@unaffiliated/ahelon) joined #forth 05:33:43 --- quit: proteusguy (Ping timeout: 246 seconds) 05:46:26 --- join: proteusguy (~proteusgu@zeppelin.proteus-tech.com) joined #forth 05:53:29 --- quit: Deformative (Ping timeout: 252 seconds) 05:55:57 --- quit: gogonkt (Ping timeout: 268 seconds) 05:57:15 --- join: gogonkt (~info@113.70.95.86) joined #forth 06:27:11 --- join: ahelon_ (~ahelon@188.4.163.189.dsl.dyn.forthnet.gr) joined #forth 06:29:14 --- quit: ahelon (Ping timeout: 252 seconds) 06:48:25 --- quit: ahelon_ (Quit: Leaving) 06:48:42 --- join: ahelon_ (~ahelon@188.4.163.189.dsl.dyn.forthnet.gr) joined #forth 06:53:51 --- quit: ahelon_ (Quit: Leaving) 06:54:38 --- join: ahelon (~ahelon@unaffiliated/ahelon) joined #forth 07:10:27 --- join: Deformative (~joe@67-194-16-126.wireless.umnet.umich.edu) joined #forth 07:42:24 --- quit: X-Scale (Ping timeout: 252 seconds) 07:53:22 --- quit: Deformative (Ping timeout: 246 seconds) 07:57:53 --- join: TR2N (email@89.180.176.73) joined #forth 07:58:57 --- join: jabb (~grue@71.94.31.166) joined #forth 08:22:59 --- quit: probonono (Ping timeout: 240 seconds) 08:25:15 --- join: probonono (~User@unaffiliated/probonono) joined #forth 08:28:00 --- quit: proteusguy (Ping timeout: 264 seconds) 08:40:31 --- join: proteusguy (~proteusgu@zeppelin.proteus-tech.com) joined #forth 08:53:30 --- quit: ASau` (Quit: off) 09:04:15 --- join: forther (~forther@c-98-210-250-202.hsd1.ca.comcast.net) joined #forth 09:16:28 --- quit: forther (Quit: Leaving) 09:31:54 --- quit: crc (Ping timeout: 248 seconds) 09:46:26 --- quit: Quartus` (Ping timeout: 265 seconds) 09:52:39 --- join: segher (~segher@84-105-60-153.cable.quicknet.nl) joined #forth 10:02:09 Hey segher. 10:02:37 Being able to access memory via an address on the return stack. 10:02:50 Would you like that to auto-increment? 10:07:42 it is useful i suppose 10:08:00 but it's also an extra opcode 10:08:06 measure it :-) 10:10:28 --- join: X-Scale (email@89.180.174.56) joined #forth 10:10:34 --- quit: TR2N (Ping timeout: 276 seconds) 10:10:43 Well, I could make it work the same way the B register did; autoincrement only when not on port space. 10:10:57 And you did say that you might get rid of the B register completely if you could address from RS. 10:11:02 I assumed that I'd have one or the other. 10:11:27 So actually it saves me an opcode: b!. 10:13:41 --- nick: X-Scale -> TR2N 10:22:18 right 10:23:59 I was planning to do it that way originally, but then changed my mind. Now I remember why - it was that whole business about "pre-detecting" reads a cycle early. 10:24:13 Because the return stack could change unpredictably that became very hard. 10:24:32 Now, though, I've given up on that explicitly, so the return stack becomes a reasonable place for addresses again. 10:24:33 Now, though, I've given up on that explicitly, so the return stack becomes a reasonable place for addresses again. 10:24:43 Ooops; sorry. 10:25:43 So, with that approach, what happens when there's a loop counter on the return stack? I guess you can't use it for both purposes at the same time... 10:26:00 Unless you somehow make the counter an address, but I was thinking of a NEXT/uNEXT style down counter. 10:31:24 --- quit: jabb (Quit: class) 10:47:50 --- join: kar8nga (~kar8nga@jol13-1-82-66-176-74.fbx.proxad.net) joined #forth 10:58:16 --- quit: ahelon (Read error: Operation timed out) 10:59:54 --- join: ahelon (~ahelon@79.103.167.223.dsl.dyn.forthnet.gr) joined #forth 11:26:08 --- quit: kar8nga (Remote host closed the connection) 11:28:53 --- join: crc (~charlesch@71.23.210.149) joined #forth 11:41:04 --- join: Quartus` (~Quartus`@74.198.8.57) joined #forth 12:25:58 --- join: Snoopy_1611 (Snoopy_161@dslb-084-059-210-232.pools.arcor-ip.net) joined #forth 12:34:51 --- join: Deformative (~joe@bursley-185022.reshall.umich.edu) joined #forth 12:51:29 --- join: ahelon_ (~ahelon@79.103.254.102.dsl.dyn.forthnet.gr) joined #forth 12:53:12 --- quit: ahelon (Ping timeout: 264 seconds) 13:04:38 --- quit: Quartus` (Ping timeout: 240 seconds) 13:10:00 --- quit: Snoopy_1611 () 13:10:48 --- join: Snoopy_1611 (Snoopy_161@dslb-084-059-199-034.pools.arcor-ip.net) joined #forth 13:13:38 --- join: Quartus` (~Quartus`@74.198.8.59) joined #forth 13:17:24 --- quit: Snoopy_1611 () 13:57:46 --- join: Snoopy_1611 (Snoopy_161@dslb-088-068-215-176.pools.arcor-ip.net) joined #forth 14:06:02 --- quit: Quartus` (Ping timeout: 248 seconds) 14:33:36 --- quit: ahelon_ (Read error: Operation timed out) 14:36:32 --- join: ahelon_ (~ahelon@79.103.216.172.dsl.dyn.forthnet.gr) joined #forth 14:44:14 --- quit: mathrick (Read error: Connection reset by peer) 14:52:04 --- join: mathrick (~mathrick@users177.kollegienet.dk) joined #forth 15:13:20 --- join: Quartus` (~Quartus`@74.198.8.59) joined #forth 15:30:31 --- join: Dialupas (~Rodo1@v-209-98-172-102.ip.visi.com) joined #forth 15:30:57 --- quit: ygrek (Remote host closed the connection) 15:30:58 --- quit: Dialupas (Read error: Connection reset by peer) 15:34:05 --- join: ygrek (debian-tor@gateway/tor-sasl/ygrek) joined #forth 15:43:28 --- quit: qFox (Quit: Time for cookies!) 15:58:19 --- quit: madgarden (Quit: Leaving) 16:01:15 --- quit: TR2N (Ping timeout: 276 seconds) 16:03:47 --- quit: ygrek (Ping timeout: 245 seconds) 16:16:29 --- join: madgarden (~madgarden@CPE001d7e527f89-CM00159a65a870.cpe.net.cable.rogers.com) joined #forth 16:17:57 --- join: skas (~skas@eth488.act.adsl.internode.on.net) joined #forth 16:25:27 --- quit: ASau (Remote host closed the connection) 16:26:12 --- join: ASau (~user@83.69.227.32) joined #forth 16:30:36 segher: Third stack for addresses? Separate from return stack? A is first element, B is second? That solves all save/restore issues and prevents the conflict that would otherwise occur by using the return stack when a NEXT count is on there too. 16:34:13 Or, even if I don't do that, what if A! not only loads A from S0 but also loads B from A? That eliminates the need for B!. If you have an odd situation where you want to transfer to memory from several different port addresses that would be an inconvenience, but for the common case you'd be fine. 16:35:31 I guess that is an address stack, isn't it? Sort of. Just a two-element one. 16:39:10 But I think I'm definitely going to do that. I will decide later whether to make it deeper or not. 16:42:17 Also, would there be any reason not to make it go the other way? A@ will move A to S0 and B to A? 16:42:28 So I can recover both if I wish? 17:21:32 you call A! what most others call !A i think? 17:21:46 i would call it >A really 17:22:02 Yes, if I make it a stack I will call them >A and A>. 17:22:21 And I'm going to change push to >R and pop to R>, because those are what I'm used to calling them. 17:22:28 i would name it >A even if it was only a single reg. but, your choice of course 17:23:05 I'm going to connect them for sure, I think. Whether I add more depth is an open question, but being able to set / read both of them with just one pair of opcodes is nice. 17:23:16 i don't see why having a stack of them would help in save/restore 17:23:27 Hey, why does the C18 provide for "non-extended" addition? In that mode it doesn't update or use the carry flag. 17:23:36 Is it really critical to be able to do that? 17:23:58 not using it matters a lot 17:24:09 most additions do not want to add a carry 17:24:11 --- part: skas left #forth 17:24:39 Actually I guess a lot of processors do that, don't they? 17:24:43 ADD, then ADC. 17:24:47 yes 17:24:48 Ok. My bad. 17:24:54 I'm getting opcode greedy. 17:25:08 --- join: _mathrick (~mathrick@users177.kollegienet.dk) joined #forth 17:25:10 the main counterexample is 6500, which ends up doing clc;adc all of the time 17:25:55 --- quit: mathrick (Read error: Connection reset by peer) 17:26:19 --- join: TR2N (email@89-180-237-84.net.novis.pt) joined #forth 17:27:34 --- nick: _mathrick -> mathrick 17:28:45 --- join: sscj (syljo361@static-ip-62-75-255-125.inaddr.server4you.de) joined #forth 17:29:05 --- join: TreyB (~trey@adsl-76-240-63-203.dsl.hstntx.sbcglobal.net) joined #forth 17:31:20 Ok, but then you have to have clc, so no gain. 17:31:48 --- quit: TreyB_ (Ping timeout: 260 seconds) 17:31:48 --- quit: scj (Ping timeout: 260 seconds) 17:32:35 I regarded A!, A@, and B! as compressions of A !, A @, and B !, which you would expect to store TOS to A, fetch TOS from A, and store TOS to B, respectively. 17:32:52 !A stores the top of stack to the address already contained in A. 17:32:53 Etc. 17:34:25 Anyway, this gets rid of what I've called B!, and gets me to four free opcodes. So I think I will spend one on a SWAP opcode. It's so easy to implement in my hardware that I really hate not having it. 17:34:54 is there a reason why you do not have @ directly on your hardware, then? 17:39:54 Yes, because the memory on the FPGA is clocked. I run an opcode every clock cycle. The address has to be clocked into the memory. Then it takes another clock to get the data onto the stack. 17:40:29 So I separate "address load" and "data push" into separate operations. I tried for a while to see the read coming and start it a cycle early, but that just kept getting harder to make work. 17:41:27 So I have (@A+ and (@B+ to load the address and @) to push the data. There's no reason, though, that I can't have a (@ to load the address straight from the stack. 17:41:42 Then (@ @) would do the normal @ operation. 17:42:14 That has the added advantage of letting me use the same words to support slower external memories - I'd just delay between the address load and the data push. 17:42:25 If the delay could be used for useful work, then great; if not oh well. 17:43:06 --- quit: probonono (Ping timeout: 248 seconds) 17:43:36 Another possibility would be to *always* clock whatever I'm about to clock into TOS into the memory, and start a read. Then @ would just replace the TOS with the memory output. 17:43:48 Hmmm. 17:44:31 --- join: probonono (~User@unaffiliated/probonono) joined #forth 17:45:06 you can also do just one operation @ and have that stall the insn pipeline for however long it needs 17:46:08 I hate stalling my pipe. 17:46:24 well in effect you do that anyway, just using mode code space 17:46:35 Right now I only stall in one place, and even that is really just "omitting an optimization". 17:47:46 I "pre-detect" return instructions, so they essentially take no time to execute. But if the cycle right before is changing the return stack (push or pop) I just let the pre-detect fail and do the return in its proper cycle. 17:48:25 That's true, except the hardware doesn't have to figure out when to stall (I tell it), and if I wanted to support external slow memory it would be even harder for the hardware to do that. 17:49:35 It does make reads cost an extra cycle, though, because I'm now never trying to pre-detect. 17:50:42 Also, pre-detecting the reads was problematic when I did a write followed by a read, because the "now" write and the "pre-start" read both tried to address the ram at the same time. 17:51:13 --- nick: sscj -> scj 17:51:23 It was a cumulation of such situations that prompted me to just give up and accept the separation of addressing and data pushing. 17:53:18 Hi. 17:54:25 Hey. 17:55:17 Wife's home - gonna go for a while. Catch you guys later. 17:55:50 o/ 18:01:22 --- quit: ahelon_ (Ping timeout: 264 seconds) 18:01:59 --- join: ahelon_ (~ahelon@79.103.133.177.dsl.dyn.forthnet.gr) joined #forth 18:28:09 --- quit: ahelon_ (Ping timeout: 276 seconds) 18:31:14 --- join: ahelon_ (~ahelon@188.4.239.20.dsl.dyn.forthnet.gr) joined #forth 19:03:54 --- quit: proteusguy (Ping timeout: 276 seconds) 19:16:22 --- join: proteusguy (~proteusgu@zeppelin.proteus-tech.com) joined #forth 19:21:46 --- quit: ahelon_ (Ping timeout: 264 seconds) 19:24:30 --- join: ahelon_ (~ahelon@188.4.239.20.dsl.dyn.forthnet.gr) joined #forth 19:34:01 --- quit: ahelon_ (Ping timeout: 246 seconds) 19:40:17 --- quit: mathrick (Read error: Connection reset by peer) 19:40:37 --- join: mathrick (~mathrick@users177.kollegienet.dk) joined #forth 19:51:02 --- quit: probonono (Read error: Connection reset by peer) 19:54:39 --- join: probonono (~User@unaffiliated/probonono) joined #forth 20:01:22 --- join: ahelon (~ahelon@79.103.183.72.dsl.dyn.forthnet.gr) joined #forth 20:58:58 --- quit: TR2N (Ping timeout: 264 seconds) 21:04:42 --- join: X-Scale (email@89-180-145-101.net.novis.pt) joined #forth 21:08:36 --- nick: X-Scale -> TR2N 21:12:57 --- join: luptenschteiner (~User@unaffiliated/probonono) joined #forth 21:12:57 --- quit: probonono (Ping timeout: 245 seconds) 21:46:52 --- nick: luptenschteiner -> probonono 22:54:12 --- quit: probonono (Ping timeout: 245 seconds) 22:54:34 --- quit: tmitt (Ping timeout: 248 seconds) 22:54:34 --- join: luptenschteiner (~User@unaffiliated/probonono) joined #forth 22:55:02 --- nick: luptenschteiner -> probonono 22:55:59 --- join: tmitt (seg@wizardly.us) joined #forth 23:08:10 --- join: dinya_ (~Denis@94.50.189.61) joined #forth 23:25:27 --- quit: TR2N (Ping timeout: 245 seconds) 23:25:56 --- join: X-Scale (email@89.180.203.138) joined #forth 23:59:59 --- log: ended forth/10.03.23