13 ms·
Memories – 256 bytes demo winner of Revision 2020
- guiambros 7y agoThe source code really looks like black magic. It's incredible they were able to cram the tunnel effect into 64 bytes [1]. The entire video is here [2], if you just want to watch the final product. EDIT: link fixed. [1] https://www.pouet.net/prod.php?which=85227 https://www.pouet.net/prod.php?which=85227 [2] https://www.youtube.com/watch?v=Imquk_3oFf4 https://www.youtube.com/watch?v=Imquk_3oFf4
- nrr 7y agoNo, go fire up DOSBox and watch it in realtime! Watching demos on YouTube takes away a lot from the spirit of what makes productions like this one special. Also, your Pouët link is wrong. I think you actually meant https://www.pouet.net/prod.php?which=85227 https://www.pouet.net/prod.php?which=85227 instead.
- a1369209993 7y ago> I think you actually meant https://www.pouet.net/prod.php?which=85227 https://www.pouet.net/prod.php?which=85227 instead. For reference, the original was https://www.pouet.net/prod.php?which=78044 https://www.pouet.net/prod.php?which=78044 which appears to be a 64-byte demo showing off just the raytracer from 85227.
- lvturner 7y agoThere's something beautiful about the fact that the video is FAR larger in size than the program that initially generated the output. Almost worth watching for that fact alone.
- kubanczyk 7y agoYour comment's html source code (the entire <div>) is also larger with its 380 bytes.
- kubanczyk 7y agoCan be gzipped down to 275 though.
- Cthulhu_ 7y agoIt always stings when I make a website/app pulled through all the optimizers and compression algorithms, and the content people fuck it all up by adding 10MB of images :/.
- tiborsaas 7y agoYou are building a passenger airliner optimized to don't crash and burn, don't worry about the cargo :)
- derefr 7y agoI’ve pondered before the idea of a video codec that works like RAR, where the video embeds an arbitrary user-specified virtual machine that can be used to decode the video frames. (How is this not just a program binary? Because it still would have the semantics of a video stream, with no random access to frame data, only tape-head-like access.) Seems like this would be perfect for videos that are just e.g. gameplay of games made of tiles+sprites: the video could just store one copy of the assets, and the frames could just be tile maps + sprite position information. It would also work well for “videos” that are really just a single static image. Or videos that are visualizations of the audio stream: the VM could actually take the audio frames as input and output the respective video frame.
- saagarjha 7y agoI think Super Smash Bros records replays as a random seed and user input, then generates the video on the fly from that.
- recrof 7y agoalso, doom.
- derefr 7y agoSure, but the various machinima/demo file-formats of games are just application state-data formats, not video formats per se. The difference comes in what can decode them. An application state-data format can only be decoded by the original application, because necessary context—in this case, the game engine that translates user input to game-state and then to displayed frames, and also the library of visual assets the game uses to render those frames—is in the application, rather than in the video. A video format is self-contained, and usually not domain-specific. Many encoders and many decoders can be written to target a video format, and the decoders should not have to ship with an asset library (let alone a game engine) in order to properly render specific videos. A format like I'm talking about—one that doesn't know anything about application state, but does understand that it's compositing and placing a set of embedded assets each frame, rather than only knowing about pixels/gradels—seems like something generically useful to me. (Heck, we're close to support for such a format already, since many video players already understand the idea of compositing arbitrary stuff with placement instructions on the screen each frame, care of support for the https://en.wikipedia.org/wiki/SubStation_Alpha https://en.wikipedia.org/wiki/SubStation_Alpha subtitle format. That format is exactly the kind of "vector video" I'm talking about, except the only primitives it can position and style are text elements. Add RGBA-textured rectangles as another primitive type to it, and you'd get a video format!) And yes, I'm basically talking about the visual equivalent of a https://en.wikipedia.org/wiki/Module_file https://en.wikipedia.org/wiki/Module_file (embedded samples/synth patches + sequencing information); or, if you prefer another analogy, "what Flash movies are if you exclude the ability to execute ActionScript."
- haberman 7y agoHow do you handle time with such small code size? I see a timer interrupt for the music, but what about the animation? Is it dependent on the speed of the underlying CPU?
- maggit 7y agoI haven't had a look at the source code for this, but I expect that it syncs with the screen refresh rate.
- HellMood 7y ago(author here) it doesn't. it sets the timer to about 35 FPS and installs a callback routine that is called repeatedly as interrupt. Smoothing is rather done implicitly by "triple diagonal interlacing"
- llarsson 7y agoThere is an OS-provided timer interrupt that you can hook in to, making sure your interrupt handler is called every X time units. I think it was something like 18 times per second by default, but changeable. I used this to slow down my computer so that old games were playable. Hooked into the interrupt, wasted cycles, and could enjoy the game. :)
- pvg 7y agoIt depends on the speed of the CPU - if you look at the archive at https://www.pouet.net/prod.php?which=85227 https://www.pouet.net/prod.php?which=85227, you'll find a DOSBox config specifically for this demo. If you run it in DOSBox you can fiddle with the emulation speed by pressing C-F11 and C-F12 and you'll notice the speed of the animation change. Later: Your question made me wonder what the performance of virtual 'target CPU' is - the 'cycles' setting in the config is 20000 and there's a rough estimate of what these numbers translate to here https://www.dosbox.com/wiki/Performance https://www.dosbox.com/wiki/Performance So it looks like it's something along the lines of 'a 486 in the prime of its life'.
- HellMood 7y ago
- rsiqueira 7y agoThere is a JavaScript implementation of this parallax checkerboards effect with just 140 characters of code, including 3D animated perspective: https://www.dwitter.net/top/all https://www.dwitter.net/top/all In this page you can also find an implementation of Pouet's tunnel effect.
- twiceaday 7y agodwitter gives you some built ins so its not 140 but its not significantly more. I am sure you can convert most posts into 256 bytes of raw html+js.
- poutrathor 7y agoI immediately think about the dwitter crowd when seeing the video. I think I recognized several patterns. Seems sound that in the shortest size goal, everyone ends up using the same function classes to generate maximal impact with minimal bytes.
- ajxs 7y agoThis is amazing! Here's another awesome 256b demo that I love: http://www.pouet.net/prod.php?which=66372 http://www.pouet.net/prod.php?which=66372
- HellMood 7y agoThat one is really amazing! I still don't understand how this didn't win the "Meteoriks" award (my "hypnoteye" did https://www.pouet.net/awards.php#2015tiny-intro https://www.pouet.net/awards.php#2015tiny-intro ) Sadly, Baudsurfer has not been "around" for quite a while now ...
- z0r 7y agoMemories is... going into the memory bank for greatest 256 byte demos for me, right above the one you linked and immediate railways. Dang dude
- d_silin 7y agoA couple of other famous short demos: https://www.youtube.com/watch?v=_YWMGuh15nE https://www.youtube.com/watch?v=_YWMGuh15nE ("Elevated", 4k) https://www.youtube.com/watch?v=fp0t2jCMGZE https://www.youtube.com/watch?v=fp0t2jCMGZE ("One of those days", 8k)
- iszomer 7y agoTiny binaries probably relied heavily on the native OS's system libraries.
- jfries 7y agoYes, that would give some peace of mind, right? Unfortunately for us, that's not the case. The only platform specific code is the 8 instructions on top of "Code of framework" on http://www.sizecoding.org/wiki/Memories http://www.sizecoding.org/wiki/Memories First to set the video mode, and then to set up a timer used to progress time.
- yjftsjthsd-h 7y agoThat may be true sometimes, but "Memories" runs on MS-DOS, so there's precious little "OS", let alone libraries.
- stiray 7y agoNo they dont, using them is waste of bytes.
- smabie 7y agoSuch as? Doing anything meaningful would take up too many bytes. Regardless, dos doesn't really give you anything useful in the first place.
- pjmlp 7y agoMS-DOS system libraries in what concerns graphics was talking directly to the hardware.
- GuB-42 7y agoA common complaint on tiny demos. Here the OS is only used for setting graphics mode and setting up a timer. Plus all the boot code of course. Not much really, with 512 bytes you can probably do it on the bare metal, if someone didn't already. There is even more debate in 4k. After all, most rely on graphics drivers that take hundreds of megabytes. But the thing to understand is that in any case, the intro ships all the code that produces the sound and image. The OS is just an abstraction layer. The exception would be fonts and MIDI instruments, that can be stored in the hardware or OS. But not all intros have text, "Memories" doesn't. And many intros do their own sound synthesis, though in PC 256 bytes you are usually limited to MIDI or to that horrible buzzer.
- londons_explore 7y agoNormally these demos are filled with all kinds of 'tricks' to make things smaller. Things like self modifying code, using bits of the bios or video ROM in ways they weren't intended by jumping into the middle of them, saving space by using code as data or vice versa, tiny packers which compress or uncompress the code, massive pregenerated buffers to do runtime lookups to generate data in one order but use it in another, etc. This seems very vanilla in comparison...
- IvyMike 7y agoNote your comment about how unimpressed you are is 214 bytes longer than the demo.
- nullc 7y agoObviously he didn't do any 'tricks' to make it smaller.
- saagarjha 7y agoIf only I could persistently XSS Hacker News and this comment could be self-modifying as well…
- tripzilch 7y agoThere's quite a few 'tricks' in the small bits of asm in the article. Also, the tiny unpackers are generally used from 4096b and upwards. The size of the unpacker takes too much space and doesn't make up for the compression ratio at 256b.
- exikyut 7y agoMay I please have a list of demos that do all those things? That sounds really cool. - Jumping into the middle of video ROM and/or the BIOS - Using substantial amounts of code as data - Pregenerated buffers and data reordering oooooo.
- HellMood 7y ago
- aaronbwebber 7y agoCan anyone describe at a high level for a complete noob how this kind of thing works? Someone who is not going to be able to read a bunch of ASM and interpret it? I'm guessing that it is something along the lines of: - the graphics "driver" reads values out of certain registers (AL and AH?) at a set interrupt (maybe every X clock cycles?) and writes one pixel to the screen of whatever color those registers had in them - by writing values into those registers and aligning the number of operations the program does with the frequency of the interrupts, you can get animation? Even achieving any sort of flow control so you can switch between the effects is mind-boggling to me.
- hannob 7y ago> - the graphics "driver" reads values out of certain registers (AL and AH?) at a set interrupt (maybe every X clock cycles?) and writes one pixel to the screen of whatever color those registers had in them It's actually much simpler than that. After you set the right graphics mode (which for most simple dos demos is usually mode 13h, 256 color on 320x200) then there's an area of the memory that you can write to and it will show up as a pixel. The "flow control" is usually just that you run your effect n times in these simple demos. Which means it will run faster on a faster CPU, but you usually wouldn't bother implement any form of timing in 256 byte.
- pjc50 7y agoIt gets much simpler when you realise that in the original PC there's no "driver" in the way but bits of hardware are wired directly to various processor buses. This is sixteen-bit assembly, so you have the famous 640kb of RAM available to the user and a 64k bit of RAM beyond that (see "0xa000" in the program). The graphics hardware is continuously rendering frames out of there at 320x200, one pixel per byte, using the default system palette. The rendering is rather like a pixel shader. There is a big for loop over all the pixels, and at each point it computes a pixel value. First it decides which frame number it is on (stored in BP register I think), then calls an "effect" for that pixel. It then jumps three pixels. This gives that nice "dissolve" transition between effects. Keyboard controller is wired directly to the bus, so you can read the keyboard with a single instruction. A MIDI controller is wired directly to address 0x330 (not standard equipment, back in the day this required a Roland card or SoundBlaster 32?), so you can just write MIDI to that. There is a system timer interrupt configured for the music. The graphics appear to run continously, I can't see a link to the timer or vertical sync in the graphics code, that appears to just run continuously.
- smabie 7y agoI've always thought the demo scene looked cool. Problem is, I don't really care about graphics and sound and am not an especially creative person. Are there are competitions that are purely objective? As in, the objective criteria is quantitative?
- klyrs 7y agocodegolf
- Cthulhu_ 7y agoThe Advent of Code challenges are really interesting as well, you can often code golf those by a lot. I never get that far though :/. But, what I did last year was visualize one of the assignments; the assignment was something about overlapping areas on a field, the naive solution (for me) was to create an x by y bitmap and just add the overlaps, which could then easily be converted into a visible image, which helped me with visualizing the problem and my solution.
- encom 7y agoThe International Obfuscated C Code Contest https://www.ioccc.org/ https://www.ioccc.org/
- smabie 7y agoBut people vote right? What quantitative metric could be possibly used to determine the most obfuscated C code?
- HellMood 7y agoYou can always challenge yourself to create "something" in 32 bytes or 16 bytes. That is soo small, that sounds and graphics are rather abstract and it comes downto: does it produce something not random, noticable. For example, here is a paint program in 16 bytes : https://www.pouet.net/prod.php?which=62025 https://www.pouet.net/prod.php?which=62025 (the objective would be : create a program that allows painting on a canvas with the mouse) There have been ASM competitions with clear objectives in the past (http://www.hugi.scene.org/compo/ http://www.hugi.scene.org/compo/) but these are long gone and seem to be replace with something like https://codegolf.stackexchange.com/ https://codegolf.stackexchange.com/ now
- mellow2020 7y agonote the "type" dropdown at the top, and enjoy. https://www.pouet.net/toplist.php?type=32b&platform=&limit=50&days=0 https://www.pouet.net/toplist.php?type=32b&platform=&limit=5...
- raverbashing 7y agoThis is so cool MS-DOS programming was overall a pain in the... byte but what I miss most about it was the simplicity of graphics. Wanna draw? Just write to memory. Setting a mode was one instruction (Wanna play sound? Fumble with 2 levels of IRQ controllers one DMA controller then sob uncontrollably. Or use Allegro. Wanna do multithreading? What's that? )
- starpilot 7y agoPretty leet.
- wgx 7y agoNot MS-DOS, but my favourite 256 byte demo is for the C64: "A Mind Is Born", check it out: https://www.youtube.com/watch?v=sWblpsLZ-O8 https://www.youtube.com/watch?v=sWblpsLZ-O8 that music is astonishing.
- jcims 7y agoIf i had experienced this out of my dads humble little c64 back in the 80’s i think i would have passed out. That music is incredible esp considering how concisely it is stored.
- userbinator 7y agoThat one has a great explanation too: https://linusakesson.net/scene/a-mind-is-born/ https://linusakesson.net/scene/a-mind-is-born/ Also discussed previously at https://news.ycombinator.com/item?id=14164907 https://news.ycombinator.com/item?id=14164907
- clan 7y agoI am always very impressed when I see these demos and how much can be done with so little. If you are like me you just jumped to Youtube[1] to see it in action. When trying to make my significant other to understand what was happening I wanted to run it myself. I was amazed how simple that was! - Install the assembler[2] - Install dosbox[3] - Get the source[4] and put it into c:\temp\demo\memories.asm - Start nasm and enter: cd c:\temp\demo nasm.exe memories.asm -fbin -o memories.com - Start dosbox and enter: mount d c:\temp\demo d: dir memories - Press [ALT][ENTER] for fullscreen The dosbox config is not optimized but it runs with sound with the default settings! For me this is somehow much more impressive than simply watching the video. [1] https://www.youtube.com/watch?v=Imquk_3oFf4 https://www.youtube.com/watch?v=Imquk_3oFf4 [2] https://nasm.us/ https://nasm.us/ [3] https://www.dosbox.com/ https://www.dosbox.com/ [4] http://www.sizecoding.org/wiki/Memories#Original_release_code_.28complete.29 http://www.sizecoding.org/wiki/Memories#Original_release_cod...
- clan 7y agopvg has in a comment linked to the optimized dosbox config. With that it runs smooth as butter!
- kubanczyk 7y agoI often need a small script/program as a sample to go under automation/orchestration/ci or some other monstrosity of similar provenance. It will be fun to replace "sleep 5 && echo ok" with an automated version of such writeup :)
- jeffhuys 7y agoFor macOS users (with brew): brew install dosbox nasm nasm memories.asm -fbin -o memories.com dosbox mount D ~/Development/memories (or whatever) D: memories So, almost the same! Hit FN+Ctrl+F12 to speed it up (it's time-independent, for smoother animations, hit that combination quite a few times). It didn't output any audio for me, but that's probably fixable.
- kawzeg 7y agoUsing `dosbox .` skips two steps by mounting the current directory (at least on linux where I tried it)
- yread 7y ago> In 320x200 mode, instead of constructing X and Y from the screen pointer DI with DIV, you can get a decent estimation with multiplying the screen pointer with 0xCCCD and read X and Y from the 8bit registers DH (+DL as 16bit value) and DL (+AH as 16bit value). The idea is to interpret DI as a kind of 16 bit float in the range [0,1], from start to end. Multiplying this number in [0,1] with 65536 / 320 = 204,8 results in the row before the comma, and again as a kind of a float, the column after the comma. The representation 0xCCCD is the nearest rounding of 204,8 * 256 ( = 52428,8 ~ 52429 = 0xCCCD). As long as the 16 bit representations are used, there is no precision loss. Řrřola's trick. A bit like https://en.wikipedia.org/wiki/Fast_inverse_square_root https://en.wikipedia.org/wiki/Fast_inverse_square_root
- Firadeoclus 7y agoIt strikes me as odd to describe an 8.8 fixed point representation as "a kind of a float". That said, those demos are truly impressive.
- MisterTea 7y agoI'm sure the author is keeping the language simple and approachable while conveying the idea of "decimal number".
- Firadeoclus 7y agoTrying and not succeeding to keep the language simple. As evidenced by the sibling comment by pjc50. Fixed point numbers are at least as approachable as floating point numbers in my opinion.
- pjc50 7y agoThis explanation was so confusing that I had to write a program to get it clear in my head. https://gistpreview.github.io/?9b252f267cd1fdf9754059bb73a18487 https://gistpreview.github.io/?9b252f267cd1fdf9754059bb73a18... More clearly: DI = (y * 320) + x Multiply by 0xCCCD => (y * 0x1000040) + (x * 0xcccd) Take top byte is equivalent to divide by 0x1000000. So that gives you Y. The next lower (third) byte is then (x * 0xcccd / 0x10000) == (x * 52429 / 65536) =~ (x * 256/320). And the lower two bytes are noise.
- ddrdrck_ 7y agoI didn't know about sizecoding.org, it seems to be a very valuable and interesting resource explaining the "black art" of tiny demos, thanks ! I did not check yet all pages, but "Memories" entry in particular is very well written and explained.
- MrGilbert 7y agoOn a related note: 2019, "Dope on Wax" was 1st in the PC 64k section. There is a breakdown of this demo on youtube, it's roughly ~2 hours. They explained how they made this demo. Really interesting to watch. Demo: https://www.youtube.com/watch?v=QhqT0DhV9yE https://www.youtube.com/watch?v=QhqT0DhV9yE Breakdown: https://www.youtube.com/watch?v=hFIyj5Yv440 https://www.youtube.com/watch?v=hFIyj5Yv440
- deleted 7y ago[deleted]
- antirez 7y agoIt's wonderful. More impressed with this being 64k than the originally posted 256 bytes.
- TorKlingberg 7y agoPC64k is the main size constrained demo format, where people do seriously impressive things. 256b is the masochists category, where doing anything at all is hard. 4k intros are in between. It's interesting that the demo scene is very Windows/DOS focused, unlike other hacker scenes. Linux or Mac demos are basically not a thing. You're far more likely to see C64 or Amiga demos.
- antirez 7y agoWell I guess it makes sense after all, because in DOS you kinda have an "API", for instance using the default interrupts you can select video modes, and the video memory is mapped at a fixed offset and so forth. In Linux due to API fragmentation it would be hard to agree on something that works in the future, and even know likely more setup boilerplate setup code is needed.
- HellMood 7y agoAgreed. Just as a heads up regarding "future safety", the guys at NVIDIA - for now - seem to keep the door open for Dos/Bios with very high possible resolutions https://www.pouet.net/prod.php?which=63522#c858522 https://www.pouet.net/prod.php?which=63522#c858522 and even without the need for going the VESA way. Nothing i would really rely on in a business case ;) but neat anyway. (Mode List for several current GPUs : https://www.pouet.net/topic.php?which=11672&page=1 https://www.pouet.net/topic.php?which=11672&page=1 )
- rwmj 7y agoThe best demo I've found, also 256 bytes, is Pyrit by Řrřola (Jan Kadlec, a Czech developer). It's frankly incredible, something I wouldn't have believed was possible: https://www.pouet.net/prod.php?which=78045 https://www.pouet.net/prod.php?which=78045 I ported it to a boot sector so you can run it with a single (rather long!) Linux command line in qemu: https://rwmj.wordpress.com/2019/12/08/pyrit-by-rrrola-incredible-raytracing-demo-as-a-qemu-bootable-disk-image/ https://rwmj.wordpress.com/2019/12/08/pyrit-by-rrrola-incred... The source code for Pyrit is worth reading too (see first link). It's very clever and quite readable.
- mateuszf 7y agoVideo on youtube: https://youtu.be/eYNoaVERfR4 https://youtu.be/eYNoaVERfR4
- azuwey 7y agoWao this is pretty cool, I didn't know this site, thanks.
- imtringued 7y agoSince these are so small I don't see why we couldn't have a "demoscene launcher" with a "mailto:" style protocol handler and just let people click on base64 encoded links to start the demo.
- flohofwoe 7y agoI tried something similar with a 4K C64 demo recently in my emulator, basically percent-encoding the program to run right into the URL instead of hosting it somewhere. It works, but only up to about 2.5 KBytes (good enough for 256 byte demos though). Let's see if HN accepts the URL: https://floooh.github.io/tiny8bit/c64.html?prg=AQgLCB4AnjIwNjEAAACgNbq9FxGd%2FADK0PdMyRDM%2FtbyEdz25k7ENaxxDcDQyoQbDi8BjMwv7ush2TX8wgY4Q3wdgRIjINb%2Bm1epqMFZcyw8x4OFgnf%2BrBQwiBxBAa5ADDgAfASBQt0YPH7b%2FyRapf%2BWgowCMJgoKyhC%2F4R4OT5g2wZ8d%2BViTjkxRs1FPDjTZ2Y%2Fr4xCN0jiEJWSIIOCMkX%2BOGyffoSWS4GnBjxgOAwkZ63DDNNMVM7W5uq%2FUTgNpJ6Kn2AoVfAc8hI2Zt7%2FhewSlTd%2BwPzhl%2F7M8AwwdMZkRkl%2BBsZ8X4YCsRPHGDCMA%2BrhxQN4TAwPGAAZBOBYA2ZRAC4WKAwg%2FyQ8%2BAXl6XAlIQebDQMOBg8A0vlG%2BgwhtiKRSZFKkXGRcpERKA4yNTI2Ml0yXjKFUo2G%2BmBhWFD3Rz83MCkiHBb%2FEnsKB9sEcQQGCQ0RFhwiKC83P0dPWGFqc32Gj5miq7O8xMzT2uDm6%2FD0%2BPr9%2Fv%2F%2F%2Fv37%2BfXy7eji3NXOx7%2B2rqWck4mAd25kW1JKQjoyKyQeGBMPCwcFAwIBAQIDBggMEBUaICYtNDxETFVeZ3B6g4yWn6iwucHJ0Nfe5Oru8%2Fb5%2FP7%2F%2F%2F%2F%2B%2FPr38%2B%2Fq5N7Y0cnBubGon5aNg3pxZ15VTUQ8NC0mIBoVEAwIBgMCAQECAwUHCw4TGB4kKzI5QUpSW2Rtd4CJkpylrra%2Bxs7V3OLo7fH1%2Bfv9%2Fv%2F%2F%2Fv36%2BPTw6%2Bbg2tPMxLy0q6KZkIZ9dGrrAIoAALbkCQBg57ZlfgGNtObkfSjJJSv%2FSCvuM%2B0uSM42DOkrP5628w8OTg8G4xQI6QeSAQ0Fr64fTDe1hI5%2FmDule0zi%2FHEYfgEAfz%2FwCwDGQeb4DYDHB8DB2A94Ew7WFQv5EJw1hY7QGkTLRXgZg%2BHLhDeJ3MwN3fHtFyGloHfCZ1Lc%2BNIFv8AmBhYc0o9opFzaNLfx2xnzkNls8NDMmz7R3CixeJF0mBkgKUjVnA6vANidwPRkf%2BKpG%2BGNLVhME6DbActGgRCJuV4hpC%2F7psk3onutEbX274iMPOzADDsBYKETAPwG4HrA2%2FAbACBAEIA9KJTuwLhMyRAI3gskD08I9iKl9FonDlbwYrU%2FoC%2F4ndro4kjQ9c9gd6YC050K7t2tkWsPKQfwPwOqEEB94ANEP3wnscAyqRy3JgyNwfStUlVKXw2Ums6i2p2R7qXSD2BMhRcfOCBAcABMwLMRpNimf8oIyJ3%2FmwnKO9qIP7QBv%2BiGwM%2FYjBbUWr3WhOdqKdb0tIa17MU%2FMH9cFxao9QfuBqXuSemFq%2B8Z7KncBY0%2FtzflEAcpH7%2Bk0NzWlciUhuuJubk0EY1tELSI%2F%2BC7fwa1nkliDdc7EcjJCLD8BHej0PRIn232pJXNiosCoACUeYgPk2C1hEjJVf8KT57oD00T1mgQG%2BulqQd2rPNttKObrpWVLnMnBYF46XQG1LTOuYoR0PuItd4s9qKV9aY1pZ1v1Lmh53ME4n8QKrW83ikPqOe5fhGffqm7pmgXSqjE8AcGxyb1iJv1ycEYdYc9rnClwuMA6gHqtU5pGJW%2BnQLUTP%2BHEBaHLIM%2BisZjiwQRhoWFogEG66AfAxQECgUAO0lTXf1nQxvCSAECWigFEJD6NNM2RqpeRapkUUjSxbhTQ5UmSyvDpzoqA5VKQ0a6HgSyAA8C4Aik%2Bn%2BK6AzoHC0%2BUWZ7kan%2Fw936n8QIGBFxCYFBh0CABK5WDEkCotaLiYb7Lgqq%2FY6Miv%2F7hLq8iADoAfeiDs8Cu6kBhNcTWpWguXGfnbvUiLsg6REQ6v4DdJI6HoWVvfEX1qk%2FuNrU04o46QeqYAD%2Baw54DZRl4JHAzhnAuNkBIB18AVBgbeD6AJIgGgIP3NzgcgAqAh9waQFAuCQAXRqoEgADHgNgQAymoSyoxAwYPIIgEACErQHcye9%2Fy0x6DLnUQjLlGK3JSSoLJ5qwsO%2BbvPPu5RN4%2F14VGxtZHVkAEIsckReVwAYntCiRKZEqkSuRLJEtkS6VM4JnVhD04PDmkqMHjQmMC5QNarkGiRofCCtcCrF4Ob2j8CWwPWYUew%2BJHewS6BQTTKwUL1eiKdj41iv%2BnMquO%2FtG%2FD79negKz2kgthbvOh8tja4AoOUiISUiXp5rFr60F8%2BCqvflqPcUqLeigQSVFryqe8CkkoTUwZASmiY8wkxYomgBIwMjBfcPkqXzyXfwdrtwdh2guw7rKr4ojl8HsSPrGDaiPQcrTMkVbokjiiOxI7IjnSOeI8WTxmYJHd8pmQfvyF8micdj2yPcLQMjBC3rI%2Bx5E9KjFPk0IONt5A5kC6lkDA9HYLUAlpACrCWwBGtpCg4nKlf4Wv9ZKLv5Uo76aa09aU5SFbOiLzXDpKqElCD0IyiyzfMw%2B7mpwOOiB%2F4oJOoWKKxMahcgVg%2F64LWMGKmVFmPloDlEipijSD0upvChXKnIjRberULJ%2Fs35lffKi%2F3qqQaN%2ByDQ%2Byz6jVCNXpSdbNjObQ7%2B79rW%2FloTuTn%2F7hnoqXXPEtA5qBrtaECm3r0rC6AAqikH%2FUnXjfAUioT%2FKkaG8WqonzrwEbbpJkAnuCeQJw1S4BLbCE6kMEm5gBOdWPsOyMMnm9DW60yl18kC%2FnHmlryF8qziRFjA7MRiwScWwjuxw9iJxcROLMV2YsaxE4vHnVjI7MRiyScWyjuxy9iJxcyt2o3NyYzO0gqBGdvmMCjQ%2BGCtv%2BkC5CKwN2kIjR4W%2FuO9cWadcOlj4CYz9a1unMkA0O4Nt%2BuYqTjRTETLOJYP3Ritl2kBjUV8kAO9RhvJjfAE0e4nYKkAjWsXPzHJAfADL5fNTCgtJnMySJqirMCdp5NdD6JoCHQAK6eQM1ii5k826KeOLgylP0nlhfVg%2FaITCHAaAQ0h9DQL0kYUuQMomgkOFgGv%2B%2BV0KQKlGXsEe7nfCVQOA7ruBxIyBVQTKhQPjQELDAUuCQggADYAmmBnFUMAAAE5Z2ZFNSQCIQAQIBNCIxMBucARmeYHiND3GKqYKQ%2BZaAPwDIp5ZwOZaAOlnnmbA5mcA6kBhZ6peCAAAUqq8AkIBp44asrQ%2BShqmTQDMAWlnoaeJIrIwDTQwaD%2FikyNARAAF2mAChAPBv3QCEggGgEqhf1oKjDxcAFgOIWfrSkB0AbOKgGO59vOKQGtyRBgIBoBkf6Y0ALG%2F4jKBv3QBiAaASqF%2FeiQ8%2FDl4BGwS70zAyAAAX1nA4Wnqqnx4AOwA72jAbggBQEYqr00AyAAAX1oA4WupZ99nANl%2F4WvpqewE7Gukf6Y0ATG%2F8aviMrQ74af8KYgGgGw6vAJIBoBIBoBqrDbTJANzPIBAECCSzgcV0fV8Sb83kZJMsxrEEhP%2BEfocsDe%2BOr%2B8CcUiA%2BnHvJbMXitlATw2M2rwMB%2BuA%3D%3D https://floooh.github.io/tiny8bit/c64.html?prg=AQgLCB4AnjIwN...
- spiritplumber 7y ago256 bytes is in the "let's try every combination" range, I think. So, write a program that tries all of them and determines if any do something interesting enough to forward to a human for review.
- LocalH 7y agoWouldn’t that be 256^256? That’s certainly a hell of a haystack
- deleted 7y ago[deleted]
- sho 7y agoIt would be 8^256. Less than you guessed but still a 232-digit number...
- LocalH 7y agoI don’t understand how it’s that low. 256 bytes, each with 256 possible values. 256^256.
- scaredginger 7y agoYou're right, the other person is wrong :)
- scaredginger 7y agoI'm sorry, are you saying here that a byte can only express 8 different values?
- sho 6y agoNope - it was late and I totally botched it. Rightfully downvoted.
- exikyut 7y ago
- 1cvmask 7y agoThe site has a login and lacks SSL. Hopefully this will be remedied soon.
- nchelluri 7y agoHere's a size comparison with a "hello world" program in my favorite language, Go. nchelluri@grugbarn:~/dev/hello $ cat > hello.go package main import "fmt" func main() { fmt.Println("hello world") } nchelluri@grugbarn:~/dev/hello $ go build nchelluri@grugbarn:~/dev/hello $ strip hello nchelluri@grugbarn:~/dev/hello $ ./hello hello world nchelluri@grugbarn:~/dev/hello $ du -h 1.4M .
- chrisweekly 7y agoThat is pretty amazing.
- ChrisArchitect 7y agofun to watch this, like seeing the odd demo pop up on HN once in awhile and that code/techniques breakdown is incredible. Back in the day we rarely had that kind of insight into the mastery that went into a demo unless we really got into a discussion with the creator about the code. another reminder of the 'art' of the demoscene and it's recent recognition as a piece of UN heritage in Finland which I thought was pretty cool http://demoscene-the-art-of-coding.net/2020/04/15/breakthrough-finland-accepts-demoscene-on-their-national-list-of-intangible-cultural-heritage-of-humanity/ http://demoscene-the-art-of-coding.net/2020/04/15/breakthrou... (HN discussion: https://news.ycombinator.com/item?id=22876961 https://news.ycombinator.com/item?id=22876961)
- HellMood 7y agoThe final freedos version is available. It includes the Amiga Ball as extra effect. The filesize is still 256 bytes. https://www.youtube.com/watch?v=wlW84fEHngM https://www.youtube.com/watch?v=wlW84fEHngM