Reverse Engineering Game Code from the Neutral Zone

  Рет қаралды 475,620

Retro Game Mechanics Explained

Retro Game Mechanics Explained

4 ай бұрын

Ever hear that the neutral zone in Yars' Revenge uses the game's code for its graphics? How does it work, and is it possible to reverse engineer that code just from playing the game? It's all explained right here.
LINKS
Support the channel on Patreon: / rgmechex
Join the RGMechEx Discord Server: discord.rgmechex.com
Follow RGMechEx on Cohost: cohost.org/RGMechEx
INLINE LINKS
Racing the Beam: • Racing the Beam Explai...
SOURCES
Digital Press Interviews: www.digitpress.com/library/in...

Пікірлер: 641
@HowardScottWarshaw
@HowardScottWarshaw 4 ай бұрын
I'm impressed. This is a very thoughtful and intricate analysis. I also love the irony that the code responsible for displaying the neutral zone is also the graphics for the neutral zone. I must say, though I always thought I had made it extremely tough to ascertain the code from the display, I'm both glad and relieved to see it passed a very stringent test here. Thank you so much for this! Yars truly, :) HSW
@RGMechEx
@RGMechEx 4 ай бұрын
I'm slightly disappointed that I couldn't crack it any further, but it was still fun to analyze and see how far I could possibly take it. Thanks for the comment, and for the game I could make a video about!
@shona-sof
@shona-sof 4 ай бұрын
Halfway through this video I thought that someone needed to make sure Howard saw it. Glad to see this comment!
@urdnal
@urdnal 4 ай бұрын
Off topic but playing Yars' Revenge in the dark with it lighting up the whole room, the neutral zone mesmerizing me, is a very distinct and loved early gaming memory for me. Want you to know I appreciate it. (Also, ET wasn't that bad and it blew my mind to see a Yar in a well the couple of times it happened.)
@ToyKeeper
@ToyKeeper 4 ай бұрын
That's amazing.❤ I used the same trick in my torch firmware "Anduril", reading from ROM to get values for a pseudo-random number generator. So when the torch is in candle mode or lightning mode, it's technically blinking out the program's machine code. But I continuously added the least-signficant bits of its voltage and temperature ADC readings too, to make it more of a true random.
@JustWasted3HoursHere
@JustWasted3HoursHere 4 ай бұрын
@@shona-sofI thought the same thing, which is why I sent Howard an email to let him know about it! There's a video on KZbin somewhere where Howard talks about the whole process of developing Yars Revenge* but I'll be darned if I can find it now. I should have bookmarked it! - Russell Jones * Especially the revelation he had on how to control the main ship: He was originally thinking of an Asteroid-esque control scheme where right and left rotate the ship, up is thrust and down was a warp or something similar. He finally realized that up/down/left/right are the perfect controls by themselves, with the fire button launching the shot.
@AlexxForest
@AlexxForest 4 ай бұрын
Ironically for Atari, just dumping the rom would be easier than reverse-engineering the code using an image.
@gordontaylor2815
@gordontaylor2815 4 ай бұрын
Yeah, but the Atari legal team wouldn't have known that back in the day. They got paranoid as soon as they heard the phrase "game code being drawn to the TV screen"...
@SECONDQUEST
@SECONDQUEST 4 ай бұрын
​@@gordontaylor2815that's specialized hardware, and I highly doubt they were actually worried, just wanted to protect their IP.
@CptJistuce
@CptJistuce 4 ай бұрын
​​@@SECONDQUESTAn EPROM programmer was not at all specialized hardware for a programmer of the day. Ironically, displaying the code onscreen would have afforded it more copyright protection than not in the early days of 1982.
@09jjohns
@09jjohns 4 ай бұрын
The dev stated that if someone did reverse engineer the code from the Neutral Zone, they deserved it, which could be argued in court as permission to reverse engineer it from the image, AND as a license to copy and use that code. Dumping the rom would be clear theft.
@CptJistuce
@CptJistuce 4 ай бұрын
@@09jjohns It was Time-Warner's code, not his. However, depending on when in 1982 the game came out, there's a few months where it WOULDN'T be clear theft. 1982 was a big year for copyright protection of computer programs distributed in ROMs, with multiple cases establishing that yes, data in ROM ICs was covered. Before that time, the argument was that only human-readable works were copyrightable, and hence a listing of your code was copyrightable but not the contents of a ROM, disk, or magnetic tape. So while the writing was on the wall there was still a brief window of time you could, legally, copy that floppy.
@LendriMujina
@LendriMujina 4 ай бұрын
If you squint, the Neutral Zone being the game's entire world blown open for all to see lines up with the in-universe lore of it being the remains of one of the Yars' home planets. In a meta sort of way.
@CarbonRollerCaco
@CarbonRollerCaco 4 ай бұрын
And it fits the game being a metaphor of Ray Kassar, head of Atari in those days, getting revenge on Activision (the OG one, not the one that Bobby Kotick used to ru(i)n) for "breaking" his empire with unlicensed games that cut into recurring profit for Atari.
@PearangeProductions
@PearangeProductions 4 ай бұрын
I love how all the text in this video looks like it was actually drawn on the Atari 2600. Love little details like that.
@mattiviljanen8109
@mattiviljanen8109 4 ай бұрын
2160p60 bandwidth well spent :) (Okay, the intro and outro graphics benefit from it)
@AutodidacticPhd
@AutodidacticPhd 4 ай бұрын
Yeah, I still get a kick out of this one little detail in the pacman kill screen ep, when he's explaining what happens when you add 1 to 255, and the carry bit on the end just falls off the equation and bounces on the rest of it on the way down.
@andre_601
@andre_601 4 ай бұрын
Does that also include possible colours the Atari 2600 would be able to draw? That would be peek design detail for me.
@CptJistuce
@CptJistuce 4 ай бұрын
​@@andre_601It looks right to me. The VCS actually has a fairly large color palette to choose from, so it isn't hard. 8 luminance values, 16 chroma values. That results in 128 color options(8 of which are just black and white shades).
@Arcsin27
@Arcsin27 4 ай бұрын
Oh yeah this dudes channel has such intricate and awesome graphical details!!
@CrisperPoet
@CrisperPoet 4 ай бұрын
25:45 "It's about to get pretty technical, and if you don't have a good grasp on how assembly and machine code works, it might be a little difficult to follow." Man, you lost me like three years ago, at this point I'm just here for the flashing lights while my brain tickles my ear as it drips on the floor.
@christophercampbell6884
@christophercampbell6884 29 күн бұрын
Well said. I just come to this channel to feel smart and nod my head to the information given while having no clue what the hell is going on.
@WhoLover
@WhoLover Күн бұрын
i read this as he said it. this happens a lot to me
@narayanbandodker5482
@narayanbandodker5482 4 ай бұрын
The "neutral zone" is sometimes not visible in 30fps on KZbin because of the flicker
@Phroggster
@Phroggster 4 ай бұрын
I kept thinking "what's this dude even talking about" at the beginning before I remembered that my phone defaults to data saver resolutions. 1440p/60 cleared my initial confusion right up.
@K-Anator
@K-Anator 4 ай бұрын
Thankfully that should only be an issue for people watching in 480p and under, unless KZbin has started giving different devices different framerate options that aren't available on desktop.
@Haganeren
@Haganeren 4 ай бұрын
I was JUST seeing that and wanted to make a comment about it !
@GeneralBolas
@GeneralBolas 4 ай бұрын
Oh *that's* why I couldn't see it. As an old Atari player from back in the day, I knew it was supposed to be there, but it wasn't visible.
@potato9832
@potato9832 4 ай бұрын
Unfortunately, this is a common issue for many Atari 2600 games that use flicker (i.e. sprite/playfield multiplexing and scanline flickering) to exceed the native graphics capabilities of the 2600. Some people might be surprised to discover the Atari 2600's native frame rate was 60 Hz (for NTSC, 50 Hz for PAL), which can be unexpected given it's a console from the 1970s. The 60 Hz frame rate is also why Atari sprite movement can look very fluid when movement uses 2 byte fixed-point arithmetic without flicker. We've come to expect fluid movement on more modern powerful consoles. (See Atari 2600 demoscene and modern homebrews.)
@mrmimeisfunny
@mrmimeisfunny 4 ай бұрын
A good way to get the clean data from the neutral zone using late 70s early 80s tech would be to flip the BW switch on the Atari and feed the video output into an oscilloscope. From there you know the neutral zone will be rendered every line in the same place. Edit: Turns out the BW switch doesn't work in Yar's Revenge. Still considering each pixel is made of two dots it would still create a meaningful signal even with color.
@_MasterLink_
@_MasterLink_ 4 ай бұрын
Wait, on my 2600 flipping that switch does nothing on this game and it remains in color. I know the switch works as the Telegames cartridge does go black and white, but this one does not. I know the switch is software, but perhaps it works differently on some systems? Mines a 4-switcher.
@sugar_700
@sugar_700 4 ай бұрын
This is because Yar's Revenge doesn't support BW switch.
@tylisirn
@tylisirn 4 ай бұрын
You do realize that it would be an analogue oscilloscope, not a storage oscilloscope (those were expensive as heck). It would be practically impossible to read. If you had access to a storage oscilloscope, you almost certainly had access to a PROM reader and could trivially just dump the cartridge. (In fact, dumping the cartridge wasn't hard at all for any electronics hobbyist. If anyone really wanted the source, that's what they'd do.)
@nsf001-3
@nsf001-3 4 ай бұрын
Just plug it into a BW television. Bam
@_MasterLink_
@_MasterLink_ 4 ай бұрын
@@nsf001-3 And yet that wouldn't work anyway, as mentioned in the video. Even with a perfect capture, just too much is missing to properly reconstruct.
@timmowarner
@timmowarner 4 ай бұрын
I always thought the odd look of the canon when the Neutral Zone wasn't in the level was a stylistic choice. Amazing to discover it was the only way to display it!
@idontwantahandlethough
@idontwantahandlethough 4 ай бұрын
right?! Love finding out stuff like that :)
@youtubeforcinghandlessucks
@youtubeforcinghandlessucks 14 күн бұрын
not the only way, the laziest to program way is probably more like it. in the end still a stylistic choice, but based not just on the style of the visuals, but combined also with the style of the code and the effort required for it.
@Damien.D
@Damien.D 4 ай бұрын
I've happily spent 40 minutes of my life appreciating every explanations that a very talented person makes by trying to decipher what is, in the end, nothing more than a very fun and elegant way to make a random number generator. Fun fact, the "last level" of Pacman is also made of the game code, albeit not voluntarily :P
@forgiveman
@forgiveman 4 ай бұрын
And there is a video on this same channel explaining the how/why this happens.
@CallousCoder
@CallousCoder 4 ай бұрын
I did a video where I hacked the Pacman game to get to the kill screen and indeed it's about 512 bytes (probably less but half a screen) of the code. I have never ever gotten to that screen myself hence I had to hack it :D
@noway2831
@noway2831 3 ай бұрын
BRO THAT WAS 40 MINUTES???
@jaywolfenstien
@jaywolfenstien 4 ай бұрын
Ever since I learned the neutral zone is the game's code, I've always wanted to see a programmer take a crack at deciphering it. Dream come true. Now if only we can get HSW to react to this, my life would be complete.
@spunkyre3917
@spunkyre3917 4 ай бұрын
They did, see pinned comment!
@Manabender
@Manabender 4 ай бұрын
33:27 There is a flaw in this logic; the just-greyed box could be a JMP instruction, in which case what comes next need not be a valid instruction. Any bytes immediately after an unconditional jump could be data from some data table, so anything is potentially valid.
@randomcatdude
@randomcatdude 4 ай бұрын
was just thinking that too this is all assuming an uninterrupted branchless instruction flow
@RGMechEx
@RGMechEx 4 ай бұрын
This is true. I decided to leave it out of the video since it just made things more complicated. But in practice this would be a valid concern.
@DiThi
@DiThi 4 ай бұрын
I heavily suspect that the fact that only half of the rows were drawn was pure coincidence, and the guy didn't realize his reversal method mapped it to the same bytes.
@Dark.Shingo
@Dark.Shingo 4 ай бұрын
My biggest takeaway from this video is that Howard Scott Warshaw was a damn genius. Which I already knew but it's always nice to see another display of his prowess. Also, making this video takes another genius, always a pleasure to watch.
@HokoraYinphine
@HokoraYinphine 4 ай бұрын
i was watching on data at 30 fps and the entire neutral zone at around 2:01 is completely invisible! I didnt even notice you were talking about that til you mentioned some of it was offscreen while zooming into seemingly nothing! the beginning of the video requires 60 fps to see the whole thing haha
@ozziegerff
@ozziegerff 4 ай бұрын
"Challenge Accepted"
@brinleyhamer729
@brinleyhamer729 4 ай бұрын
You first
@TheRedCap
@TheRedCap 4 ай бұрын
"Challenge Accepted" >40 minutes in the video hell yeah
@Roverd26
@Roverd26 4 ай бұрын
I love the idea of checking which interpretation of the binary code results in the most valid/common opcodes! Reminds me of reading gene sequences, where a sequence can be interpreted 3 ways depending on where you start reading it. (DNA is made of codons, which are kind of like opcodes made out of 3 base pairs. Starting on a different base pair results in wildly different codons, and you can check which interpretation is the most likely to be valid by checking how long it takes you to run into a STOP codon.)
@angeldude101
@angeldude101 4 ай бұрын
Instead of disassembling 8 digit binary groups, you get to disassemble 3 digit quaternary groups (which are effective 6-bit). I find it kind of funny that nature managed to come up with what's basically a "terminator byte." Whether you'd interpret it like a string's null terminator or a subroutine's return instruction, it's still pretty cool how much there is in common.
@peterfireflylund
@peterfireflylund 4 ай бұрын
I remember being taught that in high school biology. Then we asked the teacher how the cell read the right sequence: how did it choose the correct strand and how did it get the reading direction right? Turns out she didn’t understand the question. We spent a long time, maybe 15 minutes, trying to explain it to her. Then we collectively decided she was stupid :) (Denmark, late 80’s, no Google, no Wikipedia, no internet.)
@SECONDQUEST
@SECONDQUEST 4 ай бұрын
​@@peterfireflylund I highly doubt she didn't understand the question. She didn't have an answer because that's more the realm of physics and chemistry anyway.
@Sypaka
@Sypaka 4 ай бұрын
So i am not the only one to compare DNA to computer code, where the compiler is our own body. DNA could also be a large TAR archive and the "human compiler" just scans through it until it finds the block - like a LOAD XXXX instruction. I even dare to say, certain blocks are AND/OR/XOR'd to form a new variance. Because if you see the Y-Chromosome, it has stuff missing in it and can't exist on it's own. THis is called Y0 and any baby with this is unable to form and dies early. I'd like to call the Y-Chromosome "a patch". It integrates, overwrites some portions and then keeps "compiling" normally as an X would. Recessive Genes could be a result of an AND/OR/XOR, thats why brown eyes for example are more dominant then blue, if you think of them as 0/1 , but they aren't. Hell, maybe call blue eyes an "else default" case, so you are left with "is_brown" or "is_green" IF checks. Anyway, I think it really safe to assume human DNA to be code and the base RNA found in all woman to be a key/checksum like "if remote.DNAinit not equal self.DNAinit; exit"
@Tkmined
@Tkmined 4 ай бұрын
Damn, didn't know we had STOP instructions in our dna sequences lol. Learn something new everyday! Guess it makes sense. How is the cell supposed to know when to stop printing RNA or or when to stop building a protein if there wasn't a marker.
@stevenolson3977
@stevenolson3977 4 ай бұрын
Oh man....that bit at the end about the code that draws the neutral zone...this is a fantastic example of a "strange loop" as defined by Tom7
@nsf001-3
@nsf001-3 4 ай бұрын
Eatin' boots since 1982
@bitblit
@bitblit 4 ай бұрын
A small change in the ROM should allow for the neutral zone to be rendered every frame whilst the quotile shield is never rendered, giving us access to all of the data in the ROM minus the least significant bit. If the Atari had the equivalent of a game genie the branch instruction could be changed to always draw the neutral zone. Building off of this if you run this in an emulator and change address $FAF3 from 0x9003 (bcc $FAF8) to 0x3A3A (NOP x2) then the game will draw the neutral zone every frame and every piece of code can be seen.
@AB-Prince
@AB-Prince 4 ай бұрын
I would say that although it's more or less impossible to unscramble the code from the color blocks, the fact that you can more or less reverse engineer the code that displays the neutral field from looking at the graphics, I would say, technically counts as extracting code from the neutral field graphics, albeit not the code that is hidden in the field. considering that also just by chance, the code to draw the field ends up becoming field is rather fitting to the goal of unscrambling the code.
@Nikola_M
@Nikola_M 4 ай бұрын
I'd say that "fitting" would be a better word than "ironic" in the last sentence
@AB-Prince
@AB-Prince 4 ай бұрын
@@Nikola_M thanks, english is my first language but I suck at properly conveying information. fixed it.
@SuperSmashDolls
@SuperSmashDolls 4 ай бұрын
Absolutely excellent. I'm still wondering why Atari management was worried about game code being copied this way, though. Just dumping the ROM on the cartridge would be way easier, and people did that.
@thewhitefalcon8539
@thewhitefalcon8539 4 ай бұрын
Lawyers, man...
@CptJistuce
@CptJistuce 4 ай бұрын
At this time, Atari management was Time-Warner. Ironically, displaying the code onscreen at the beginning of 1982 would have actually afforded them STRONGER copyright protection, since the case law establishing that code on a ROM is afforded protection would only happen later that year.
@Jerhevon
@Jerhevon 4 ай бұрын
@@CptJistuce Also, this was Atari that absolutely would not put game dev names in any publicly accessible credits lest their programmers get poached.
@Craig1967
@Craig1967 3 ай бұрын
Up until now, I thought that I was King of "Going Down The Rabbit Hole." I now humbly transfer that crown to you. This project you undertook required patience of unimagable amount. This is something that reminds me of my High School days when I had Atari 400 and 800 computers. I figured out how to copy cartridges to disk as binary files. Some games would not run, and I had to reverse engineer the code to figure out why. Usually there was some code that would write back to ROM memory space that would not do any harm if it was a legit cartridge installed. However if the game was running in RAM, it would kill it by overwriting itself. I was able to replace all that "anti-piracy" code with NOP instructions. Wow, good memories come back thanks to your video.
@jogloran
@jogloran 4 ай бұрын
These skills are going to be real useful for hardware archaeology, when we recover damaged firmware developed centuries in the past and need to get them working again.
@CptJistuce
@CptJistuce 4 ай бұрын
Eh, just splice frog DNA in over the missing parts. What could go wrong?
@PopeGoliath
@PopeGoliath 4 ай бұрын
Instructions unclear. Lilypad stuck in ceiling fan.
@lavacat720
@lavacat720 4 ай бұрын
​@@CptJistuceinstructions unclear: my router is going ribbet ribbet and catching flies
@AgentLazarus
@AgentLazarus Ай бұрын
Instructions Unclear: my di%# is in my throat
@AutodidacticPhd
@AutodidacticPhd 4 ай бұрын
With regard to your closing comment, I suspect we could further surmise that anyone who did have the time and experience needed to deduce the code from the neutral zone could probably write their own (UX identical) version of the game from scratch in less time than it would take to untangle that mess and fill in the blanks accurately.
@stevethepocket
@stevethepocket 4 ай бұрын
It took me forever to remember what other game you already covered that grabbed a chunk of its own code as a substitute for pseudorandom data. It was _Pac-Man_ using it to determine random directions to move at intersections. I wonder how many other games over the years have used that trick in one way or another.
@williamdrum9899
@williamdrum9899 4 ай бұрын
I imagine anything that had a TV static effect was doing it. Nowadays you get a segfault if you tried this
@nikkiofthevalley
@nikkiofthevalley 2 ай бұрын
​​@@williamdrum9899Yep, because modern CPUs don't let you read random memory for security reasons. It'll let you read your own memory, of course, but you're pretty likely to end up reading invalid memory if you're trying to do something like this.
@dirkkrohn1907
@dirkkrohn1907 4 ай бұрын
This was one of the 2600 games that I had back in the day. Thanks for the memories, and happy holidays to you and your family.
@OhSayWhatIsTruth
@OhSayWhatIsTruth 4 ай бұрын
It's amazing with what developers can do with such a limited piece of hardware. Thanks for the video!
@ExpoM3rker
@ExpoM3rker 11 күн бұрын
Whoever did these captions need a raise, using colors is something I don’t see a lot do. They even move it too!
@maxinealexander9709
@maxinealexander9709 4 ай бұрын
I really appreciate that the subtitles were actually good, and adjusted position when needed based on screen contents. Thank you!
@craftersshaft
@craftersshaft 4 ай бұрын
i think the neutral zone would be a great teacher, they never dwell on the least significant bits
@nsf001-3
@nsf001-3 4 ай бұрын
I *C* what you did there (It's assembly but bear with me)
@wolfetteplays8894
@wolfetteplays8894 4 ай бұрын
Nice pfp
@nameless......................
@nameless...................... 3 ай бұрын
@@nsf001-3 on the topic of characters being used, i □ unicode
@TheWarmotor
@TheWarmotor 4 ай бұрын
Never thought about using the second bit as a mask in XOR instructions. I typically use XOR instructions to zero out large blocks of registers in one instruction by making my bit matrix both of the input fields as well as the output field. The instruction set allows 125 registers at a time, allowing me to zero out (up to) all 125 in one very fast instruction. This is for low level code on dedicated microcontrollers for industrial automation, where every byte and clock cycle count. Next time I'm working on a large bit matrix, I'll probably look at it a little differently :)
@canebro1
@canebro1 4 ай бұрын
That is funny. My last job I remember seeing a macro for an efficient memset to 0, but never looked at the assembly behind it. Now I wonder if it used XOR or not.
@nikolthomas2544
@nikolthomas2544 4 ай бұрын
@@canebro1 Probably. Most CPUs have one or more versions of' a "XOR 'thing' with itself" instruction which is generally the most efficient way to set 'thing' to zero.
@Chrisuan
@Chrisuan 4 ай бұрын
Absolutely beautiful video, please never stop making them
@gtabro1337
@gtabro1337 4 ай бұрын
Bro really put the inner workings of the game on literal display
@Tuxfanturnip
@Tuxfanturnip 4 ай бұрын
why write code to generate a random-looking bit pattern when you already have one on the ROM?
@CptJistuce
@CptJistuce 4 ай бұрын
​@@TuxfanturnipFlashbacks to the Pac-Man RNG.
@SteveNeubauer
@SteveNeubauer 4 ай бұрын
I love the premise of this video! I used to play Yars' Revenge like crazy in the Atari days, and I think I was vaguely aware of the trivia of the neutral zone sometime recently, AND I am fascinated by your videos. This video is for *me* so thank you for it!
@mozzapple
@mozzapple Ай бұрын
At first I was extremely confused because I couldn't see the neutral zone at all, but when the section about the flickering started, I realized I just needed to up the quality to 60fps
@iwastherobloxianminecrafter
@iwastherobloxianminecrafter Ай бұрын
Woah! Rad.
@StormyBuckets
@StormyBuckets 4 ай бұрын
the content of your videos tends to go straight over my head, but it's still so fun to listen to!
@codingidiot6754
@codingidiot6754 25 күн бұрын
absolutely incredible video, couldnt stop watching. I dont even know anything about machine code or assembly at all but this had me hooked. Sad that it seems impossible to fully decode, but getting that far in the first place is arguably cool enough. And dont even get me started on the editing. Definitely one of the highest quality channels about cool niche coding stuff out there, dont stop doing what you're doing.
@mattshu
@mattshu 4 ай бұрын
First video I’ve seen from this channel. What an amazing style you use! Unique!❤
@noahwinslow3252
@noahwinslow3252 3 ай бұрын
Really beautiful and well done presentation. Thank you for all the time and effort it must have taken to make this!
@ElliLavender
@ElliLavender 4 ай бұрын
I only understood like half of this, but you explained it so well, that I still feel like I've got a grasp on everything solid enough to leave the video satisfyied. Thank you, that was really interesting!
@mattrodriguez1712
@mattrodriguez1712 4 ай бұрын
Amazing video. I hadn’t thought about Yar’s Revenge since I was a kid. I loved that game and this is incredibly interesting.
@unnamed82979
@unnamed82979 4 ай бұрын
This is video is amazing. Love the amount of effort you put into it. Great visuals, great explanations, great everything. 10/10 I don't know how I missed out on this KZbin channel. But I pulled out my phone on which I am signed in and dropped a like and sub.
@aner_bda
@aner_bda 4 ай бұрын
I remember playing this game as a young kid, maybe about 6 or 7. I had no clue what I was doing, or how to play it. But I still do have distinct memories of it.
@stevethepocket
@stevethepocket 4 ай бұрын
This was definitely one of those games you didn't want to throw out the manual for. One great thing about the switch to discs is that people finally started holding on to the packaging for their games, since storing discs without their cases is much more of a pain. I was lucky enough to end up with not just the manual for this one, but the little comic book that explains the backstory in more detail. I still don't know if that came with the game or was something you had to buy separately or order from the back of a cereal box or whatever.
@aceae4210
@aceae4210 4 ай бұрын
the subtitles for this video are very well done, thanks for having them
@NinF37
@NinF37 4 ай бұрын
Absolutely fantastic video as usual! As someone who doesn’t touch code, and doesn’t know assembly, this was still super easy to follow. Extra kudos for the captions, which move out of the way when it would normally block something! ❤
@KeviRun
@KeviRun 4 ай бұрын
This is definitely high on the list of the best videos that you have made! Technically detailed but also easy enough to follow along with. There may be an opportunity for me to meet HSW at a future event and if I do, I will be sure to ask if he has seen this video/ recommend it to him, and ask his opinion of your methodology to dissect the game; and I will be sure to pass along what he says in DM if it happens. Thanks for all of the great content!
@larswadefalk6423
@larswadefalk6423 4 ай бұрын
Worst mindf*ck I've seen in a long time. Oh man, the patience and tolerance to just move forward is just amazing. Total awe. Thanks.
@nickwallette6201
@nickwallette6201 4 ай бұрын
This all sounds like EXACTLY the argument that inspires things like HDCP. If that were a possibility in the 80s, Atari may have demanded the game use an encrypted channel to the TV. Pirates would then simply dump the ROM, grabbing every byte, in order, with no obfuscation or masked bits. But, gamers would have to upgrade their TVs, VCRs, and switch boxes to avoid scrambled video. Or maybe I'm just bitter that I can't get my Mac Mini desktop to show up through an HDMI KVM, HDMI Matrix, and HDMI to DisplayPort adapter without disconnecting the cable two or three times every morning. Because god forbid I vid-cap my Outlook window and share it on the Internet...
@knightsofthebedrock938
@knightsofthebedrock938 4 ай бұрын
I never have any clue what you’re talking about but I watch every video you make. Thanks for the great content!
@memesalldayjack3267
@memesalldayjack3267 3 ай бұрын
this was super interesting, well paced and very well animated, very good job
@whamer100
@whamer100 4 ай бұрын
this is by far one of the coolest videos ive seen in a long time
@igNights77
@igNights77 4 ай бұрын
Amazing investigative work. Keep those videos coming!
@SpringySpring04
@SpringySpring04 4 ай бұрын
So interesting to see your videos, its always a blast
@BrunoValads
@BrunoValads 4 ай бұрын
What an amazing research, I'm really impressed of how far you could get thru this visual reverse engineering
@Lin_The_Cat_
@Lin_The_Cat_ 4 ай бұрын
Omg that transition from the analogue TV static-y shot of the win screen to the crisp digital emulated shot of the win screen at 1:36 was brilliant.
@theantipope4354
@theantipope4354 4 ай бұрын
Truly a lovely piece of reverse-engineering analysis, & it brought back a lot of memories! I never worked on Atari 2600 code, but I did work on lots of code for other 6502 based machines of that era. Thanks for the excellent work.
@ElTaitronAnim
@ElTaitronAnim 3 ай бұрын
Amazing work! And the ingenuity of old-school programmers like this is really impressive too.
@greatcanadianmoose3965
@greatcanadianmoose3965 4 ай бұрын
This is actually really insane, I love this!
@potaxpotax
@potaxpotax 4 ай бұрын
This is a work of art. And I mean both the game AND your video. Thanks.
@ladydelorean
@ladydelorean 4 ай бұрын
That is a gorgeous work of art, thank you. 💞
@jchadwick4918
@jchadwick4918 4 ай бұрын
The fact that you managed to unpack that much of the code using only understanding of assembly op codes, operation lengths and bit masking is… awesome. Same vibes as archaeologists trying to decrypt worn away texts from millennia past. You never cease to amaze.
@Richie086
@Richie086 3 ай бұрын
Wow you are one smart dude! Glad people like you exist and are willing to explain how this works to the rest of us.
@klaudialustig3259
@klaudialustig3259 4 ай бұрын
This video was a great Christmas present!
@creightonholub
@creightonholub 4 ай бұрын
Thank you for doing a video on one of my oddly favorite childhood games!
@Color-Theory
@Color-Theory 4 ай бұрын
Thank you for sharing! Amazing as always!
@jajoothecoolman
@jajoothecoolman 4 ай бұрын
THE CAPTIONS ARE WELL MADE THANK YOU
@AFourEyedGeek
@AFourEyedGeek 3 ай бұрын
What ever this is, I want more of it, its fantastic. Great work.
@mrtwinky2007
@mrtwinky2007 4 ай бұрын
Awesome work as always, Keep it up
@Longuncattr
@Longuncattr 4 ай бұрын
34:18 It's not true that $9Exx is a "garbage" location, it would just be a mirror of something (in this case, a ROM address), since the 6507 variant of the 6502 has only 13 address lines but still computes 16-bit addresses internally. Now of course Yars' Revenge is a plain old 4K cartridge with no extra RAM, so storing to an address with A12 set truly is nonsense for this game, but it's worth mentioning. Plus, some particularly advanced bankswitch schemes do interesting things in exploiting the various sorts of incomplete address decoding that the VCS has. Very cool video!
@sa3270
@sa3270 4 ай бұрын
Atari put out a magazine called Atari Age back in the 80s, and sometimes they would include some high-level technical explanations related to their hardware and games, and I could swear that they mentioned once that the Neutral Zone in Yar's Revenge was based on the game's code.
@metalpachuramon
@metalpachuramon 3 ай бұрын
Well, what else can I say that everyone else hasn't said but kudos! This is the kind of rabbit hole that I like diving into, it's so refreshing seeing some true software and hardware engineering in action!
@roastinNAVY
@roastinNAVY 2 ай бұрын
Currently going to school for electrical engineering technology and covering microprocessors right now, so this is pretty cool. As an avid player of this in my '90s childhood, because I got it as a hand-me-down from my Aunt/Uncle, that's also a huge plus.
@StephenBryant
@StephenBryant 4 ай бұрын
It's amazing to see the switching in real time of the graphics while pausing the video and using , and . to go back and forth. (You go into this right after I added the comment LOL )
@BabaNamKevalamGames
@BabaNamKevalamGames 3 ай бұрын
this guy is amazing, im glad i just subscribed to thism channel.
@NicolasGasnier
@NicolasGasnier 4 ай бұрын
Impressed by the patience and deductions you put in all your videos. Well as for decoding the code that way, I can only agree with you that no one back in the days would have tried. If someone had the electronic & programming skills to understand the inner working of the console, it would have been much much easier to do a ROM dump.
@KurtSchwind
@KurtSchwind 4 ай бұрын
Amazing analysis. Well done.
@vlasiy5550
@vlasiy5550 4 ай бұрын
Thank you for that video. This is incredible how much we can say about game code, using one visual effect. Sorry for my English
@ohnoitschris
@ohnoitschris 4 ай бұрын
Your English in your comment was perfect.
@srb2er
@srb2er 4 ай бұрын
NEW RGME DROPPED!! LET'S GOO!!! Interesting design choice of them using the code as a actual game design choice
@ozzie_goat
@ozzie_goat 4 ай бұрын
No idea who did your captions, but they are on point my guy
@Tethrarxitet
@Tethrarxitet 3 ай бұрын
The captions here are interesting. And quite amazing.
@jummy0
@jummy0 4 ай бұрын
oh these color-coded subtitles are _exquisite_
@lorensims4846
@lorensims4846 3 ай бұрын
Wheee! This was fun! Yeah, I can see how some kid playing Yar's Revenge could get excited upon learning that the source for the game was being used to draw the Neutral Zone. But I agree. In the early '80s there really wouldn't be a practical way to decipher that code even to the extent you were able to. This all takes me back to when I learned everything I ever needed to know about computer science on my Atari 800. I really appreciate that text you used for your displays. It looks like a real small font from back in the day. It looks great! Atari 8K BASIC was so slow that we were practically forced to use 6502 Assembly Language pretty quickly. I never had an Atari VCS (2600), I saw computer games as graphics demos for me to figure out how they were done. That "Neutral Zone" looks like the kind of noise I often saw to represent energy fields in the better games. It's not at all surprising that the most convenient source of "noise" would be the machine code.
@ZeroHourProductions407
@ZeroHourProductions407 4 ай бұрын
Imagine making your source code the template for game mechanics. This game was before my time, but that is a madness i can admire!
@gordontaylor2815
@gordontaylor2815 4 ай бұрын
If you've watched the "racing the beam" episode, you'll understand that the devs back in the day had to be a little bit mad to be doing this kind of thing. This is why you'll often see them affectionately called terms like "wizard" and "magician" on fan forums; it's a tongue-in-cheek way of describing what they are. :)
@canebro1
@canebro1 4 ай бұрын
They essentially need to create random numbers, so what better way than just randomly grabbing from your source code? You know it will be sequence of non-zero numbers, and as long as you do a little fiddling it is essentially unreadable. Plus, as he said at the end, anyone willing to actually decode it probably deserves it, and should probably be hired.
@CptJistuce
@CptJistuce 4 ай бұрын
There's a lot of crazy going on in VCS coding. When you have 4Kbytes of ROM, 128 bytes of RAM, and a CPU that almost has to draw the image on the TV in real-time... you get creative in terrifying ways.
@phantom-chan2940
@phantom-chan2940 4 ай бұрын
oh god that viewers like you thank you thing sent me back years
@claudiusraphael9423
@claudiusraphael9423 4 ай бұрын
"Elementary, Watson." ... Nice voyage into deduction. Thx for sharing!
@SkyanUltra
@SkyanUltra 4 ай бұрын
this is really cool! honestly i would love a whole video on the process of reverse engineering the code from games. i always wondered how people managed to crack the code for Super Mario 64, OoT, and Paper Mario 64
@endrankluvsda4loko172
@endrankluvsda4loko172 4 ай бұрын
I must say I'm diggin the jist of your jibe! It's got me all fired up over here!
@MrMemetic321
@MrMemetic321 3 ай бұрын
Underrated channel
@matthewmangan6251
@matthewmangan6251 4 ай бұрын
4:00 to 6:00 is some of the most awesome analysis I’ve ever seen
@lis6502
@lis6502 12 күн бұрын
oh how i love such deep dives into obscure techniques. Especially on 6502 which thanks to von Neumann's memory architecture doesn't distinct between "program" and "data" segments. Therefore we can experience wonders such as self modifying code to save some memory or even executing some graphics data which happen to be valid machine code if read correctly. Leaving all that aside i am astonished by sheer amount of work put in here. Until you showed exact code drawing neutral zone i though that color might be at least missing byte's nibble. Also representation of data-code as blocks and guessing how PC would look like after it was very clever. Amazing video.
@fyrewire
@fyrewire 4 ай бұрын
loved this video. It inspired me to add some things to my logic gate cpu
@dholmlund
@dholmlund 2 ай бұрын
At 3:47 - I like how your frame counter numbers are coloured with player 1 and player 2 yars colors!! :D It's cool how each Yars is a different color! :)
@obscurity3027
@obscurity3027 2 ай бұрын
Yars Revenge was the game that got me hooked on video games when I was 6 years old. I’ve never looked back.
@sesemuller4086
@sesemuller4086 4 ай бұрын
That topic came out of nowhere! Good video though!
@reizig
@reizig 4 ай бұрын
You are insane and I love it.
@byWilliamJMeyer
@byWilliamJMeyer 4 ай бұрын
Thank you! Most of it goes over my head but I still think it's cool.
@SunsetBear
@SunsetBear 4 ай бұрын
your voice is total ear candy in this video, can’t put my finger on why but my Brain is Soothed
@ShadyHero
@ShadyHero 4 ай бұрын
1:15 this brought me back to when I was little, thank you
@DanielGolding1337
@DanielGolding1337 4 ай бұрын
Incredibly cool video.
@proxy1035
@proxy1035 4 ай бұрын
godamn i'm an idiot. i already watched this video thanks to being on the patreon but when i saw a notification from the channel my first thought was "ooh, 2 videos in one month!" and it took me a second to realize that it's just the public release of the same video
@DarkMoe
@DarkMoe 4 ай бұрын
so indeep video, amazing as always .. and extending the request for a video explaining The last ninja rendering backgrounds for the C64
MissingNo.'s Glitchy Appearance Explained
21:20
Retro Game Mechanics Explained
Рет қаралды 1 МЛН
Bugs & Glitches of High-Level NES Tetris
53:21
Retro Game Mechanics Explained
Рет қаралды 144 М.
ВИРУСНЫЕ ВИДЕО / Мусорка 😂
00:34
Светлый Voice
Рет қаралды 10 МЛН
I MADE A CARDBOARD SWING!#asmr
00:40
HAYATAKU はやたく
Рет қаралды 19 МЛН
1 класс vs 11 класс (рисунок)
00:37
БЕРТ
Рет қаралды 4,5 МЛН
NAD 705 Dead Display
17:55
12voltvids
Рет қаралды 560
I built my own 16-Bit CPU in Excel
16:28
Inkbox
Рет қаралды 1,3 МЛН
The Arcade Game that Crashes Itself for Anti-Piracy Reasons
29:57
Retro Game Mechanics Explained
Рет қаралды 323 М.
Intro to Hypercubing
5:59
HactarCE
Рет қаралды 2,1 М.
Racing the Beam Explained - Atari 2600 CPU vs. CRT Television
38:26
Retro Game Mechanics Explained
Рет қаралды 264 М.
I Made a Graph of Wikipedia... This Is What I Found
19:44
adumb
Рет қаралды 2 МЛН
The Insane Engineering of the Gameboy
17:49
Real Engineering
Рет қаралды 1,4 МЛН
Reverse Engineering RollerCoaster Tycoon | How does it work?
38:54
Nathan Baggs
Рет қаралды 222 М.
Dear Game Developers, Stop Messing This Up!
22:19
Jonas Tyroller
Рет қаралды 668 М.
Optimizing my Game so it Runs on a Potato
19:02
Blargis
Рет қаралды 238 М.
#vr #gaming #funny #virtualreality #viral #viralvideos #youtubeshorts #comedy
0:28