I should add I have an EE degree (but have never worked as an EE), so even though I don't know industry standards like this sky130 thing, it's not completely foreign to me.
2,526 karma · joined July 9, 2017
I have a blog at jestoph.com
I haven't worked out how to get email at that domain, so I'm still using gmail for now.
I work at Atlassian, though my opinions are my own. If you also work there, come say hi
I should add I have an EE degree (but have never worked as an EE), so even though I don't know industry standards like this sky130 thing, it's not completely foreign to me.
It's a moderately technical and (hopefully) entertaining run through of the process. I hope you enjoy reading it as much as I enjoyed doing the challenge (though, as you'll read, it was also quite a frustrating process). My github is on the post if you were interested in seeing a bit more in detail what my solution looked like, though I intend to write some follow up posts that are a bit more in the weeds of the solution. And frankly, the code I used is pretty ugly but it got the job done.
This is my first blog post, so if you have any feedback please let me know. All the writing, all the code was done by me, by hand, in vim.
[0] https://blog.janestreet.com/can-you-reverse-engineer-an-asic...
Funny enough I used to work in firmware adjacent to surveying so much of this was vaguely familiar, but having it tied in to a history lesson brought it to life.
I'm still working my way through it so it's possible that I've misunderstood this section, though, and one question I haven't answered is how they get around the typical restriction on w+x pages.
[0] Particularly this one https://www.airs.com/blog/archives/41
With the addition of 'defer' on the unlock seems not too difficult to use, but I think the main issue I would find it having to remember when and when not to use it.
Are you able to explain this? Do you mean an N sized array where each entry is either a value or a pointer to a value where the 'pointed-to' values are after the end of the array?
I'm trying to underatnd how you'd do this without having to parse M-1 elements to get the Mth entry if you did a [{size0, value0}, ....., {sizeN, valueN}] arrangement
Edit to add: I think David's talk on Wild [0] is an interesting summary of what a linker is and why its hard to make incremental
A fun treatment of a dilema I've come across a few times when trying to limit excessive memory allocation. It's like an ourobouros of logic - in order to know the memory needed for a calculation, you need to calculate the calculation leading to a hypothetical sequence of calls like
makeCharacterBitmapMemoryNeededMemoryNeededMemoryNeeded()
makeCharacterBitmapMemoryNeededMemoryNeeded()
makeCharacterBitmapMemoryNeeded()
makeCharacterBitmap()It seems that ResearchBox has a more locked-down approach, and will continue on as a possible replacement.
If I every come up for air I should look in to hardcaml and maybe that will allow me to reach enlightenment
So far I've built a digital circuit simulator, a parser for my circuit design language, and now a parser for my simulator language (so I can run the sim on known inputs and have the machine enforce asserts for me). All to avoid the painful memories I have of verilog/vhdl.
If I don't come to my senses, the next thing is probably going to be a wave form viewer because I've wanted to use Raylib for a real project for a while now.
[0] edit: forgot link - https://blog.janestreet.com/can-you-reverse-engineer-an-asic...
[0] https://www.complexsystemspodcast.com/episodes/what-youre-ac...
It seems like a lot of the speedup comes from using an arena, using realloc with offsets rather than raw pointers and some change to the graph that enabled this (though I don't want to re-read it to confirm).
The more you know