00:00:00 --- log: started forth/21.05.03 00:13:14 --- join: mtsd joined #forth 00:55:38 --- quit: pbaille (Quit: Leaving...) 01:16:32 --- quit: gravicappa (Ping timeout: 252 seconds) 01:22:28 I believe I can express a good "motivation" for giving conditional test words the ability to retain an argument. Sometimes you want to use a flag on the stack to optionally return from a word, but in the parent you use it again to optionally loop. So you "arg retain" on the first of those, then consume the flag on the second. 01:23:13 : foo ... ... bar 0=me ... ; 01:23:20 : bar ... .0=; ... ; 01:23:50 I use a . prefix to indicate arg retention. 01:26:02 All of the comparison-oriented words have it - if it's a word that would normally consume two args, ike > or =, then the . version consumes just the top one. If it's a word that would normally consume one arg, then the . version consumes none. 01:26:49 It's particularly handy for comparing a data item to a series of values and acting in various ways based on which one it matches. 01:27:19 In that case you don't need the data in the calling word - you just have a bunch of callee words that all may need the value. 01:27:46 Combining that with double return makes it possible to sift through a series of tests, but abandon further testing when a comparison succeeds. 01:28:28 --- join: boru` joined #forth 01:28:49 : foo test1 test2 test3 failed-all ; 01:29:02 : testi val .!=; process ;; 01:30:08 That structure showed up in checking keyboard chars against control characters, and also for checking number chars against "special values." 01:32:13 And a variation on it showed up when comparing number digits against the three ranges 0-9, A-Z a-z and computing an actual "digit value." 01:32:27 --- nick: boru` -> boru 01:36:14 --- quit: actuallybatman (Ping timeout: 240 seconds) 02:31:37 --- join: gravicappa joined #forth 03:17:41 So, where do you guys check for stack under/overflow? Do you do that after the execution of each word, or at the end of a whole line? 03:18:00 After each word seems better, but I'm not sure what the "custom" is. 03:18:20 Each word *interpreted*, that is. 03:29:27 So, in order for a simple ;; to make the null word do the right thing, not only does execute have to be at the level of the interpret loop - it also has to be a *primitive*. My execute currently is a primitive, so that works nicely. 03:29:48 --- quit: gravicappa (Ping timeout: 240 seconds) 03:30:00 I just tried to wrapper it, though, so I could put the stack check right after the primitive, and of course that broke it - null no longer did the right thing. 03:30:11 It would be easy to fix, but I kind of like how clean it is like this. 03:30:33 The interpret word is really as long as I want it to get, though - I don't really want to add more in there. :-| 03:31:22 This is what it looks like right now: 03:31:24 : interpret find ?exec 0=me execute me [ 03:31:36 What's a better name for that word I've called ?exec ? 03:31:58 It's doing a fair bit - it handles found words vs. numbers, and handles state and immediacy and so on. 03:32:28 It basically handles everything except "execute NOW," which I get by having ?exec return a non-zero result. 03:32:52 The logical place for ?stacks is right after execute. 03:33:18 Out of interest, what are you implementing this forth on? 03:34:16 A Macbook Air, using nasm. 03:34:24 Older one - not one of the new ARM machines. 03:35:20 I could put the ?stacks word at the beginning of find. It would work, and the only word it would fail to check would be the null word, which doesn't do anything to the data stack. But it's just not the "happiest logical place" for it. 03:35:33 Ah, I was going to suggest using hw support for stack exceptions e.g. using the MPU to generate a permission fault on ARM, or similar mechanisms in other ISAs. 03:35:52 Ah - I see. Well, yes - that's a possibility. 03:36:26 I'd have to muck things around a bit, but in theory it should be easy to allocate some multiple of 4kB for the stack and surround it with non-writable memory regions. 03:36:40 It would just save you some donkey work, and be a bit more performant; ideally, you'd want to implement a mechanism to identify the fault site to the user, naturally. 03:36:42 That's actually not a bad idea. It might not work on future ports, though. 03:37:05 Yeah, you're looking at reducing portability, or having to implement the mechanism for different ISAs. 03:37:22 This check is only done when interpreting, though, so performance isn't that big a deal. 03:37:41 * boru nods. 03:37:54 But thanks for putting the idea out there. :-) 03:38:15 Sure. It's just something I've utilised for my own implementations. 03:38:35 I was just talking the other day about wanting at some point to figure out how to hook those errors anyway (invalid memory errors) and pass them through my error handling rather than just segfaulting. 03:38:44 I've got physical hardware support for soft stack machine I implemented, and am revisiting in a more recent project. 03:39:55 I'm kind of hating on myself for even considering the idea of sticking ?stacks in find. It gets it executed at the right times and it doesn't make my interpret definition longer, but it just feels... "wrong" at the same time. 03:40:06 If you were using a process hypervisor, you could probably catch the signal in the child from the parent and possibly get a stack trace that way (since you're shooting from the hip trying to handle sigsegv in the child) 03:40:11 Like the first thing someone would say if they looked is "Why is that THERE???" 03:40:27 Hypervisor being a parent which spawns child processes i.e. very lightweight. 03:40:55 Right - that's an area I'd like to learn more about. I know what it is, basically, but have really no experience dealing with one. 03:41:25 I think remexre has some interesting work in that area going on. 03:41:36 I did something sort of like that before, where the parent would fork/exec word chains without persistence (so the requirements were a little different than general purpose) 03:41:41 He was itemizing his various layers the other day - one for each ARM security ring. 03:42:12 Yeah, I've seen/done similar things for RTOS I've seen/written. 03:42:31 Lots of ways to skin a variety of cats, and all that. 03:42:47 The thing is my interpret definition isn't really THAT long. I've gotten rather badly poisoned over the last year or so about wanting super short definitions. 03:43:05 "Factor factor factor" is good policy, but I guess anything can be taken too far. 03:43:30 It used to be that if it would fit on a 64-char line I was happy, but I've gotten even more aggressive of late. 03:43:46 I've been averaging probably 35-40 chars per def. 03:44:05 I'd say that's quite forthy, but yeah, I guess you don't want to end up with something that has the versatility of a transputer, with added overhead for each iteration... 03:44:37 I'd better get back to work before I need to abscond for lunch. 03:47:41 Take care! 04:01:27 --- quit: mtsd (Remote host closed the connection) 04:17:51 Oh man. I just had a horrible realization. 04:19:10 I've fallen all in love with these conditional control words, and really went to town with them. The conditional return and double return words are no problem. But the condition loop words all require a jump offset following the word that actually checks the condition. That means that an immediate counterpart word will be required - for all of them - to properly compile them. 04:19:13 Yuck. 04:43:40 Ok, well, I punched all that in, and the state=0 path still works fine. 04:45:32 I had it kludged up so I could test the number converter, but it's a "correct" structure now. Still missing a couple of bits in the state=1 path. 04:46:28 I could try marking some words immediate and see if they executed right even with state=1. 04:57:39 --- join: gravicappa joined #forth 05:08:16 --- quit: dave0 (Quit: dave's not here) 05:16:56 --- join: mtsd joined #forth 06:09:36 KipIngram, yes! IF ELSE etc are cool the way they are implemented 06:10:05 look at the X4 sources, i have the ?branch words in the kernel but if/else/then etc are all in an extension :) 06:10:22 >resolve mark if is just a ?branch to an as yet unknown address. the else or then has to back patch the if :) 06:12:12 Yeah - I'm accustomed to the general idea. It just hadn't "clicked" for me that that large number of conditional words were ALL going to need that treatment. 06:12:17 I mean, it's obvious. 06:12:27 I just hadn't consciously registered it. 06:12:29 yup. 06:12:37 also do loops etc 06:13:05 begin is usually an alias for here, and again is an unconditional branch back to the address that here left on the stack 06:13:21 Right. I actually don't have any other looping constructs other than these - I also don't have IF ... THEN. I've found the conditional returns and conditional recurse words adequate. 06:13:27 i was going to suggest maybe a conditional tail recursion word instead of loops, but unless you have some way of determining the currently-executing word at runtime, that would also need an immediate implementation 06:14:05 i would prefer for loops to conditional recursion personally :) 06:14:14 with for loops i also implemented rep 06:14:32 : blah .self ; \ emits its own name 06:14:41 10 rep blah blah blah blah blah blah blah blah blah .... 06:14:43 yeah but recursion fits in better with his return-oriented programming vocabulary 06:14:47 The conditional return words opened up a whole bunch of new structures for me. 06:14:56 :) 06:15:17 the beauty of forth is its implementor defined :) 06:15:22 and it is still forth :) 06:15:29 ugh, it is a workday today isn't it 06:15:31 Conditional return takes the place of IF THEN. I just factor the body of the if then into its own word, with a reverse-condition conditional return at the front. 06:15:37 not for me :( 06:15:43 its dentist day for me later lol 06:15:45 mark4: I agree. It is a beautiful thing. 06:16:00 It is a workday for me, but my only meeting was cancelled and moved to tomorrow. 06:16:09 YOU can implement a utterly CRAZY forth internally and... i will still be able to use it lol 06:17:09 Well, I have a python script that generates the source for all these words. I can just have it generate the source for the immediate wrapper words too. 06:19:33 It's easy enough - I just will get the PFA of the latest addition to the dictionary and that will be my target. 06:20:51 is PFA the same as CFA ? i know CFA LFA NFA but i never understood PFA lol 06:21:02 is the PFA the body of a variable? the part that contains the value? 06:21:10 or the first xt of a colon def? 06:21:37 PFA is just the address of the first cell of the definition. 06:21:41 For : words. 06:21:50 For variables it's just the variable address - where the data gos. 06:23:12 You know, another way I could do this would be to just mark these words, and the compile code could check for that mark after compiling the primitive and recognize that it needs to add an offset to the dictionary. 06:23:31 Then I wouldn't have to have all the extra words. 06:23:53 I don't really have a good bit handy to do that with, though. 06:25:20 thought i had a dentists appointment today at 3:30pm 06:25:28 its TOMORROW and at 2:30 lol 06:27:33 I could probably use the high bit of the second byte. I like that better than dozens of immediate words. 06:28:08 The important thing is that the right primitive gets compiled, and that will happen automatically. I just need to know when to compile the distance back to the start of the definition. 06:31:27 Or I could use the high bit of the 16-bit link field. I'm sure there are a bunch of bits in that field I will never need. 06:31:45 I was just a little worried 256 bytes might not be enough, so I allocated two bytes for that. 06:35:57 I rather like that. I could move all of the "meaningful" flags into the link field, and then use the high bit of the count byte to mark the beginning of the name. That would make it easier to implement nfa and lfa. 06:36:19 I have my lfa just before the name instead of the usual just after. 06:38:42 thats a good optimization i had considered 06:38:57 i also have a pointer to the NFA one cell above the CFA 06:39:12 so >name is cell- @ 06:39:31 Nice - that would be a little faster. 06:39:33 instead of searching the dictionary for a word whose lfa points to the right cfa 06:39:59 name> in my forth has to scan over the mae to the pointer 06:40:37 I have [ backlink 2 bytes ] [ count byte ] [ name bytes ] [ 4-byte align ] [ cfa pointer ] [ pfa pointer ] 06:40:38 if i changed it to lfa cfa-pointer "nfa" then both name> and >name would be cell- @ 06:40:49 last two are four bytes each. 06:41:13 i was thinking of doing lfa-pointer, cfa-pointer, count, "name" align 06:41:27 i never made taht change but its been on my todo for a while lol 06:42:04 I've got a few things like that. 06:43:24 Honestly, I need to do this. I don't actually have a really valid way to find the start of the name field from the CFA. I'd have to work my way back and identify the count byte, which involves recognizing the pad bytes as well. It's obtuse and I only THINK it's totally reliable. 06:43:52 If I high-bit the first name byte, or the count byte, then I can just search back until I find a bit set. 06:44:36 My assembler seems to pad with 0x90; it's a slight pain that that has the high bit set. 06:44:49 I wonder if I can control that without writing an explicit macro for it. 06:45:02 And I also wonder what made them choose 0x90. 06:45:41 It will be easier to mark the count byte - it's treated separately in my symbol creation macro. 06:47:57 AHA! 06:48:04 You can specify that byte when you align. 06:48:17 Just "align 4 " instead of "align 4." 06:48:19 Nice. 06:48:30 I see no reason not to use 0. 06:50:54 No, it doesn't seem to like that. 06:51:17 Oh, it's "align 4 db 0" 06:52:30 Good. 06:54:45 i think the align macro can specify the alignment byte 06:54:54 --- quit: Zarutian_HTC (Read error: No route to host) 06:55:01 Yeah - I found it. 06:55:10 align 4, db 06:55:12 align macro might be used inside a code block so padding would have to be nops 06:55:20 nop == 0x90 06:55:27 Oh - of course. 06:55:42 Well, I only changed it in my symbol macros. 06:57:44 --- join: Zarutian_HTC joined #forth 06:58:40 --- join: tech_exorcist joined #forth 07:05:39 Ok, good. That's all done. Now I can use the count byte and an align to jump from the name to the CFA, and can scan back from the CFA looking for a set high bit, and that will be the count byte. 07:06:09 Reserved the top three bits of the 16-bit back link for flags. 07:06:13 or you could store a count byte at the end of the string too :) 07:06:27 Yes, I could. 07:07:14 So this limits me to 4kB backlinks, but that should always be plenty. I'd have to define a LOT of temporary words before unlinking them would exceed that. 07:07:52 And I always *could* shift the back link over two bits, since it's always 4-byte aligned. 07:09:33 --- quit: Zarutian_HTC (Ping timeout: 265 seconds) 07:11:03 Oh - or just use them as flag bits down where they are. 07:11:05 That's better. 07:14:08 Ok, good. IMMEDIATE is bit 0, TEMP is bit 1. Bit 15 is reserved for future use. 07:14:26 So now the backlink can be up to 32kB. 07:15:30 Oh, if I stored a count byte at the end it would need to go after the padding and point all the way back to the other count byte. 07:15:41 Otherwise I'd still have to scan over the pad bytes to find it. 07:15:54 I'm just going to scan back, though. Easy enough. 07:23:50 OH! No, bit 15 isn't reserved. It's going to mark the words that need that jump back distance compiled after the primitive. 07:24:00 That was the WHOLE POINT of what I was doing. 07:32:05 Ok, good. All the conditional loop words now set that bit. Now I can just smarten up the compiler. 07:33:37 I feel sure I can grab a couple more bits out of that field if I turn out needing anything. 07:45:53 Ok, good. 07:46:53 I think this means that I'll only have a small handful of immediate words. 07:47:12 [ ; ;; [compile] and... I'm not sure yet what else. 07:47:32 Oh, and : since I can define labels mid-word. 08:27:15 --- join: Zarutian_HTC joined #forth 08:47:42 --- quit: Zarutian_HTC (Remote host closed the connection) 08:59:32 ['] 08:59:52 " ['] ' literal ; immediate 09:13:21 --- join: actuallybatman joined #forth 09:18:43 --- quit: cantstanya (Ping timeout: 240 seconds) 09:22:59 --- join: cantstanya joined #forth 09:29:59 Right - I'm sure I missed a handful. 09:30:23 But now there will be 40 that I won't need to have. :-) 09:30:32 41 actually. 09:40:01 --- quit: mark4 (Quit: Leaving) 09:40:34 --- join: mark4 joined #forth 10:02:21 I wound up putting ?stacks inside "handle" here: 10:02:23 : interpret find handle 0=me exec me [ 10:02:37 Somehow that didn't bother me as much as putting it in find. 10:03:09 And because the last word processed on every line will be the null word, which has no stack effect, we do get an error check at the end of the whole line, effectively. 10:20:36 --- join: LispSporks joined #forth 10:29:04 --- quit: LispSporks (Quit: My MacBook has gone to sleep. ZZZzzz…) 10:39:46 --- quit: cp- (Quit: Disappeared in a puff of smoke) 10:40:43 --- join: cp- joined #forth 10:45:37 --- join: Zarutian_HTC joined #forth 10:54:32 --- join: Zarutian_HTC1 joined #forth 10:56:48 --- quit: Zarutian_HTC (Ping timeout: 240 seconds) 10:58:48 --- quit: Zarutian_HTC1 (Ping timeout: 240 seconds) 12:19:55 --- join: jess joined #forth 12:53:43 --- quit: cp- (*.net *.split) 12:53:43 --- quit: actuallybatman (*.net *.split) 12:53:43 --- quit: Monev (*.net *.split) 12:53:43 --- quit: rpcope (*.net *.split) 12:53:43 --- quit: spoofer (*.net *.split) 12:53:44 --- quit: hosewiejacke (*.net *.split) 12:53:44 --- quit: phadthai (*.net *.split) 12:53:44 --- quit: X-Scale (*.net *.split) 12:55:36 --- join: cp- joined #forth 12:55:36 --- join: actuallybatman joined #forth 12:55:36 --- join: Monev joined #forth 12:55:36 --- join: rpcope joined #forth 12:55:36 --- join: spoofer joined #forth 12:55:36 --- join: hosewiejacke joined #forth 12:55:36 --- join: phadthai joined #forth 12:55:36 --- join: X-Scale joined #forth 12:55:40 --- quit: cp- (Max SendQ exceeded) 12:56:41 --- join: cp- joined #forth 12:58:20 --- quit: X-Scale (Ping timeout: 252 seconds) 12:59:51 --- quit: mark4 (Ping timeout: 260 seconds) 13:02:09 --- join: Zarutian_HTC joined #forth 13:03:54 --- join: X-Scale joined #forth 13:36:48 --- quit: gravicappa (Ping timeout: 240 seconds) 13:40:03 --- quit: mtsd (Ping timeout: 240 seconds) 13:40:48 --- join: mark4_ joined #forth 13:41:32 --- join: dave0 joined #forth 13:41:56 maw 13:43:05 --- quit: mark4_ (Remote host closed the connection) 13:43:16 --- join: mark4_ joined #forth 14:11:29 --- quit: mark4_ (Ping timeout: 250 seconds) 14:19:38 we might be a small channel, but we've got at least twice as many logons as those ##fortran guys :D 15:00:40 --- quit: tech_exorcist (Quit: tech_exorcist) 15:06:16 lispmacs: http://krue.net/avrforth/ has a nice assembler . I would be happy to discuss any questions about AVR. 15:13:23 DKordic: i'm not familiar with that particular Forth. gforth alone compiles the flash image? 15:14:56 and is 328P supported? 15:28:21 --- quit: Zarutian_HTC (Ping timeout: 265 seconds) 16:23:04 Sorry for the delay. avrforth is hosted in gforth. It has assembler ""avr.f"", and a STC forth dialect implemented in avr.f. 16:35:34 Take a look at it's sources. Take what You like. 17:05:11 --- join: Zarutian_HTC joined #forth 17:13:23 so how do they handle writing words to flash on those avr forths? can you just pick whether it goes into ram or rom? 17:22:32 MrMobius: in FlashForth, the `create' word creates an entry in the dictionary (flash) but other words like `allot' use whatever data section you currently have set 17:22:56 which is set with the `flash', `eeprom', or `ram' words 17:23:20 by default you are in `ram' mode 17:23:44 so, the following would create an array called `foo' in ram: 17:23:51 create foo 10 allot 17:24:14 but to have the array in flash: 17:24:23 flash create foo 10 allot ram 17:25:10 the usual : foo etc ; will create a word in flash 17:29:01 I have been trying to find out something regarding avr and arduino 17:30:03 there is an 'bootloader' in portion of avr flash that can write to rest of the flash 17:31:05 some moons ago I came across a function that allowed to write to flash from arduino c code 17:31:22 --- quit: dave0 (Quit: dave's not here) 17:32:11 what I surmised was there was a call into a small write flash primitive function that is now part of the standard ardunio 'bootloader' 17:33:29 what I like to know is where that primitive function is in the 'bootloader' section is and how one might invoke it from forth 17:38:02 http://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html looks promising 17:42:24 Zarutian_HTC, isnt the bootloader a piece of code that arduino provides? ie not built into the chip or the rom or anything 17:43:38 MrMobius: yes, I want to know where that flash writing primitive functions are in that bootloader 17:44:06 seems like you could just look in the datasheet 17:44:31 no clue about avr but others make you do some configuration and unlocking so you dont accidentally write the flash then you can do it 17:44:56 reason: so someone with one arduino board can play around with an avr forth without doing complex flashing 17:46:27 that is, not requiring them to use a programmer to burn my bootloader 17:51:36 and i guess they could keep the bootloader too if they wanted to do arduino stuff after trying the forth 17:53:39 indeed 17:53:50 * Zarutian_HTC looks at https://github.com/arduino/ArduinoCore-avr/blob/master/bootloaders/atmega8/ATmegaBOOT.c 18:00:48 aand it is not inside a function there, damn 18:02:46 https://github.com/arduino/ArduinoCore-avr/blob/master/bootloaders/atmega8/ATmegaBOOT.c#L307-L398 is the flash writing section 18:04:26 no idea if this is even current codebase for the arduino bootloader 18:10:40 sigh looks like it is easier to just have instructions on how to use an arduino as an In-circuitSerialProgrammer to flash another atmega328p ( DualInlinePackage version ) 18:11:36 with an forth compatible and ArduinoISP protocol compatible bootloader 18:23:37 Zarutian_HTC: I would recommend the very convenient DIYMORE AVR ISP Shield that fits on the Arduino UNO. It has a ZIF socket for inserting and programming 328p chips 18:24:04 it also has a 6pin header which i have used to program Arduino Nano boards 18:25:10 so far I have used this tool to load FlashForth 5 on three 328P MCs, two of which were DIPs I used in UNO boards and one on a Nano 18:25:14 sounds nice, might not be available everywhere where ardino boards are sold 18:25:45 arduino 18:25:45 I bought mine from Amazon for a few dollars 18:26:52 lispmacs[work]: you are making an assumption here, can you spot it? 18:28:45 the assumption is that everyone can or want to order it, wait a few days to ship, etc 18:30:22 it is not uncommon for hobby stores and even some consumer electronics store to sell those 'standard' arduino uno kits 18:31:50 so the instructions might be 'you need two arduino uno boards and you could just borrow the one used as the isp' 18:32:24 Zarutian_HTC: there are no hobby stores remotely close to where I live in Alaska. The last radioshack closed years ago 18:33:09 but I am glad they still exist somewhere 18:33:44 lispmacs[work]: Digikey and Mouser are good sources. 18:33:47 you get my point, plus lot of hackerspaces sell or have arduino unos laying around 18:34:48 well, i won't force you at gunpoint, but I do recommend those convenient DIYMORE programming shields if you can somehow manage to get one 18:35:32 * lispmacs[work] leaves work 18:35:39 And there are some very economical printed circuit board fab places that you can deal with online. 18:36:04 I can add my recommendation for Digikey, best parametric search engine and it keeps your query in the url plus they deal with wierd orders without much hassle 18:36:17 I used to think I wanted to fab my own PCBs but now that I understand the options better there's just no way I ever will try that. 18:36:18 I use OSH Park to print my PCBs 18:36:21 It's so limiting. 18:36:52 * Zarutian_HTC has etched and cnc his own pcbs 18:36:59 hey guys 18:39:24 I have yet to try the laser etching technique I heard about 18:40:22 * tabemann is too ignorant about hardware to even consider designing his own boards, much the less etching them 18:40:53 that technique uses the trick of having the pcb leaning nearly flat to prevent back mirrowing into the laser tube 18:41:40 but the fablab that I have access to has a vinyl cutter 18:42:25 I hadn't heard of that technique. 18:42:42 Zarutian_HTC, doesnt the bootloader run independently of the code it's loading? 18:42:51 it is mostly used for cuting out stickers which are the sometimes used for masking in spray painting or silk printing 18:42:53 Mostly I think of buying PCBs because I want at least four layers, and maybe six. 18:43:09 I usually feel like I want solid power and ground planes. 18:43:11 like if you can just put yout forth at whatever the bootloader jumps to, it seems like you would be good 18:44:06 but one of the sticker material on offer has aluminum foil as it top layer 18:46:04 MrMobious: yeah that is not the problem, but I want that forth to be able to append to its flash progmem which usually is only allowed to be written to from bootloader though there might be some fuse bit config that controls that 18:47:06 oh hmm. why is it only allowed from bootloader? that would have to be some special region that the manufacturer set aside for bootloading. thats not how it works is it? 18:47:13 there is also the choice of copperfoil topped sticker material 18:48:17 * tabemann wonders why one would want to use arduino anyways, considering that STM32 MCU's are infinitely more capable, and boards with them often come with integrated ST-Flash programmers 18:48:25 MrMobious: that is how it works at least from what I can tell from the full AVR ATmega328p datasheet 18:48:41 and if you really want to use Arduino shields, there's always Nucleo boards 18:48:45 tabemann: immediate availability 18:49:50 oh yeah, you're in iceland, where you can't readily get ST products 18:50:08 tabemann, no STM32s in dip 18:50:35 tis true 18:50:43 --- join: boru` joined #forth 18:50:46 --- quit: boru (Disconnected by services) 18:50:48 --- nick: boru` -> boru 18:51:06 sure I can order them and then wait, wait some more, deal with customs&toll, wait some more and so one 18:51:11 --- join: mark4 joined #forth 18:53:10 MrMobious: doesnt adafruid sell breakout boards for say tqfn package to dip compatible male headers on bottom? 18:53:52 could be but that's still not the same 18:55:20 so with this copper topped sticker vinyl material, I got thinking. Why not cut it out in the pcb-layout and apply it onto a prepped two layer pcb? 18:56:00 MrMobious: not electrically or pin compatible? 18:56:35 I think MrMobius wants to make his own boards and stick DIP's in them 18:57:04 (especially considering that DIP's are far more hand-soldering-friendly than SMT's) 18:57:53 prepped in the sense that non conducting layout cut sticker layer has been applied first and 'via' holes in that layer filled with solder 19:00:19 tabemann: yeah I am still recovering from mitxela vid where the madman hand solders to a bga chip 19:02:05 I assume that BGA chip was being hand-soldered in dead-bug fashion 19:02:14 https://m.youtube.com/watch?v=edERx4x5eY0 19:03:11 (bga stands for ball grid array fyi for future log readers) 19:19:39 wow 19:19:46 I watched the whole thing 19:19:53 I was on-edge the whole time 19:35:18 --- quit: sts-q (Ping timeout: 246 seconds) 19:39:51 --- join: LispSporks joined #forth 19:46:00 --- join: sts-q joined #forth 19:53:00 --- quit: LispSporks (Quit: My MacBook has gone to sleep. ZZZzzz…) 19:54:11 --- join: LispSporks joined #forth 20:05:13 ya dip is easier to solder and you probably dont want to use those break outs for one off things since theyre expensive 20:09:11 --- quit: LispSporks (Quit: My MacBook has gone to sleep. ZZZzzz…) 20:10:52 --- join: LispSporks joined #forth 20:23:55 I'd not try soldering fine pitch solder mount without a stencil. 20:24:11 But if you've got a stencil, you can do some interesting things with certain toaster ovens. 20:24:54 SURFACE mount. :-| 20:24:55 --- quit: LispSporks (Quit: My MacBook has gone to sleep. ZZZzzz…) 20:25:44 --- join: LispSporks joined #forth 20:25:44 --- quit: LispSporks (Client Quit) 20:27:38 You know, that little Cortex Itsy Bitsy has a nice said of signal processing resources on it. I found myself if a simple software defined radio could be developed on it. Use PWM out and a filter to set the frequency, mix that with the signal, pass it through a filter, and use the ADC (which would get you about a 500 kHz band width) to tune. 20:29:13 I'm sure I couldn't do one that would rival a dedicated dongle, but it would just be "for the fun of it" anyway. 20:30:19 --- join: LispSporks joined #forth 20:30:32 You know, I miss international shortwave broadcasts. That was a fun way to spend an evening - seeing what you could turn up "on the bands." 20:30:38 The internet just killed it, though. 20:49:34 --- quit: LispSporks (Quit: My MacBook has gone to sleep. ZZZzzz…) 20:55:22 --- join: mtsd joined #forth 20:56:38 --- join: gravicappa joined #forth 21:07:29 KipIngram: re stencils: one can make one out of a cut soda can 21:23:03 --- quit: sts-q (Quit: ) 21:23:29 --- join: sts-q joined #forth 21:52:11 --- join: dave0 joined #forth 21:53:10 maw 22:39:08 --- quit: actuallybatman (Ping timeout: 252 seconds) 22:43:15 --- quit: proteus-guy (Ping timeout: 246 seconds) 23:59:59 --- log: ended forth/21.05.03