Compiling C to printable x86, to make an executable research paper

  Рет қаралды 424,737

suckerpinch

suckerpinch

Күн бұрын

In this oddly paced "educational" video, I explain how I created a paper for SIGBOVIK 2017 that consists of only printable ASCII bytes, but is also a valid DOS executable. This involves making a C compiler that targets the printable subset of x86 (without using self-modifying code), and just barely scraping out solutions to some tricky puzzles that arise due to the constraints. The final result is functionality that is oh so very important, however!
Download the paper/program and source code: tom7.org/abc/
SIGBOVIK: sigbovik.org/
All Tom thingies: tom7.org/

Пікірлер: 1 000
@moth.monster
@moth.monster 6 жыл бұрын
"printable x86" is actually the best esoteric programming language
@nokkonokko
@nokkonokko 4 жыл бұрын
Good luck golfing with it...
@want-diversecontent3887
@want-diversecontent3887 3 жыл бұрын
I don't know x86 but I'll try with 6502
@tissuepaper9962
@tissuepaper9962 2 жыл бұрын
@@nokkonokko invent a new form of code golfing called "novelwriting" and see who can write the longest readable book that is also a useful program.
@ex5392
@ex5392 Жыл бұрын
@ilkemincraft753 and then actually perform the play
@ashleybyrd2015
@ashleybyrd2015 Жыл бұрын
@@tissuepaper9962 what defines a useful program? because it certainly seems hard
@therealfranklin
@therealfranklin 7 жыл бұрын
"Outside of this region is a bunch of hooey." Might be the best description of UTF-8 I've ever heard of.
@simonmultiverse6349
@simonmultiverse6349 3 жыл бұрын
3:53
@dragonridertechnologies
@dragonridertechnologies Жыл бұрын
Well, yes, but it's still better than the other UTF representations.
@gloverelaxis
@gloverelaxis 11 ай бұрын
i'd argue that UTF-8 is one of the most beautifully elegant ideas in all of computer science, up there with the Y combinator, but its genius lies in its simplicity and its social impact rather than logical gymnastics. having one dead-simple encoding for all historical and current human written language is a truly *marvelous* thing. i can speak the word "duck" to you in ancient Egyptian hieroglyphs very directly and literally: "𓅬", right here in this comment box. all blame for the hooey code points which don't represent written text, like BEL/BELL, lies with ASCII and the other historical ancestors. i fully support a version 2 that drops ASCII back-compat
@josephenders1893
@josephenders1893 10 ай бұрын
​@@gloverelaxisthe backwards compatibility of UTF8 is what makes it really interesting (and useful). Almost every source code file is representable with it in an incredibly clever way it allows the expansion into every other character you can want.
@kargaroc386
@kargaroc386 3 ай бұрын
Except for stuff like shift-jis which isn't compatible at all (aside that it uses ASCII for the first 127 code points like everything except ebcdic) and appears frequently enough to not just be completely forgotten but infrequently enough that people who need to know, don't know about it.
@SirChris314
@SirChris314 7 жыл бұрын
this video was good up until 25:03 at which point it was a masterpiece
@otesunki
@otesunki 5 жыл бұрын
haha
@TheJamie109
@TheJamie109 5 жыл бұрын
That was such a huge setup for that reveal. Im impressed. "Haha got you! I spent so long jumping through hoops to write this code to troll you!"
@dimkir100
@dimkir100 5 жыл бұрын
My jaw dropped when it revealed the infamous image! :D :D LOL Great job! Amazing video and research! :)
@avieus
@avieus 5 жыл бұрын
And better than the masterpiece was at 25:42
@FosukeLordOfError
@FosukeLordOfError 3 жыл бұрын
I saw it coming at the last second, and I loved it. I wept tears of joy.
@jdlenl
@jdlenl 6 жыл бұрын
i love how you explained assembly without mentioning assembly
@Mmouse_
@Mmouse_ 10 ай бұрын
People tend to learn to code at a fairly high level then wander down to lower levels. Whilst I was on that path, I couldn't help but think "this can't be how that's done, it's uglier than my most hacky code" - but sure enough, that is how it's done. Some people then wander down to hardware level and it's somehow even worse, after starting with a high level language and writing beautiful, Indented code then discovering that eventually it ends up as what can only be described as absolute shite it's pretty jarring.
@important9836
@important9836 3 ай бұрын
Akin to submitting a proofread manuscript detailing how to build a rocket to reach the moon, and the caveman executing it just farts really hard and gets there. Your screen still shows a rocket.@@Mmouse_
@Doodoofart725
@Doodoofart725 Ай бұрын
​@@Mmouse_It's somehow relieving. Even the best code I write ends up as unintelligble gibberish so whatever lol
@magneticflux-
@magneticflux- 7 жыл бұрын
14:38 "This kind of fractal structure shows up a lot in computer science and mathematics and Hyrule."
@porky1118
@porky1118 5 жыл бұрын
I didn't hear that the first time, even if I didn't skip that part ^^
@EnderLord99
@EnderLord99 2 жыл бұрын
I mean, he's not wrong.
@MCRuCr
@MCRuCr 2 жыл бұрын
AND drinking games
@lollllloro
@lollllloro 2 жыл бұрын
I wasn't sure it was "Hyrule" and I brushed the word off as some word I don't know.
@vieilatome2257
@vieilatome2257 Жыл бұрын
Only link can defeat ganon
@woulg
@woulg Жыл бұрын
This is my favorite flavor of art. I don't know if you have won any modern art prizes but imo you deserve many. There was a guy who came to my uni to give a talk who did stuff like this but only a fraction as labour intensive (and therefore exponentially less cool), and he was a big time, famous conceptual artist. I can't remember his name but he did one piece where he threw colored sticks in the air and took pictures of them because hypothetically they could randomly happen to arrange themselves into a perfect representation of a hypercube (the pictures are wonderful). He did another one where he got every possible attachment for his camera and several pairs of glasses and things to improve vision and then took the shittiest bluriest self portraits (because it was basically impossible to operate with this many "upgrades"). And the last one that I remember which was also very beautiful, he took 2 super long exposure photos of him laying on his back and then his front while listening to the whole back and then front of a public enemy record. He was one of my favs but after watching several of my videos you've definitely usurped him (and the others who shall remain nameless because of my shit memory). In about a decade look out for my comment on someone else's video where I detail my vague memory of your work hahaha. Anyway, sorry for the ramble, great stuff as usual, I'm off to watch the rest.
@tom7
@tom7 Жыл бұрын
Thank you! I'm content with becoming a vague memory in a decade :)
@kasparpoland9803
@kasparpoland9803 8 ай бұрын
Couldn't have put it into words any better myself. It's really inspiring :)
@viniciusmv7727
@viniciusmv7727 4 ай бұрын
​@@kasparpoland9803 That's a great pun considering the video
@BludtheThursty
@BludtheThursty 7 жыл бұрын
"This kind of fractal structure shows up a lot in computer science, mathematics, and Hyrule" Gold
@FishamanP
@FishamanP 7 жыл бұрын
I'd love to see a video of you creating a blank text file, typing the program in, saving it as a .exe, and running it. It would really drive the point of this exercise home.
@tom7
@tom7 7 жыл бұрын
Are you sure? :) Unfortunately due to constraints in the header, these EXEs have to be 400k. Did you see that video of a guy live-streaming pressing his mouse button a million times? It'd basically be like that!
@waxt0n
@waxt0n 3 жыл бұрын
@@tom7 could you have a macro that does it?
@ccgarciab
@ccgarciab 3 жыл бұрын
@@waxt0n well, he has the compiler that he described in the video
@randomblogger2835
@randomblogger2835 3 жыл бұрын
@@tom7 make .coms instead of .exes.
@__lasevix_
@__lasevix_ 2 жыл бұрын
@@tom7 pay someone to do it
@TerjeMathisen
@TerjeMathisen 3 жыл бұрын
The huge step here is when you realized that it is in fact impossible to write a regular program without any of the 8-bit bytes, and then decided to use an entire 64 KB block as your program, with wraparound at the end. I did the opposite back around 1992, by deciding to write an executable ascii program that used an even smaller character set: Just the 70+ chars that are blessed by MIME as passing transparently through any email gateway. This is the 65 MIME Base-64 set plus a handful of others that don't need any quoting. My final result does the absolute minimum possible amount of self-modification: A single 2-byte backwards JMP opcode is sufficient to enable the primary bootloader (two 64-byte lines, with optionally one or two line separator chars) to run. This boot loader decodes pairs of Base-64 chars to generate any byte value, so it encodes a maximally dense Base64 decoder which is used to decode and optionally either save to disk or execute the actual payload.
@Terbium23
@Terbium23 7 жыл бұрын
Did I just got rickrolled?
@tarberd
@tarberd 7 жыл бұрын
I... guess .... ??? I mean ... I'm confused ...
@niklasgransjen684
@niklasgransjen684 7 жыл бұрын
In a 25 min video, even.
@batfan1939
@batfan1939 6 жыл бұрын
It's been so long since it happened to me, it took me a second to recognize it. Well, that, and it's 2:25 a.m.
@robertcullipher3492
@robertcullipher3492 6 жыл бұрын
The most elaborate rick roll ever!
@SreenikethanI
@SreenikethanI 5 жыл бұрын
wait this comment has 256 likes... I don't wanna spoil it...
@car-keys
@car-keys 7 жыл бұрын
I've played enough TIS-100 to know how impressive this is.
@MultipleObjectSelector
@MultipleObjectSelector 6 жыл бұрын
car keys TIS has basically no instructions compared to IA or even ARM. IA is more complicated than most languages that target it.
@unflexian
@unflexian 5 жыл бұрын
GET SHENZHEN IO ALSO EXAPUNKS LOOKS FUN MHRD TOO
@BradenBest
@BradenBest 5 жыл бұрын
@@unflexian MHRD is hard as shit. The furthest I could get without looking up schematics was the full-adder.
@Huntracony
@Huntracony 4 жыл бұрын
@@unflexian Oh fuck, I already thought the Zachtronics games were next level but MHDR looks another few levels beyond that and now I have to play it.
@123sleepygamer
@123sleepygamer Жыл бұрын
This video made me think of that game. I suck at it so bad. Was better at Exapunks.
@javierbg1995
@javierbg1995 7 жыл бұрын
14:33 You already had me in, but man... BTW: I didn't think I'd ever see a Numberphile parody. Very nice
@tom7
@tom7 7 жыл бұрын
Thanks for watching! :)
@gkcs
@gkcs 7 жыл бұрын
This is just brilliant! Do you have any source for your inspiration, or is it just plain craziness?
@tom7
@tom7 7 жыл бұрын
Thanks! :) I just write down silly ideas I have, then spend months executing them...
@ster2600
@ster2600 3 жыл бұрын
@@tom7 I wish I was as dedicated to my actual life as you are to these seemingly pointless yet fascinating projects
@imperatusmauser7096
@imperatusmauser7096 3 жыл бұрын
@Ibrahim Braydon wow, bots
@devhypercoder2522
@devhypercoder2522 3 жыл бұрын
@@imperatusmauser7096 and even a reply bot lol
@imperatusmauser7096
@imperatusmauser7096 3 жыл бұрын
@@devhypercoder2522 I've been seeing these bots everywhere, especially in CodeVault's videos
@Reecer77
@Reecer77 7 жыл бұрын
Man, "boring"? Tom7, I LIVE to see you post a new video, because it's always super interesting each and every time. I really hope that's not the *sole* reason you only make videos on things like, twice a year, if that, because I would be ECSTATIC if you had slightly more video content to share, WHATEVER it is.
@tom7
@tom7 7 жыл бұрын
Well, thanks for saying that. :) The main reason I don't share more stuff is that I usually put a lot of work into the setup (this project was my main programming hobby for a few months) and since I have a full-time job, there's only so many hours in the day (and only so many brain-sugars in the brain)!
@TheMaplestrip
@TheMaplestrip 7 жыл бұрын
suckerpinch I was really happy when you said you wouldn't be explaining bytes and byte code and all that. I was worried I would be forced to sit through a lot of stuff I already knew. You ended up not explaining a lot of stuff I didn't know, but that was completely fine because you explained everything that was needed to understand the video. It's this kind of editorial control that makes your videos a joy to watch.
@car-keys
@car-keys 7 жыл бұрын
Tom, as a young CS major, this channel is incredibly interesting. Thanks for all you do!
@tom7
@tom7 7 жыл бұрын
You're welcome and thanks for saying so! :)
@roboto_
@roboto_ 7 жыл бұрын
that was the most elaborate rickroll ever
@Hexcede
@Hexcede 3 жыл бұрын
I didn't watch the full video. I set up DOSBox just to run the file to see what it does after trying to compile a different 16 bit emulator. I just went through so much effort to get rick rolled by a text file.
@evinmathai
@evinmathai Жыл бұрын
You may find Ladder Diagram an interesting “programming language”. It is widely used in industrial automation on programmable logic controllers (PLC). It follows like your ladder idea and evolved out of industrial machinery using hardwired relay logic.
@123sleepygamer
@123sleepygamer Жыл бұрын
That is very interesting.
@pixelflow
@pixelflow 6 жыл бұрын
This needs to be printed in a book with one of those misleading 80s qbasic 'games, puzzles and more!' covers. Because nothing is better than OPLrolling yourself after typing for several hours.
@hobbified
@hobbified Жыл бұрын
There was no QBasic in the 80s.
@ValeBridges
@ValeBridges Жыл бұрын
@@hobbified Well, I suppose that's what makes them so misleading
@joshnoble07
@joshnoble07 7 жыл бұрын
Tom. You are a son of a bitch. I have waited for this day for almost a year now. How on earth did you find a way to outdo yourself. This is phenomenal.
@tom7
@tom7 7 жыл бұрын
Hey be nice to my mommy! :)
@onradioactivewaves
@onradioactivewaves Жыл бұрын
That's just how he rolls
@TheUnknownsShow
@TheUnknownsShow 7 жыл бұрын
This is still my favorite KZfaq channel of all time. I really wish Tom would upload more often, but at least what he does upload is always gold!
@tom7
@tom7 7 жыл бұрын
thank you (:
@TheMaplestrip
@TheMaplestrip 7 жыл бұрын
Oh how I love this channel! This video reminds me most of glitch abusers of video games like _Pokémon_ and _Super Mario 64,_ using the compiled-level code in ways it was never supposed to be used. What you did is absolutely gorgeous.
@tom7
@tom7 7 жыл бұрын
aw thanks :)
@entropyzero5588
@entropyzero5588 6 жыл бұрын
Awesome stuff! Though, quick question: Wouldn't (A xor B ) xor (A and B) also net you (A or B) ? ;)
@jurjenbos228
@jurjenbos228 2 жыл бұрын
Of course
@MatheusAugustodaSilva
@MatheusAugustodaSilva 2 жыл бұрын
The "how dare you not save a couple instructions in a project that took you months to accomplish and yielded you a research paper" strikes again.
@bacicinvatteneaca
@bacicinvatteneaca 2 жыл бұрын
@@MatheusAugustodaSilva well, cutting in half the number of operations needed for a simple AND is kind of a big deal
@xeostube
@xeostube 4 жыл бұрын
It's a sad testament to the difficulty of collaborative filtering that for all the effort you put into this, only 150k people (if that, as I've seen it twice) have ever gotten to enjoy it.
@tom7
@tom7 4 жыл бұрын
The important thing is that the RIGHT 150,000 people see it!
@vinculaomega5283
@vinculaomega5283 7 жыл бұрын
This was the most elaborate Rick Roll I've ever seen. You've earned my like and subscribe, good sir!
@davidmikan7925
@davidmikan7925 3 жыл бұрын
you're kinda spoiling it for other people since it’s the top comment :/
@lucas29476
@lucas29476 3 жыл бұрын
@@davidmikan7925 tbh KZfaq mobile app is to blame for displaying the top comment prominently. This functionality is included in the past few months
@KyleNally
@KyleNally 7 жыл бұрын
Tom, as a larval web designer with *just* enough experience playing TIS-100 to follow this, I have to say I'm pretty blown away by what you did here, not only with the 'what' but also with the way you explained things. I'm not a CS major by any means, and I wasn't really lost anywhere. Great job, and I'll be mentioning your channel to my developer friends when I go to class tomorrow. Looking forward to seeing your next video!
@RamLaska
@RamLaska 3 жыл бұрын
I remember seeing programs that would work identically in some variation of unix shell, perl, and/or C, but doing one that's both valid plain text and DOS-executable is MENTAL. I love it!
@jkid1134
@jkid1134 2 жыл бұрын
I was floored by the elegance of addition as a bridge between AND and XOR into OR
@snnowwy
@snnowwy 3 жыл бұрын
"This kind of fractal structure shows up a lot in computer science and mathematics and Hyrule". Brilliant. Excellent video too. Absolutely inspired.
@asp-uwu
@asp-uwu 7 жыл бұрын
Couldn't you OR two numbers by doing (A XOR B) XOR (A AND B)? Seems like it would be easier than doing the 2's complement math...
@tom7
@tom7 7 жыл бұрын
Yes, and good eye. Somehow I missed this option. Plus is a nice segue in the presentation, at least.
@asp-uwu
@asp-uwu 7 жыл бұрын
Cool! Did you have to write all of this assembly by hand? Or did you just be _very specific_ to the compiler what you wanted? Not sure which would be easier, actually...
@tom7
@tom7 7 жыл бұрын
I wrote the compiler, so it's sort of a mix. At each stage (intermediate language) I get to pick what operations are available, but then I have to pay for that by implementing them (basically 'hand writing' code) in the next lower-level language. OR sticks around until the conversion to the "LLVMNOP" language, where it decomposes into AND, MOV, and XOR, and then I implement those three in printable x86 more-or-less by hand.
@asp-uwu
@asp-uwu 7 жыл бұрын
Hmmm, seems tedious. But then again, the process for making everyone of your entries so far does! Great stuff, man!
@rich1051414
@rich1051414 5 жыл бұрын
@@tom7 "LLVMNOP" sounds like your toddler confidently trying to finish your sentence.
@IAmTehAg
@IAmTehAg 7 жыл бұрын
Two vids in one years time? I love it :) Im honestly blown away so consistently by your work. Your enjoyment of wrestling with senseless problems is beautiful. I used to get excited over lots of channels new vids as a kid, but now i only get excited at your channel
@tom7
@tom7 7 жыл бұрын
Aw thanks, I'm glad you enjoyed it :)
@JuliaC-sp5qk
@JuliaC-sp5qk 3 жыл бұрын
the stuff you make consistently makes me want to cry while also being extremely impressed
@konpet4248
@konpet4248 Жыл бұрын
I'm proud to say that this video really made me understand what compilers are and how that kinda stuff works. Even around 3-4 years later I still occasionally come back
@SuperNintendawg
@SuperNintendawg 7 жыл бұрын
YOU'RE BACK! Excited to watch this video. I was kind of hoping for a unibicle kickstarter video but this will do I guess.
@roseproctor3177
@roseproctor3177 2 жыл бұрын
Your deep knowledge of computer science, and your ability to communicate so effectively is absolutely brilliant and extremely inspiring. Your videos have captured my imagination, so thank you 😌
@brianlindner1866
@brianlindner1866 6 жыл бұрын
The most elegantly executed rick roll of all time. I salute you, sir.
@rigen97
@rigen97 7 ай бұрын
My favorite part of your video is when you mention some absurd concept and then pull a document while casually saying "I already wrote a paper about that." Kinda gives these videos semi-documentary feel to them.
@evgenyaleksandrov1206
@evgenyaleksandrov1206 5 жыл бұрын
I heard a lot that self-limitations improve creativity and help finding new handy way to do something. But when you said "we can't just load a value to the register" a was just shocked. This video has insane amount of hilarious stuff and I totally enjoy it. Fantastic!
@jonthemon4
@jonthemon4 7 жыл бұрын
See you again in 6 months
@tom7
@tom7 7 жыл бұрын
hehe cya!
@AdrianCastravete
@AdrianCastravete 7 жыл бұрын
OMG! Hahahaha, That totally “terminated” the thread.
@ThePharphis
@ThePharphis 6 жыл бұрын
Hi there
@alexmueller7864
@alexmueller7864 Жыл бұрын
Hey, just wanted you to know that I found your channel a matter of days ago and have watched almost everything that you've posted. You're my hero! Working on amazingly unnecessary projects for their own sake is something that I heavily aspire to do.
@thomasgraham5840
@thomasgraham5840 Жыл бұрын
Honestly, between this and the running video, you give me a clear impression of what a person can get done in a single lifetime
@francesco9703
@francesco9703 7 жыл бұрын
These videos are the most original programming videos on KZfaq. Always interesting and a pleasure to watch, and the length isn't really a problem! Still hope you'll do something more in the field of AI, though :)
@scottsmith4204
@scottsmith4204 7 жыл бұрын
Finally, only so many times i can watch your old stuff.
@A1rPun
@A1rPun 3 жыл бұрын
The compiler analogy got me, every detail in this video is awesome.
@TRex-fu7bt
@TRex-fu7bt 11 ай бұрын
I’m doing that thing every year where I rewatch all your videos and the Numberphile paper always delights me.
@xwcg
@xwcg 7 жыл бұрын
I have no words. This is incredibly amazing.
@danielevans7439
@danielevans7439 5 жыл бұрын
As a security professional (but not a programmer yet), I imagine this concept could be used to hide payloads in viruses. It could even help social engineers breach firewalls. Very interesting.
@CrushedAsian255
@CrushedAsian255 10 ай бұрын
I think ASCII shell code is an actual thing
@iamthelowercase
@iamthelowercase Жыл бұрын
I'm not sure what impresses me most: the absolutely bonkers thing you decided to do, how well you both pulled it off and explained it, or your absolutely deadpan sense of humor. I will be sharing this video with everyone I know who I believe has even a *modicum* of a chance of following it.
@PendragonDaGreat
@PendragonDaGreat Жыл бұрын
I come back to this vid every couple of years, and every time I get to the end (after the first time) I *know* what's coming, and yet it still gets me.
@AssailantLF
@AssailantLF 7 жыл бұрын
YOU'RE SO SMART AND FUNNY AND GOOD AT EXPLAINING THINGS IN A FUN AND ENGAGING WAY I WANT TO BE YOU How did you become such a wizard?
@tom7
@tom7 7 жыл бұрын
Thanks! :) I don't know if I have a short answer for that, but I can say that behind the scenes there's a lot of hard work and anxiety and struggling with motivation and so on. Of course I don't present that part, because it's not that fun to watch, but it's certainly not effortless!
@AssailantLF
@AssailantLF 7 жыл бұрын
As an aspiring and amateur developer myself, that's reassuring to hear (not to delight in your struggles ;P)! I worked through most of "C Programming: A Modern Approach" and then about 1/4th of the way through K&R before I got really stumped at some problem and lost my drive a few months ago. I guess it's as simple as getting back on the horse, and staying on until I tame that mofo. Sorry for fangasming, but you're definitely a wizard-tier developer and I can't help but be enthralled when I get a taste of the work that you do at the level you're at. Seeing your videos and people like you who are both intellectual and playfully fun is really inspiring, so thanks a ton for your content and explanations and just bein' a cool dude.
@velocityra
@velocityra 7 жыл бұрын
Starting an actual project you're interested in is a much better way to learn a programming, or a specific language. Books are only good as a reference IMO, programming is really one of those things that you have to actually *do* to learn it. You will forget most things you read from the book, whereas if you start an actual project, you'll remember more, you'll be more motivated, and it'll be way more fun experience overall.
@marksmod
@marksmod 7 жыл бұрын
smoke crack
@josephroblesjr.8944
@josephroblesjr.8944 3 жыл бұрын
@@marksmod lol
@dantescanline
@dantescanline 7 жыл бұрын
Always a pleasure Tom
@kevinpaz3142
@kevinpaz3142 7 жыл бұрын
mick maus I saw what date it was and thought "Hey, Sigbovik (sic) is tomorrow, wonder if Tom7 got anything?"
@tom7
@tom7 7 жыл бұрын
Glad you enjoyed it and thanks for watching! (:
@yorgle
@yorgle 7 жыл бұрын
It's always a joy to see that you've posted something new. This is simply amazing, Tom. :D
@tom7
@tom7 7 жыл бұрын
thanks for the encouragement! :)
@huh5950
@huh5950 4 жыл бұрын
I've learned most of this stuff at school but before this video I always tought it was useless for most programmers, it was a good reality check thank you
@chaosvisum9167
@chaosvisum9167 7 жыл бұрын
Very impressive presentation. You packed a fantastic amount of information and creativity into 25 minutes?
@tom7
@tom7 7 жыл бұрын
Glad it came out okay (for you at least). I felt like it was really difficult to get through it all, since there was so much more to say about everything, and yet 25 minutes seems way too long to hold someone's attention? Thank you for watching :)
@MeriaDuck
@MeriaDuck 3 жыл бұрын
@@tom7 you would've had my attention even if it was a few hours. See also Ben Eater
@raghavrao5221
@raghavrao5221 3 жыл бұрын
@@tom7 To a very select audience your videos are like nerd crack
@contrl31
@contrl31 7 жыл бұрын
At 9:10 ish, why can't we do (A & B) XOR (A XOR B)?
@gafeht
@gafeht 7 жыл бұрын
(1000) XOR (0110) = 1110... Seems to do the same thing in the same amount of steps (3)
@Architector_4
@Architector_4 7 жыл бұрын
+gafeht But he said that we don't have + operation so he needed to make it with other stuff, so just putting XOR in the middle is actually better. Or maybe he knew about it and used + to demonstrate that he will need to make that + from other operations aswell.
@gafeht
@gafeht 7 жыл бұрын
+Architector #4 Ah, you're right. I missed that the second time through. Nice thinking +contrl31
@tom7
@tom7 7 жыл бұрын
It's better for the narrative of the video to use plus, so I'm glad I did, but XOR is definitely faster. Fixed the compiler. A few people have pointed this out, and I'm kinda ashamed I didn't spot it. Good eyes :)
@CosmiaNebula
@CosmiaNebula 7 жыл бұрын
Don't worry. (I spotted that too.)
@dwhxyz
@dwhxyz 7 жыл бұрын
Awesome...love the concept and the fact you actually managed to get it all to work. I would be interested in seeing another video on the c compiler you wrote. I looked forward to your next video :D
@DougSalad
@DougSalad 2 жыл бұрын
Idk how I missed this one when it dropped, but fantastic stuff. I totally understood it, I swear. That said, as soon as you said "music", I knew where this was going, and you did not disappoint.
@cocothepoopcatdog6351
@cocothepoopcatdog6351 7 жыл бұрын
I was literally just stalking your page today looking for more content.
@gafeht
@gafeht 7 жыл бұрын
Why is the compiler a toilet though?
@Architector_4
@Architector_4 7 жыл бұрын
Why not? He drew it really nicely, actually .-.
@tom7
@tom7 7 жыл бұрын
It is a totally obscure in-joke for a few friends, relating to this cartoon: www.cs.cmu.edu/~tom7/csnotes/spring03/compiler-time.gif
@gafeht
@gafeht 7 жыл бұрын
oh god lol
@Architector_4
@Architector_4 7 жыл бұрын
Woah, removing "compiler-time.gif" from the end of that link reveals more images... That my brain can't make any logical sense of... ._.
@TimoSluis
@TimoSluis 7 жыл бұрын
It takes in some shit, does some magical things with it, and still comes out as something that sort of still represents what came into it
@mranthonymills
@mranthonymills 4 жыл бұрын
I was just waiting for you to mention self-modifying code, such that you would transform any executable (executable A) into a printable executable (executable A') that would reproduce executable A in memory and then jump to it. But then I noticed that you explicitly forswore the use of self-modifying code, because that would be too easy or something. Hats off to you, my good sir, then!
@DeviousMalcontent2
@DeviousMalcontent2 2 жыл бұрын
I must give credence to this video for the exquisite and elaborate way that it plays itself out, 10/10.
@ChrisLeeW00
@ChrisLeeW00 7 жыл бұрын
I had the duck tales theme stuck in my head all day, and here you are with that shirt. Not important, coincidence is statistically inevitable.
@ccgarciab
@ccgarciab 3 жыл бұрын
This thing is a masterpiece at the level of the orobouros quine. Astounding
@alexismandelias
@alexismandelias 3 жыл бұрын
Best video I've seen in a while. Such a great mix of entertainment, jokes and information. 25 minutes passed so fast!
@YouB3anz
@YouB3anz 3 жыл бұрын
This channel is incredible. I will follow you forever
@odethebear
@odethebear 5 жыл бұрын
This is crazy! I love this project. (Edit after 10 min: Absolutely Love This)
@Onychoprion27
@Onychoprion27 7 жыл бұрын
You, sir, are a genius.
@cbrpnk
@cbrpnk 7 жыл бұрын
You're a cool person, I hope to see more content of this nature on your channel in the future. Awesome work!
@MinecraftEAT
@MinecraftEAT 7 жыл бұрын
I assume this is your SIGBOVIK entry and I'm extremely excited to watch about it. Thanks for posting -Tristan from your blog comments
@carchocolate93
@carchocolate93 7 жыл бұрын
I was so hoping that your paper would actually be the compiler
@KingJellyfishII
@KingJellyfishII 5 жыл бұрын
That is the hardest rickroll ever my friend.
@Jaksonthefox
@Jaksonthefox 2 жыл бұрын
INCREDIBLE! This is the kind of work that founds new words to describe the nature or kind of work. I feel like an executable, printable, fully paper-a-fileable thingie needs a new word to describe it.
@DanDeebster
@DanDeebster 3 жыл бұрын
I can't believe this video was 25 minutes long, it flew by. Great idea, execution and presentation. I need to up my geek game!
@thelegend8570
@thelegend8570 3 жыл бұрын
As soon as he said it would play music I knew what was coming.
@anferrr
@anferrr 3 жыл бұрын
16:00 I love how HIS notion her of bad things to execute in case the EIP goes out of program, are non printable things... Not scary system breaking instructions that could be somewhere there xD
@bobby3234
@bobby3234 7 жыл бұрын
Thanks for that bit about llvm c compiler, it's godsend right now. Always was curious about it, but never took time to properly learn it.
@jerrywbrice
@jerrywbrice 4 жыл бұрын
Thoroughly amusing. Explained in expert mode as well.
@thogameskanaal
@thogameskanaal 7 жыл бұрын
Science, mathematics and Hyrule
@lydianlights
@lydianlights 7 жыл бұрын
EDIT: SPOILERS STOP READING COMMENTS BEFORE THE VIDEO ... original comment: This has got to be the most intense, in-depth rick roll I've ever seen...
@killmepls7865
@killmepls7865 5 жыл бұрын
Yeah god damn im shook
@nightchicken3517
@nightchicken3517 3 жыл бұрын
Thank you for the warning
@kgallchobhair
@kgallchobhair 3 жыл бұрын
Way to spoil it for every mobile user :c
@voxelfusion9894
@voxelfusion9894 3 жыл бұрын
@@kgallchobhair your fault for reading comments before the video.
@Damaniel3
@Damaniel3 3 жыл бұрын
Yep. Ran it in DOSbox before I even watched the video - wasn't expecting that.
@shershahdrimighdelih
@shershahdrimighdelih 6 жыл бұрын
You have truly outdone yourself. So elegant.
@calcaware
@calcaware 5 жыл бұрын
This is so cool. Hard to find good content like this.
@darren8453
@darren8453 7 жыл бұрын
As a developer, I'm now wondering how often you ran this manually and rick-rolled yourself in the course of making this.
@tom7
@tom7 7 жыл бұрын
Not to mention the times I subconsciously rickrolled myself from having it stuck in my head and humming it...
@darren8453
@darren8453 7 жыл бұрын
suckerpinch now I have it stuck in my head again!!!
@MeinCouch123
@MeinCouch123 7 жыл бұрын
OH SHIT HE'S BACK
@AntonioBarba_TheKaneB
@AntonioBarba_TheKaneB 5 жыл бұрын
that piece of 8086 pinout and explanation of I/O ports brings back so many memories :)
@TheFalkon11
@TheFalkon11 Жыл бұрын
Only halfway through the video but I love that graph theory shows up here where you wouldn't really expect it to. Maybe it's pretty common when developing compiler, I don't have a ton of experience with that, but something about practical applications of graph theory is so intuitive and satisfying to me.
@IAMDonk
@IAMDonk 7 жыл бұрын
This video shows there's an overlap with printable ASCII and x86 binary. That's cool, but not entirely surprising. You've even shows how binary operations work, I feel most C programmers would already be familiar. Why haven't you shown anything about how you wrote an entire C compiler?
@tom7
@tom7 7 жыл бұрын
It's hard to know what subset of the work the audience will already be familiar with, so I just tried to pick a few interesting parts and weave a story around them while assuming as little as possible. C compilation is interesting and I could do a whole 5-hour video series on it, but it needs some background and is also pretty standard in this case. It's not until you get fairly low level that the constraints of the instruction set start causing problems.
@ThePharphis
@ThePharphis 6 жыл бұрын
Dude anything about compilation or low-mid level content is very good. I've just finished a microcomputing course so basically covered most of this material for the motorola 86k processor and that helped a lot. I watched this video last year when I knew virtually nothing, and there's quite the difference in understanding, even being unfamiliar with this version of assembly.
@DJDavid98
@DJDavid98 7 жыл бұрын
Longest set up for a Rick Roll I've seen
@jokr004
@jokr004 3 жыл бұрын
This is such a fun idea, I love it! Great explanation and presentation too
@GRAYgauss
@GRAYgauss 5 жыл бұрын
Holy rickroll batman! Excellent video. I pondered showing this to my family because of how well you described the compilation process and get into the meat of assembling without making it complicated. Great stuff.
@johnpetersen5341
@johnpetersen5341 7 жыл бұрын
I loved this! I have no experience with assembly but I understood everything perfectly. Quick question, when you were implementing OR, you had (a AND b) + (a XOR b)... why not (a AND b) XOR (a XOR b)? I'm sure addition is needed elsewhere, but when you want the OR of two values that are bitwise exclusive, XOR seems like a natural choice. Also - can you make a quine in your printable x86?
@dtoadq
@dtoadq 7 жыл бұрын
You can not make a quine as there is no way to print, INT 21 is inaccessible. Well, it is only accessible one time throughout the lifetime of your program, and it's necessary to quit. I assume he used + because it segways into the next part, as in the paper he jumps into addition immediately after explaining how to implement or.
@tom7
@tom7 7 жыл бұрын
Yeah, quine was my first thought; it would have been a very elegant knot. It might be possible to print using some other tricks (or direct software access), but I couldn't figure it out before the deadline. Id' also have to grapple with the difficulties with assembling (due to instructions that change size with different immediates), which could maybe make solving for a quine very hard. I actually hadn't noticed the XOR trick (clearly better), but + is a nice segue as AODQ says, so I'm kinda glad I didn't. :)
@johnpetersen5341
@johnpetersen5341 7 жыл бұрын
He said exactly that a day before you posted... and it's 'segue'.
@dtoadq
@dtoadq 7 жыл бұрын
He did? Didn't see it. Well I suppose he said everything in the paper itself. And yea it's segue.
@erikkonstas
@erikkonstas 7 жыл бұрын
When the exit instruction is cya!
@az0r22
@az0r22 5 жыл бұрын
kompiouter kai arithmoi mas fagane ti zwh na poume
@HelloKittyFanMan.
@HelloKittyFanMan. 5 жыл бұрын
What about it?
@anonymouscommentator
@anonymouscommentator 2 жыл бұрын
This guy put the most effort ever into a rickroll in a fun and creative way. I love it.
@michaelg3301
@michaelg3301 7 жыл бұрын
Amazing! Thanks for another humorous and fascinating video, Tom!
@kevinpaz3142
@kevinpaz3142 7 жыл бұрын
My only question is this: how come everyone and their mother doesn't know about you?!?!
@tom7
@tom7 7 жыл бұрын
Um; like, comment, subscribe, google + etc.
@bonbonpony
@bonbonpony 5 жыл бұрын
Doesn't it apply for all smart people though? Mainstream meadia are a parade of stupidity these days, figures.
@Milkakuh
@Milkakuh 7 жыл бұрын
Now I want to know what is the minimum amount of commands to have full functionality.
@verymuchgoodgaming132
@verymuchgoodgaming132 7 жыл бұрын
Peter GANS there are some interesting hypothetical computers with only 1 instruction, and are still turing complete 👌en.m.wikipedia.org/wiki/One_instruction_set_computer
@Darwin226
@Darwin226 7 жыл бұрын
Check out movfuscator github.com/xoreaxeaxeax/movfuscator
@Rabarberium
@Rabarberium 7 жыл бұрын
A lot of them, apparently. There's a Defcon talk about the "Movfuscator" which implements x86 with the Mov instruction, and while it was a while ago that I watched it, I think he achieved full functionality. He mentions a couple of other single instructions that have the same property.
@puffles234
@puffles234 7 жыл бұрын
Any instruction that can be used in a way to simulate a MOV can be used like the movfuscator (also, the movfuscator cheats by abusing interrupts and using bogus mov instructions to trigger interrupts)
@Milkakuh
@Milkakuh 7 жыл бұрын
Maybe I did not understand that right, but we still need alot of different integers for the arguments which suckerpinch restricted to only printable ones.
@tamsanh
@tamsanh 7 жыл бұрын
Excellent, man. Loved all of the puzzle solving here, great work.
@akaltar
@akaltar 6 жыл бұрын
I enjoyed this video way too much. More than expected. You hit the sweet spot in keeping both knowledgeable and newbie audiences, good job. Take my sub.
@nuckm
@nuckm 7 жыл бұрын
Fuck yes, new content
@BradenBest
@BradenBest 5 жыл бұрын
16:56 That's not a typo (unless you'd like to show a counterexample). "fi" is a common way to end if statements. It even appears in bash (bourne again shell). Look, there's three of them. I do seem to see an error in the second "fi", though. It's indented incorrectly which makes the flow confusing. It should be indented eight more spaces inward to match the "IF EIP < CS.Base O..." line. Actually, looking at it again, the shown psuedocode is a huge mess. Given what I can make of the syntax without any context, and removing ugly GNU-isms[1], it should be: IF condition THEN EIP := EIP + SignExtend(DEST); IF OperandSize = 16 THEN EIP := EIP AND 0000FFFFH; FI; (* IF OperandSize = 16 *) ELSE (* indented back for clarity; matches previous IF block; implied: OperandSize = 32 *) IF EIP < CS.Base OR EIP > CS.Limit THEN (* Logical and Bitwise operators using the same keywords? This language must be strongly-typed. *) #GP FI; (* IF EIP < CS.Base ... *) FI; (* ELSE (IF OperandSize = 16) *) FI; (* IF condition *) 1. GNU-ism: Horrible formatting choices made by maintainers of GNU software, e.g. using tabs instead of spaces, or putting the bracket on the next line and indenting it between the parent statement and body instead of aligning it with the parent or leaving it on the same line, which has the effect of making code bleed together and making it much harder to tell what indentation level any given line is at. And that latter example is usually combined with two-space indents or tabs. Example: if(cond) { do_stuff(); } Now imagine 5,000 lines of that and realize that GNU is not afraid to nest 6+ levels deep or write 400-line functions. Oh yeah, it's bad.
@yaroslavpanych2067
@yaroslavpanych2067 5 жыл бұрын
No dude, you actually failed here :D Why do you assume he is to aware of meaning of FI? He spent probably hundreds hours staring in this book. In this case, that particular FI in question is a error, it mustn't be there. Look into recent intel instruction set reference, you will find exactly this description, but correct - without first FI. It is just editor mistake.
@BradenBest
@BradenBest 5 жыл бұрын
@@yaroslavpanych2067 So what you're saying is that not only is it my fault that he pointed to the FI, called it a typo, and didn't clarify what he was referring to, but I was somehow supposed to know, without any context, that by "typo", he was referring to a structural logic error and not a spelling/indentation error? So it's safe to assume, then, that if I show you a random snippet of code without any context, I can expect you to know everything about that snippet of code just from looking at it? Well that's just unrealistic.
@BradenBest
@BradenBest 5 жыл бұрын
@@yaroslavpanych2067 Or are you saying that the FI is an error because it precedes the matching ELSE? That is an unreasonable assumption to make without a visible counterexample to show that self-consistency has been compromised. There is no other example in that snippet of an if/else compound, so it's safe to assume that 'FI' is analogous to '}' from C-like languages. What I am claiming: IF cond THEN ... FI; IF cond THEN ... FI; ELSE ... FI; are analogous to if (cond) { ... } if (cond) { ... } else { ... } and are thus perfectly valid. And I claim this without the context of the entire book to show any counter examples. There is only the snippet in the video, and what is visible in that moment in time. Therefore, this is what I can _reasonably_ conclude with the given information. The problem here is that the guy in the video does NOT attempt to show any counter examples or explain why what he's pointing at is a typo. Instead, he just claims its a typo, and, again without any context, all I can _reasonably_ conclude with the given information is that he must be unfamiliar with "fi" and just said it was a typo in the moment. You, on the other hand, are making conclusions that may be drawn from outside information or speculation, conclusions that are specifically not supported by the visible snippet. Therefore, it is unreasonable to claim that I "failed", just as it would be unreasonable to claim that Einstein "failed" in the event that some future discovery demonstrates a massive hole in general relativity. In fact, given what can be known from the visible snippet, I can go so far as to say that my assertion was _ostensibly correct,_ as the innermost IF lacks a matching FI, which contradicts the rest of the visible pseudocode, and that therefore _you_ are the one who "failed". I'm not claiming you're wrong, but I _am_ claiming that your expectations are unreasonable. That said, I went ahead and edited the OP to be less matter of fact since I was also guilty of speculation.
@tom7
@tom7 5 жыл бұрын
@@BradenBest The typo is that the FI; should not be there. It isn't used to end THEN clauses in the book (I think this syntax would be problematic because it would then be ambiguous whether a following ELSE went with that IF or a containing one, which seems contrary to the purpose of using FI in the first place). I wasn't trying to explain the error in the video; I was simply trying to make the case that this stuff is tricky because even the official reference manuals are fallible.
@BradenBest
@BradenBest 5 жыл бұрын
@@tom7 As crappy as 'IF THEN FI ELSE FI' would be (versus IF THEN ELSE FI) design-wise, I have to disagree on the point about ambiguity: "I think this syntax would be problematic because it would then be ambiguous whether a following ELSE went with that IF or a containing one[...]" There is no ambiguity here. This is what I assume you must be thinking: IF A THEN IF B THEN do_thing_ab FI ELSE (does this match the inner or outer if?) do_thing_a FI ... But again, if FI is analogous to '}', and ends both if and else statements, then it can only mean one thing. IF A THEN (nest level 0->1) IF B THEN (1->2) do_thing_ab FI (2->1) ELSE *(matches inner if)* (1->2) do_thing_a FI (2->1) FI (ends outer if) (1->0) It's crappy, but it's not ambiguous. IF A THEN IF B THEN do_thing_ab FI ELSE (matches inner if) do_thing_a FI FI IF A THEN IF B THEN do_thing_ab FI FI ELSE (matches outer if) do_thing_c FI And the same things but with the THEN's replaced with {, FI's replaced with }, and the implicit open statement on each ELSE replaced with {: IF A { IF B { do_thing_ab } ELSE { do_thing_a } } IF A { IF B { do_thing_ab } } ELSE { do_thing_c }
@MCLooyverse
@MCLooyverse 2 жыл бұрын
This is honestly a master-piece.
@gergonagy846
@gergonagy846 3 жыл бұрын
I'm just so astonished by this... Really impressive.
NaN Gates and Flip FLOPS
19:08
suckerpinch
Рет қаралды 272 М.
Uppestcase and Lowestcase Letters  [advances in derp learning]
24:13
О, сосисочки! (Или корейская уличная еда?)
00:32
Кушать Хочу
Рет қаралды 7 МЛН
Bro be careful where you drop the ball  #learnfromkhaby  #comedy
00:19
Khaby. Lame
Рет қаралды 35 МЛН
Harder Drive: Hard drives we didn't want or need
36:47
suckerpinch
Рет қаралды 1,6 МЛН
Automatic 3Dification of Nintendo games: The glEnd() of Zelda
16:02
30 Weird Chess Algorithms: Elo World
42:36
suckerpinch
Рет қаралды 831 М.
Unlikely bikes: The Unibicle
13:14
suckerpinch
Рет қаралды 232 М.
Computer program that learns to play classic NES games
16:18
suckerpinch
Рет қаралды 2,1 МЛН
Why it Was Almost Impossible to Put a Computer in Space
17:20
Linus Tech Tips
Рет қаралды 135 М.
Anagrams, but where you can break apart letters: "Anagraphs"
12:04
suckerpinch
Рет қаралды 233 М.
The world's worst video card?
32:47
Ben Eater
Рет қаралды 6 МЛН
Apple, как вас уделал Тюменский бренд CaseGuru? Конец удивил #caseguru #кейсгуру #наушники
0:54
CaseGuru / Наушники / Пылесосы / Смарт-часы /
Рет қаралды 4,3 МЛН
😱НОУТБУК СОСЕДКИ😱
0:30
OMG DEN
Рет қаралды 2,2 МЛН