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

Поделиться
HTML-код
  • Опубликовано: 27 сен 2024

Комментарии • 1,1 тыс.

  • @moth.monster
    @moth.monster 6 лет назад +2099

    "printable x86" is actually the best esoteric programming language

    • @nokkonokko
      @nokkonokko 4 года назад +71

      Good luck golfing with it...

    • @want-diversecontent3887
      @want-diversecontent3887 4 года назад +31

      I don't know x86 but I'll try with 6502

    • @tissuepaper9962
      @tissuepaper9962 2 года назад +96

      @@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 Год назад +9

      @ilkemincraft753 and then actually perform the play

    • @ashleybyrd2015
      @ashleybyrd2015 Год назад +3

      @@tissuepaper9962 what defines a useful program? because it certainly seems hard

  • @jdlenl
    @jdlenl 6 лет назад +819

    i love how you explained assembly without mentioning assembly

    • @Mmouse_
      @Mmouse_ Год назад +48

      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 7 месяцев назад

      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 5 месяцев назад +5

      ​@@Mmouse_It's somehow relieving. Even the best code I write ends up as unintelligble gibberish so whatever lol

    • @xavierrodriguez2463
      @xavierrodriguez2463 3 месяца назад +1

      ​@@Mmouse_just because something is meant to be human readable doesn't mean it's good, and just because something is ugly doesn't mean it's bad

    • @xavierrodriguez2463
      @xavierrodriguez2463 3 месяца назад

      Imma be honest there's something incredibly beautiful about how a computer actually functions at a low level, abstract languages are cool but imo they're not more beautiful than machine code

  • @therealfranklin
    @therealfranklin 7 лет назад +1583

    "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 года назад +34

      3:53

    • @dragonridertechnologies
      @dragonridertechnologies Год назад +8

      Well, yes, but it's still better than the other UTF representations.

    • @gloverelaxis
      @gloverelaxis Год назад +9

      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 Год назад +3

      ​@@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 7 месяцев назад

      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 лет назад +2537

    this video was good up until 25:03 at which point it was a masterpiece

    • @otesunki
      @otesunki 6 лет назад +20

      haha

    • @TheJamie109
      @TheJamie109 5 лет назад +112

      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 лет назад +26

      My jaw dropped when it revealed the infamous image! :D :D LOL Great job! Amazing video and research! :)

    • @avieus
      @avieus 5 лет назад +16

      And better than the masterpiece was at 25:42

    • @FosukeLordOfError
      @FosukeLordOfError 3 года назад +21

      I saw it coming at the last second, and I loved it. I wept tears of joy.

  • @magneticflux-
    @magneticflux- 7 лет назад +1330

    14:38 "This kind of fractal structure shows up a lot in computer science and mathematics and Hyrule."

    • @porky1118
      @porky1118 6 лет назад +31

      I didn't hear that the first time, even if I didn't skip that part ^^

    • @EnderLord99
      @EnderLord99 2 года назад +7

      I mean, he's not wrong.

    • @MCRuCr
      @MCRuCr 2 года назад +14

      AND drinking games

    • @lollllloro
      @lollllloro 2 года назад +14

      I wasn't sure it was "Hyrule" and I brushed the word off as some word I don't know.

    • @vieilatome2257
      @vieilatome2257 Год назад +3

      Only link can defeat ganon

  • @woulg
    @woulg Год назад +194

    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  Год назад +76

      Thank you! I'm content with becoming a vague memory in a decade :)

    • @kasparpoland9803
      @kasparpoland9803 Год назад +6

      Couldn't have put it into words any better myself. It's really inspiring :)

    • @viniciusmv7727
      @viniciusmv7727 8 месяцев назад +4

      ​@@kasparpoland9803 That's a great pun considering the video

  • @BludtheThursty
    @BludtheThursty 7 лет назад +296

    "This kind of fractal structure shows up a lot in computer science, mathematics, and Hyrule"
    Gold

  • @FishamanP
    @FishamanP 7 лет назад +633

    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 лет назад +460

      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 года назад +33

      @@tom7 could you have a macro that does it?

    • @ccgarciab
      @ccgarciab 3 года назад +82

      @@waxt0n well, he has the compiler that he described in the video

    • @randomblogger2835
      @randomblogger2835 3 года назад +1

      @@tom7 make .coms instead of .exes.

    • @__lasevix_
      @__lasevix_ 2 года назад +1

      @@tom7 pay someone to do it

  • @car-keys
    @car-keys 7 лет назад +321

    I've played enough TIS-100 to know how impressive this is.

    • @MultipleObjectSelector
      @MultipleObjectSelector 6 лет назад +18

      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 лет назад +12

      GET SHENZHEN IO
      ALSO EXAPUNKS LOOKS FUN
      MHRD TOO

    • @BradenBest
      @BradenBest 5 лет назад +10

      @@unflexian MHRD is hard as shit. The furthest I could get without looking up schematics was the full-adder.

    • @Huntracony
      @Huntracony 5 лет назад +9

      @@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 Год назад +2

      This video made me think of that game. I suck at it so bad. Was better at Exapunks.

  • @car-keys
    @car-keys 7 лет назад +127

    Tom, as a young CS major, this channel is incredibly interesting. Thanks for all you do!

    • @tom7
      @tom7  7 лет назад +27

      You're welcome and thanks for saying so! :)

  • @vinculaomega5283
    @vinculaomega5283 7 лет назад +620

    This was the most elaborate Rick Roll I've ever seen. You've earned my like and subscribe, good sir!

    • @davidmikan7925
      @davidmikan7925 3 года назад +22

      you're kinda spoiling it for other people since it’s the top comment :/

    • @lucas29476
      @lucas29476 3 года назад +11

      @@davidmikan7925 tbh RUclips mobile app is to blame for displaying the top comment prominently. This functionality is included in the past few months

  • @TerjeMathisen
    @TerjeMathisen 3 года назад +135

    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.

    • @yairmorgenstern416
      @yairmorgenstern416 3 месяца назад +2

      Sounds like a video in of itself :)

    • @TerjeMathisen
      @TerjeMathisen 3 месяца назад +1

      @@yairmorgenstern416 The part I'm really proud of is that I wrote that program on paper only, while on an Easter ski break, and it all worked as soon as I typed it in. 🙂I did bring a printout of all the legal opcodes/opcode combinations.

  • @javierbg1995
    @javierbg1995 7 лет назад +85

    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 лет назад +20

      Thanks for watching! :)

  • @Terbium23
    @Terbium23 7 лет назад +874

    Did I just got rickrolled?

    • @tarberd
      @tarberd 7 лет назад +20

      I... guess .... ??? I mean ... I'm confused ...

    • @niklasgransjen684
      @niklasgransjen684 7 лет назад +26

      In a 25 min video, even.

    • @batfan1939
      @batfan1939 6 лет назад +11

      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 лет назад +20

      The most elaborate rick roll ever!

    • @SreenikethanI
      @SreenikethanI 6 лет назад +2

      wait this comment has 256 likes... I don't wanna spoil it...

  • @evinmathai
    @evinmathai Год назад +22

    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.

  • @TheUnknownsShow
    @TheUnknownsShow 7 лет назад +30

    This is still my favorite RUclips 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 лет назад +9

      thank you (:

  • @TheMaplestrip
    @TheMaplestrip 7 лет назад +72

    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 лет назад +20

      aw thanks :)

    • @a_grin_without_a_cat
      @a_grin_without_a_cat 3 месяца назад +1

      I recently saw some Zelda speedrun that uses the fucking arbitrary code execution to teleport through levels. It is slow and tedious to set up, it is extremely boring to watch (that's why it lives in a separate category now), but on a conceptual level it is just amazing.

  • @gkcs
    @gkcs 7 лет назад +693

    This is just brilliant! Do you have any source for your inspiration, or is it just plain craziness?

    • @tom7
      @tom7  7 лет назад +449

      Thanks! :) I just write down silly ideas I have, then spend months executing them...

    • @ster2600
      @ster2600 3 года назад +92

      @@tom7 I wish I was as dedicated to my actual life as you are to these seemingly pointless yet fascinating projects

    • @imperatusmauser7096
      @imperatusmauser7096 3 года назад +4

      @Ibrahim Braydon wow, bots

    • @devhypercoder2522
      @devhypercoder2522 3 года назад +2

      @@imperatusmauser7096 and even a reply bot lol

    • @imperatusmauser7096
      @imperatusmauser7096 3 года назад

      @@devhypercoder2522 I've been seeing these bots everywhere, especially in CodeVault's videos

  • @joshnoble07
    @joshnoble07 7 лет назад +227

    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.

  • @KyleNally
    @KyleNally 7 лет назад +58

    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!

  • @SW33wNecie
    @SW33wNecie 5 лет назад +1

    This dude just straight up did a 25 minute video explaining assembly language just to fucking rickroll people.
    You're a god damn genius, Tom.

  • @xeostube
    @xeostube 4 года назад +6

    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 года назад +9

      The important thing is that the RIGHT 150,000 people see it!

  • @thomasgraham5840
    @thomasgraham5840 Год назад +2

    Honestly, between this and the running video, you give me a clear impression of what a person can get done in a single lifetime

  • @IAmTehAg
    @IAmTehAg 7 лет назад +45

    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 лет назад +9

      Aw thanks, I'm glad you enjoyed it :)

  • @rigen97
    @rigen97 11 месяцев назад +1

    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.

  • @JuliaC-sp5qk
    @JuliaC-sp5qk 3 года назад +8

    the stuff you make consistently makes me want to cry while also being extremely impressed

  • @asp-uwu
    @asp-uwu 7 лет назад +279

    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 лет назад +183

      Yes, and good eye. Somehow I missed this option. Plus is a nice segue in the presentation, at least.

    • @asp-uwu
      @asp-uwu 7 лет назад +32

      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 лет назад +88

      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 лет назад +26

      Hmmm, seems tedious. But then again, the process for making everyone of your entries so far does!
      Great stuff, man!

    • @rich1051414
      @rich1051414 5 лет назад +24

      @@tom7 "LLVMNOP" sounds like your toddler confidently trying to finish your sentence.

  • @mekafinchi
    @mekafinchi 2 года назад +18

    you terrify me

  • @lunafoxfire
    @lunafoxfire 7 лет назад +519

    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 лет назад +7

      Yeah god damn im shook

    • @nightchicken3517
      @nightchicken3517 3 года назад +7

      Thank you for the warning

    • @kgallchobhair
      @kgallchobhair 3 года назад +30

      Way to spoil it for every mobile user :c

    • @voxelfusion9894
      @voxelfusion9894 3 года назад +2

      @@kgallchobhair your fault for reading comments before the video.

    • @Damaniel3
      @Damaniel3 3 года назад +1

      Yep. Ran it in DOSbox before I even watched the video - wasn't expecting that.

  • @francesco9703
    @francesco9703 7 лет назад +18

    These videos are the most original programming videos on RUclips. 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 :)

  • @entropyzero5588
    @entropyzero5588 6 лет назад +82

    Awesome stuff!
    Though, quick question: Wouldn't (A xor B ) xor (A and B) also net you (A or B) ? ;)

    • @jurjenbos228
      @jurjenbos228 2 года назад +5

      Of course

    • @MatheusAugustodaSilva
      @MatheusAugustodaSilva 2 года назад +15

      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 года назад +12

      @@MatheusAugustodaSilva well, cutting in half the number of operations needed for a simple AND is kind of a big deal

  • @evgenyaleksandrov1206
    @evgenyaleksandrov1206 5 лет назад +3

    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!

  • @scottsmith4204
    @scottsmith4204 7 лет назад +8

    Finally, only so many times i can watch your old stuff.

  • @TRex-fu7bt
    @TRex-fu7bt Год назад

    I’m doing that thing every year where I rewatch all your videos and the Numberphile paper always delights me.

  • @jonthemon4
    @jonthemon4 7 лет назад +73

    See you again in 6 months

    • @tom7
      @tom7  7 лет назад +88

      hehe cya!

    • @AdrianCastravete
      @AdrianCastravete 7 лет назад +13

      OMG! Hahahaha, That totally “terminated” the thread.

    • @ThePharphis
      @ThePharphis 6 лет назад

      Hi there

  • @iamthelowercase
    @iamthelowercase Год назад +1

    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.

  • @xwcg
    @xwcg 7 лет назад +6

    I have no words. This is incredibly amazing.

  • @huh5950
    @huh5950 4 года назад +1

    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

  • @A1rPun
    @A1rPun 3 года назад +1

    The compiler analogy got me, every detail in this video is awesome.

  • @succulentcombustiblebacon8487
    @succulentcombustiblebacon8487 Год назад +3

    Don't worry about the pace.
    I like this setup. A frosty pint, a drawing board, some pleasantly scratchy markers, and x86 assembly explained by someone who still cares. It's perfect.
    keep doin the thing
    also your doodles would kick my doodles dad's ass.

  • @mranthonymills
    @mranthonymills 5 лет назад

    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!

  • @contrl31
    @contrl31 7 лет назад +100

    At 9:10 ish, why can't we do (A & B) XOR (A XOR B)?

    • @gafeht
      @gafeht 7 лет назад +1

      (1000) XOR (0110) = 1110...
      Seems to do the same thing in the same amount of steps (3)

    • @Architector_4
      @Architector_4 7 лет назад +12

      +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 лет назад +1

      +Architector #4
      Ah, you're right. I missed that the second time through.
      Nice thinking +contrl31

    • @tom7
      @tom7  7 лет назад +124

      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 лет назад +2

      Don't worry.
      (I spotted that too.)

  • @sammikinsderp
    @sammikinsderp Год назад

    The most elaborate rick roll I've ever been a victim of. Well played, Sir.

  • @ChrisLeeW00
    @ChrisLeeW00 7 лет назад +4

    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.

  • @MeriaDuck
    @MeriaDuck 3 года назад +1

    Just the very idea that printable characters form a turing complete machine language on the x86, wow 😲. And then building an assembler for it, just wow. There must've been quite a few more puzzles to solve.

  • @SuperNintendawg
    @SuperNintendawg 7 лет назад +4

    YOU'RE BACK! Excited to watch this video. I was kind of hoping for a unibicle kickstarter video but this will do I guess.

  • @AntonioBarba_TheKaneB
    @AntonioBarba_TheKaneB 5 лет назад +1

    that piece of 8086 pinout and explanation of I/O ports brings back so many memories :)

  • @cocothepoopcatdog6351
    @cocothepoopcatdog6351 7 лет назад +5

    I was literally just stalking your page today looking for more content.

  • @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.

  • @chaosvisum9167
    @chaosvisum9167 7 лет назад +39

    Very impressive presentation. You packed a fantastic amount of information and creativity into 25 minutes?

    • @tom7
      @tom7  7 лет назад +10

      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 года назад +1

      @@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

  • @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!

  • @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.

  • @carchocolate93
    @carchocolate93 7 лет назад +4

    I was so hoping that your paper would actually be the compiler

  • @DeviousMalcontent2
    @DeviousMalcontent2 2 года назад

    I must give credence to this video for the exquisite and elaborate way that it plays itself out, 10/10.

  • @darren8453
    @darren8453 7 лет назад +13

    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 лет назад +18

      Not to mention the times I subconsciously rickrolled myself from having it stuck in my head and humming it...

    • @darren8453
      @darren8453 7 лет назад +1

      suckerpinch now I have it stuck in my head again!!!

  • @streetos
    @streetos 2 года назад +1

    I loved every second of this. Very well explained demonstration of the most useless yet fascinating thing to do with your paper.

  • @odethebear
    @odethebear 5 лет назад +3

    This is crazy! I love this project. (Edit after 10 min: Absolutely Love This)

  • @KingJellyfishII
    @KingJellyfishII 3 года назад +1

    LLVMNOP is the funniest acronym I've come across thus far

  • @thelegend8570
    @thelegend8570 3 года назад +4

    As soon as he said it would play music I knew what was coming.

  • @golarac6433
    @golarac6433 7 лет назад +2

    I've seen kinda similar thing done on C64, where the BASIC code (which of course you can print) would generate the assembly code and execute it. This is way more advanced though. I like it a lot !

  • @anferrr
    @anferrr 3 года назад +4

    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

  • @tacitus_
    @tacitus_ 2 года назад +1

    As soon as you mentioned it could play music, I knew what was coming.

  • @thogameskanaal
    @thogameskanaal 7 лет назад +10

    Science, mathematics and Hyrule

  • @patrickseelye1485
    @patrickseelye1485 3 года назад

    I had this going in the background, and started to hear music and pay attention. 25 minutes for the most beautiful of rick rolls was worth it

  • @MeinCouch123
    @MeinCouch123 7 лет назад +4

    OH SHIT HE'S BACK

  • @yorgle
    @yorgle 7 лет назад +1

    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! :)

  • @Onychoprion27
    @Onychoprion27 7 лет назад +3

    You, sir, are a genius.

  • @joda7697
    @joda7697 10 месяцев назад

    I think i finally understand what a compiler does thanks to you. Dang. Impressive! I'm not even a CS student (rather Physics) but i always wondered how the jump from written source code to binary logic gates works.

    • @tom7
      @tom7  10 месяцев назад

      That's great! I think it's one of the best stories of computers, especially when the compiler compiles itself :)

  • @Kolop315
    @Kolop315 3 года назад +1

    the whole video can be described with "bruh", but the ending specifically be like "bruuuuuuuuuuuuuh"

  • @DJDavid98
    @DJDavid98 7 лет назад +7

    Longest set up for a Rick Roll I've seen

  • @renxula
    @renxula 7 лет назад +2

    Excellent video, good sir! I know a thing or two about programming and stuff, but you managed to avoid spending too much time explaining the basics, and concentrated on the good stuff instead. So good job on that, and on creating the (mostly useless) compiler itself as well!

  • @calcaware
    @calcaware 5 лет назад +1

    This is so cool. Hard to find good content like this.

  • @MisterMajister
    @MisterMajister 2 года назад +1

    paper -bluehair is my favorite song in this executable paper record album. paper -plumber is a classic though!

  • @impetus444
    @impetus444 2 года назад

    I watched the entire video even though 70% of this stuff is way over my head. Thanks for adding the super creepy photo at the end. Subscribed

  • @MCLooyverse
    @MCLooyverse 2 года назад

    This is honestly a master-piece.

  • @BradenBest
    @BradenBest 5 лет назад +7

    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 лет назад +2

      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 лет назад +10

      @@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 лет назад +1

      @@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
      }

  • @moiquiregardevideo
    @moiquiregardevideo 7 лет назад +1

    Interesting exercise. Many practical applications actually use similar restrictions or start with similar rules. The power PC emulator for x86 Virtual PC, for example, was translating x86 instructions to larger power PC equivalent, adjusting every reference to address to the new expended memory range.

  • @mattlarghi
    @mattlarghi 7 лет назад

    I probably look forward to these videos more than anything on youtube

    • @tom7
      @tom7  7 лет назад

      awesome :) Sorry I'm so slow!

  • @shershahdrimighdelih
    @shershahdrimighdelih 6 лет назад

    You have truly outdone yourself. So elegant.

  • @bobdavelisafrank_4850
    @bobdavelisafrank_4850 Год назад +1

    at 9:04, instead of using (A and B) + (A xor B) and needing to implement addition to do the 'or' function, you could also just do (A and B) xor (A xor B)! Since the 'and' of the two numbers never has a 1 in the same place as the 'xor' of the two numbers, 'xor' gives you the behavior you wanted from 'or' to combine the two.

  • @kleinesfilmroellchen
    @kleinesfilmroellchen 3 года назад +1

    I watched the nerdiest video on youtube only to get rickrolled at the very end. I think I should sleep now.

  • @Milkakuh
    @Milkakuh 7 лет назад +6

    Now I want to know what is the minimum amount of commands to have full functionality.

    • @verymuchgoodgaming132
      @verymuchgoodgaming132 7 лет назад +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 лет назад +6

      Check out movfuscator github.com/xoreaxeaxeax/movfuscator

    • @Rabarberium
      @Rabarberium 7 лет назад +5

      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 лет назад +3

      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 лет назад +3

      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.

  • @ptdecker
    @ptdecker 6 лет назад

    I’m glad I watched this all the way to the end... it saved me from posting a snarky comment about doing something with your life. But, however much of it you wasted on this was fully worth it.

  • @nuckm
    @nuckm 7 лет назад +4

    Fuck yes, new content

  • @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.

  • @kevinpaz3142
    @kevinpaz3142 7 лет назад +13

    My only question is this: how come everyone and their mother doesn't know about you?!?!

    • @tom7
      @tom7  7 лет назад +10

      Um; like, comment, subscribe, google + etc.

    • @bonbonpony
      @bonbonpony 5 лет назад +1

      Doesn't it apply for all smart people though? Mainstream meadia are a parade of stupidity these days, figures.

  • @insidetrip101
    @insidetrip101 5 лет назад +1

    brilliant.
    I kinda got lost a bit on the matrix about how to get from one number to another number. I have an idea at what you're getting at, but I'll have to watch that a second time to really get an understanding of the fractal like structure of jumps from one number to another.

  • @johnrehwinkel7241
    @johnrehwinkel7241 Год назад

    I read that paper years ago and discovered your videos a few days ago, so this was a revelation. Also you don't need ADD, you could just (A AND B) XOR (A XOR B) for OR.

  • @legionmammal9785
    @legionmammal9785 7 лет назад +7

    Next problem: Making an executable PDF paper (Might be a bit easier, though, if metadata steams could be a thing; they wouldn't have these limitations!)

    • @Cutest-Bunny998
      @Cutest-Bunny998 5 лет назад

      PDF already has JavaScript support though

    • @bonbonpony
      @bonbonpony 5 лет назад

      I once saw one dude using some standard encryption algorithm to decrypt an image with the RSA logo into another image that was the NSA logo :q

  • @Kopigan
    @Kopigan 3 года назад

    This man is genius. I feel quite sad that I can honor it with only one like.

  • @123sleepygamer
    @123sleepygamer Год назад

    I'm a hardware/networking guy, so half of this video was alien tongues but damn was it a great video. Every video you make is unique and special, in a sea of saturation. Keep doing what you are doing.

  • @erikkonstas
    @erikkonstas 7 лет назад +9

    When the exit instruction is cya!

    • @az0r22
      @az0r22 5 лет назад

      kompiouter kai arithmoi mas fagane ti zwh na poume

    • @HelloKittyFanMan.
      @HelloKittyFanMan. 5 лет назад

      What about it?

  • @PaulHobbs23
    @PaulHobbs23 3 года назад +1

    I am simply blown away.

  • @YouB3anz
    @YouB3anz 3 года назад +1

    This channel is incredible. I will follow you forever

  • @soundguydon
    @soundguydon 5 лет назад +2

    On some level I do understand what you're talking about, but understanding it and being able to *use* that understanding are different things. I do not know how to *use* the knowledge, sadly, but I watched the entire video because I was absolutely fascinated!
    And then... you RickRolled me... :-P
    Very interesting video!!!!

  • @MDchan
    @MDchan 5 лет назад

    It's quite a neat video.
    I was doing assembly DOS programming out of curiosity.
    Have you noticed, that under DOS youre CPU is running 100%? This is because the BIOS INT 0x16 AH=0 function is polling the BIOS keyboard buffer for data and DOS INT 0x21 uses this BIOS interrupt.
    You can write a program (driver) to correct this.
    When a key is pressed, a make hardware interrupt is generated, when it is released a break hardware interrupt is generated.
    This all calls the IRQ 1, or INT 9 handler which processes the make interrupts, discards the break interrupt, and translates the scancode to ASCII and puts it into the BIOS keyboard buffer.
    So how to do a driver? First the format is the standard .com dos format. It is the simplest.
    Define a label (entry point) for your int9 handler. Modify the IVT so that your handler will be called on keypress. Enter a HLT loop. This saves CPU power.
    When a keypress occurs, your int9 handler will be called. Read out the scancode from the hardware, use the BIOS function to translate it to ascii and write it to the bios buffer. Then do an IRET and this will return execution to the HLT loop.
    Simple, yet effective.
    Or you can modify the INT 0x16 IVT to point to your handler, push the old IVT CS:IP to stack, enter a HLT loop, then after a ketpress INT 0x16 will immediately find the char in the buffer.

  • @CoryMck
    @CoryMck 5 лет назад +10

    • "Hard mode"
    • "×86"
    Choose one

  • @cbrpnk
    @cbrpnk 7 лет назад +3

    You're a cool person, I hope to see more content of this nature on your channel in the future. Awesome work!

  • @SuperNintendawg
    @SuperNintendawg 7 лет назад +3

    hey, isn't kiloBYTES represented by kB? because you wrote kb. otherwise, fascinating

    • @Reecer77
      @Reecer77 7 лет назад +8

      That was a BIT confusing, but I understand the importance of the compromises one must make to write in friendly all-lowercase text.

    • @SuperNintendawg
      @SuperNintendawg 7 лет назад

      Reecer77 nice one bro

    • @tom7
      @tom7  7 лет назад +4

      Yes, according to some standards--but you'll also see plenty of people using kb colloquially. (Also if we go down this road we'll also need to distinguish between kilo- and kibi-, so kiB?)

    • @SuperNintendawg
      @SuperNintendawg 7 лет назад

      suckerpinch TIL! great work again

  • @stuartwhiteley6762
    @stuartwhiteley6762 7 лет назад +2

    so the second time you drew the toilet i was like.. wait a minute is this a troll. I wached all the way to the end and was not disappointed.