How NES Games Are STILL Made in 40KB

Поділитися
Вставка
  • Опубліковано 1 бер 2024
  • The Nintendo Entertainment System (released as the Family Computer in Japan) is the world's most iconic home game console. With a Ricoh 2A03 CPU based on the popular MOS 6502, it had 2KB of RAM, 2KB of VRAM, and with the built in Picture Processing Unit and Audio Processing Unit, was used to run some of the world's most popular games ever released.
    Although early NES games were design for 40KB cartriges (32KB of PRG ROM and 8KB of CHR ROM), later advancements led to larger chips being used, and more game content being added, but the system itself remained the same. In order to bridge this gap, Mapper Chips were developed to allow the system access to certain parts of the PRG or CHR ROM sections.
    I've created a new NES title to show how programming an NES game from scratch can be accomplished. No Internet for the NES is available now: notin.tokyo/nointernet
    Development help:
    www.nesdev.org/wiki/Nesdev_Wiki
    Further reading:
    www.copetti.org/writings/cons...
  • Ігри

КОМЕНТАРІ • 211

  • @soryabuscompany
    @soryabuscompany 2 місяці тому +127

    I've never seen a more thorough technical explanation of the NES in such a short time

    • @gblargg
      @gblargg 2 місяці тому +7

      Came here to say that as well. It sounds like it will be a quick gloss over, but then covers the important conceptual details of how subtle things like split-screen scrolling work. Well-done.

  • @Arcad3n
    @Arcad3n 2 місяці тому +80

    The game boy color has one of my all time favorite visual styles for a retro console. Games like Mina the Hollower demonstrate how great it looks, it’s so appealing! Excited for that episode.

  • @JadeLombax
    @JadeLombax 2 місяці тому +48

    I got into coding super tiny games a few years ago. I've made scaled-down Mario & Zelda games in about 1KB, working on some ideas for Metroid.

    • @InkboxSoftware
      @InkboxSoftware  2 місяці тому +10

      That's sounds way cool, do you have any stuff I can check out?

    • @JadeLombax
      @JadeLombax 2 місяці тому

      ​@@InkboxSoftwareI have an Itch page w/ some of my games (Jadelombax is my username there), tried to post a link, but UA-cam keeps deleting my responses.

    • @themadmallard
      @themadmallard 2 місяці тому +5

      1kb? what platform are they made for?

    • @JadeLombax
      @JadeLombax 2 місяці тому

      ​@@themadmallard Been using Pico-8 due to its ease of use and short syntax. It's not assembly, but things can still get crazy cryptic when you're optimizing bytes.

    • @s3rverlord
      @s3rverlord 2 місяці тому +10

      You can imagine that game in your brain and play it.

  • @ego-lay_atman-bay
    @ego-lay_atman-bay 2 місяці тому +100

    The end really caught me off guard. It was such a scott the woz ending.

    • @itskdog
      @itskdog Місяць тому +3

      *3D Dot Game Heroes

    • @ego-lay_atman-bay
      @ego-lay_atman-bay Місяць тому +6

      @@itskdog Yeah, I know, but I feel like that song is most commonly associated with scott the woz.

    • @Therap3
      @Therap3 Місяць тому +1

      ​@@itskdogwow I had no idea it was from that game. Thanks!

    • @dagaffalads
      @dagaffalads Місяць тому +1

      A Scott vid was recommended after this lol

  • @essayharper
    @essayharper 2 місяці тому +8

    The way the Famicom/NES handles data will never fail to amaze me

  • @bassguitarbill
    @bassguitarbill 2 місяці тому +32

    I love your NES videos, but as I actually have a bit of experience programming on the DMG, I'm looking forward even more to your future projects!

  • @shinyagumon7015
    @shinyagumon7015 2 місяці тому +186

    My guess is black magic or programming if there's a difference between the two 😂

    • @error.delete4945
      @error.delete4945 2 місяці тому +31

      a great programmers code is like a master close up magicians act: nothing flashy under the surface, super efficient and seamless.
      The average programmers code is like a magician you hired last minute for your kids birthday party: it kind of works sometimes but is otherwise a total mess of copied tricks and a pigeon in a hat, and the pigeon is dead and useless but they kept it in the act anyway.

    • @dacueba-games
      @dacueba-games 2 місяці тому +9

      "Is this too much voodoo?"

    • @angeldude101
      @angeldude101 2 місяці тому +17

      As a programmer and self-proclaimed sourcerer, no; there isn't a difference.

    • @designator7402
      @designator7402 2 місяці тому

      ​@@error.delete4945 I will not remove the KillPidgeon() method from my code, no matter who the IRS sends!

    • @KertaDrake
      @KertaDrake 2 місяці тому +2

      Simply speak the binary incantations and technomagic will occur. You use hex for hexes, of course.

  • @StereoMadnessss
    @StereoMadnessss 2 місяці тому +58

    Assembly is just amazing really on how small its code can be when it's compiled

    • @williamdrum9899
      @williamdrum9899 2 місяці тому +14

      6502 in particular is tiny. Most modern cpus use 4 bytes per instruction at all times but we have much more room now so it hardly matters. NES code size is mostly negligible when it comes to file size. It's the data tables that hog the most cartridge space

    • @bradallen8909
      @bradallen8909 Місяць тому +2

      Assembly isn’t compiled. It’s assembled.

    • @rethardotv5874
      @rethardotv5874 Місяць тому

      Shouldn’t be C with modern compilers as efficient as writing assembly?

    • @rya3190
      @rya3190 Місяць тому

      ​​@@rethardotv5874If you cut out bigger libraries (or go without a standard), and remove the elf file cushions, you can get C down to assembly sized programs. A guy made a QR-based snake game a little while back and was finding his assembly program was larger than his trimmed down C.
      edit: I should probably note, this is likely due to the optimization for a very common architecture, x86. I'm not sure how efficient one for say the 6502, PowerPC, or Risc-v would be...

  • @stefanmilicevic5322
    @stefanmilicevic5322 2 місяці тому +21

    The amount of effort you put into each programming project is truly inspiring. Keep up the great work!

  • @FloatingSunfish
    @FloatingSunfish 2 місяці тому +14

    The NES will always be my favorite console.
    It helped save the video game industry!

  • @alexandredecarvalho4357
    @alexandredecarvalho4357 2 місяці тому +3

    We need more of these!! :D thank you for your explanations!

  • @Roid33
    @Roid33 2 місяці тому +36

    Scott the Woz outro whatt

  • @famitronic9870
    @famitronic9870 2 місяці тому +3

    This is one of the best summarized explanations on how to build an nes game from scratch that I’ve seen! Thanks for the great video. 👍

  • @Willfa_
    @Willfa_ 2 місяці тому +8

    can't wait to see what you do on the gameboy. Love your videos!

  • @mcleodautomation
    @mcleodautomation Місяць тому +1

    Your audio is SOO good - keep it up! Love the dry mic sound tbh.

  • @Controllerhead
    @Controllerhead 2 місяці тому

    What a wonderful explanation, sure with i had this video when i started years ago. Great work!!!

  • @merman1974
    @merman1974 18 днів тому

    That was a brilliant explanation and a fun game as a result. Great work.

  • @huskenator857
    @huskenator857 2 місяці тому +3

    Love your videos dude, can’t wait to see you unpack the gameboy color. Also Scott The Woz jump scare

  • @MoustiluigiRandom
    @MoustiluigiRandom 2 місяці тому +1

    Amazingly well explained.

  • @Adiee5Priv
    @Adiee5Priv 2 місяці тому +6

    Sidenote: Image data is NOT loaded into vram, PPU reads image data directly from chr rom, that's why image data is stored in a separate chip from program itself

    • @ricarleite
      @ricarleite 2 місяці тому +1

      But vram stores the pallet and table name information doesn't it

    • @Adiee5Priv
      @Adiee5Priv 2 місяці тому +2

      @@ricarleite yes, but that's something else

    • @ricarleite
      @ricarleite Місяць тому

      @@Adiee5Priv I mean he didn't claim vram stores a bitmap representation of the screen

    • @Adiee5Priv
      @Adiee5Priv Місяць тому

      @@ricarleite ah, yes, i was reffering to a one scene, where it was visualised that way, but it seems like i didn't include the timestamp

  • @Sinistar1983
    @Sinistar1983 2 місяці тому +7

    Can't wait to see what game you make on the GBC. Its a personal favorite of mine to code on as well. And with how awesome GB studio is its now more accessible than ever to work with. And in case you're wondering my GBC game is called Eternal Memory.

    • @Bobbias
      @Bobbias 2 місяці тому +2

      It's a shame their visual programming interface is awful though. Makes doing anything reasonably complex a nightmare without learning the actual scripting language.

    • @Sinistar1983
      @Sinistar1983 2 місяці тому +1

      @@Bobbias I don't think its that bad honestly plus it's actually really competent at making more complex games. I've managed to create a pseudo real time reflection using just the stock visual scripting.

  • @1008md
    @1008md 2 місяці тому

    That was amazing. I didn’t understand a lot but was still mesmerized!

  • @thechosenone729
    @thechosenone729 23 дні тому

    Amazing video as always thanks for your work.

  • @IraKane
    @IraKane Місяць тому +1

    I have been programming games for over 10 years now, C#, gdscript and back in the days of the NES I programmend in BASIC using an MSX....but I'm nobody! You are my hero!🤪

  • @williamdrum9899
    @williamdrum9899 2 місяці тому +2

    Later games used "bank switching" to fit more code/data than the NES's 64k address space would typically allow

  • @mukulnag1578
    @mukulnag1578 2 місяці тому +1

    This is amazing... As some how now works closely with cpu hardware and firmware learning about the limitation that we went through is fascinating... And i see how some of the stuff/limitations from 90 is till there in mordern cpu... We just find more ways to go around them

  • @skRapKlan
    @skRapKlan 2 місяці тому

    Nice work! Thanks for the cool video!

  • @Holital
    @Holital 2 місяці тому +2

    Yooooo I love your channel!!!

  • @cdkw2
    @cdkw2 21 день тому

    I would love to see the gbc videos, good luck!

  • @golvellius6855
    @golvellius6855 Місяць тому

    Incredible😮 i learned a lot in this video❤❤❤

  • @Squigdude13
    @Squigdude13 2 місяці тому +1

    went from a random recommended video to wanting to get one of those romhack carts from back in the day you could load games onto

  • @dinaariaudio4944
    @dinaariaudio4944 Місяць тому

    ive been making a 32kb game for pico-8 and now i appreciate the wizardry that is needed to truly craft something playable within the limitations

  • @codeway4374
    @codeway4374 Місяць тому

    Nice vid !

  • @aplanebagel
    @aplanebagel Місяць тому

    Well explained !

  • @jumbledfox2098
    @jumbledfox2098 2 місяці тому

    What an epic video!

  • @Mobik_
    @Mobik_ 2 місяці тому +1

    The good thing about the GBC is that you can actually use cool things, like C instead of Assembly. I did the iconic DVD bouncing logo and made it run into original hardware (GBC and GBA)

    • @InkboxSoftware
      @InkboxSoftware  2 місяці тому +3

      You can use C for the NES, too, I just prefer assembly

  • @spg3331
    @spg3331 2 місяці тому

    Loved playing the game boy color as a kid!

  • @ehippo1
    @ehippo1 2 місяці тому

    Nice video ❤

  • @lazysh508
    @lazysh508 4 дні тому

    really helpful

  • @maazali6283
    @maazali6283 2 місяці тому +1

    Your my inspiration to become a better programmer

  • @OmeedNOuhadi
    @OmeedNOuhadi 14 днів тому

    Congratulations!

  • @deltapi8859
    @deltapi8859 Місяць тому

    beautiful svg art in the video.

  • @EWARS_2
    @EWARS_2 2 місяці тому +5

    Scott the Woz outro?! (Breakout?)

  • @Guilhermeabcd
    @Guilhermeabcd 2 місяці тому

    loved it!

  • @anon_y_mousse
    @anon_y_mousse 2 місяці тому +1

    If you were using C, it'd be awesome to have a C23 compliant compiler to handle resource embedding. Towards that end, the oscar64 project intrigues me. It's intended for the C64, but it shouldn't be too difficult to modify it for other 6502 based systems.

  • @bootime265
    @bootime265 2 місяці тому +1

    time for a cool video

  • @Tavg123
    @Tavg123 2 місяці тому

    great video

  • @VideoGamer945
    @VideoGamer945 2 місяці тому

    I learned something today!

  • @alexela_
    @alexela_ 2 місяці тому +1

    Am I on time?! I'm enjoying it already

  • @intangiblematter_misc
    @intangiblematter_misc Місяць тому +1

    I wasn't going to comment, just a really solid video.
    Then the Scott the Woz ending whiplash hit

  • @NegaafellagaTV
    @NegaafellagaTV 2 місяці тому

    Really cool!

  • @eboatwright_
    @eboatwright_ 2 місяці тому

    Very cool!

  • @adryanlucas096
    @adryanlucas096 2 місяці тому +10

    Clicked as soon as i saw the notification 🔥🔥🔥🔥🔥 ur videos are always the best!

  • @Clancydaenlightened
    @Clancydaenlightened 2 місяці тому +1

    Hint they didn't do it with only 32k rom and ppu rom
    Kirby on nes was around a 1megabyte cartridge

  • @coolbrotherf127
    @coolbrotherf127 Місяць тому +2

    It's so cool that Nintendo invented golf.

  • @HollowProject
    @HollowProject 2 місяці тому

    Yay! Waiting for GBA videos!

  • @9a3eedi
    @9a3eedi 2 місяці тому +2

    You'd be surprised by how much you can do if you have a couple of kilobytes of storage space, if you just didn't have any of the bloat of modern software

  • @FernieAriel
    @FernieAriel 2 місяці тому

    1:40 that’s the music from Goal 2, one of the best soccer games of all time. I’d recognize it anywhere.

  • @Mrwaffles-gr3so
    @Mrwaffles-gr3so Місяць тому

    I totally understood everything.

  • @ShinoSarna
    @ShinoSarna 2 місяці тому +1

    You inspired me to try to make a version of Minecraft for NES.

  • @MarkRayers
    @MarkRayers 15 днів тому

    Super mario bros was made in assembly and most of the prg rom isnt full because compiled assembly code isnt that big and they moved the compiled assembly to the rom and they made sure it didnt go to the blank prg area so that is how super mario bros was made in 40k (a lot of the rom is 0s)
    Thank you for reading.

  • @RareSun
    @RareSun Місяць тому +1

    Can't wait to watch the episode where you program a 3D Mario for the GameCube in 10 years.

  • @tomyyoung2624
    @tomyyoung2624 2 місяці тому

    Yes internet!

  • @cube2fox
    @cube2fox 2 місяці тому

    Now I'm really interested in the difference between NES and GBC. Especially black cartridge games look quite similar to NES games, apart from the resolution.

  • @Storin_of_Kel
    @Storin_of_Kel 2 місяці тому +2

    Explain to us how Final Fantasy on the NES was made in only 40 KB please

    • @mathchessdnd
      @mathchessdnd 2 місяці тому +2

      Inkbox forgot to mention memory mappers. I'm dumb, so please accept this attempt: 40KB is the "working memory" of the NES. Final Fantasy had something like 256KB of data. Games could hold more data, as long as they had a mechanism to control what part of data the NES could see (called something like a "memory mapper chip".) The NES can only see 40KB at once, but the game decides what 40KB its seeing. It's like having some books open on your desk -- When your desk is full, you can put away one book to make room for another. For instance, the overworld might be handled by one "book" with instructions to handle camera movement and entering caves/towns. Going from the overworld into a battle, it could put away "the overworld book" to open "the battle book" with instructions to process battles and display monsters.

    • @flameofthephoenix8395
      @flameofthephoenix8395 Місяць тому

      @@mathchessdnd Towards the end of the video he did mention this.

  • @sippingthepeachsoda
    @sippingthepeachsoda 2 місяці тому +1

    seems like the audio was fit into 40 kilobytes too😂😂

  • @taagoallas3336
    @taagoallas3336 2 місяці тому +2

    It's always a good day when Inkbox uploads!

  • @KingF-hi4wg
    @KingF-hi4wg 2 місяці тому

    I’d like to see this guy cover sega master system homebrew

  • @lafcursiax
    @lafcursiax 2 місяці тому

    What a great idea for a homebrew NES game! It would have been cool if a game like this had been built into the NES so we could have played something even without a cartridge inserted. I wonder how feasible it would be for someone to hack that feature into an NES...

  • @ChaossX77
    @ChaossX77 Місяць тому

    Real original ending music.

  • @mwk1
    @mwk1 Місяць тому

    Szanuję! 😎

  • @DerKlemm-Crafter
    @DerKlemm-Crafter 2 місяці тому +2

    You are one of the best programmers I have ever seen, though I don't understand much😅

  • @user-fu1dp3xl9t
    @user-fu1dp3xl9t Місяць тому

    would you be willing to do a video with an in depth explanation of mappers? I've been digging around on nes games that are over 40kb, but I'm having trouble grasping the concept

    • @InkboxSoftware
      @InkboxSoftware  Місяць тому

      I've mentioned mappers in this video here: ua-cam.com/video/Lf1jer8y6Pc/v-deo.html
      Basically a mapper facilitates bank switching, where a section of memory can be switched out for another portion of memory from the cartridge.

  • @Sky_kidharry
    @Sky_kidharry 15 годин тому

    A few swag genesis games utilize alternating color palettes as a way to save space as frames of a sprite are stored in individual colors of the sprites, with the limitations of the nes having it so sprites can only alternate 3 colors, this can allow only 2-3 sprites created by alternate color palettes but nonetheless could this be utilized so background sprites can be “animated” if you can change the colors of the palettes?

  • @modlich_303
    @modlich_303 2 місяці тому +3

    what about the Minecraft? since you are moving on from NES, and that Minecraft is on NES, what's gonna be with that?

  • @hirschlord341
    @hirschlord341 Місяць тому

    Pls can you review the megaman 2 ,3 and ducktales architecture ?

  • @johneygd
    @johneygd 2 місяці тому +1

    No mentioning why 40KB games are still made by homebrewers,except at how nes games are made along with some history behind it,mmmm.

  • @FordTransitvan
    @FordTransitvan Місяць тому

    Very interesting but also too complicated for me, love it though

  • @fredharding5087
    @fredharding5087 2 місяці тому

    I had very little understanding of anything in this video but enjoyed it all the same

  • @enderben2805
    @enderben2805 24 дні тому

    eyyyy
    I love this topic

  • @chobies5383
    @chobies5383 2 місяці тому +1

    SCOOT THE WOZ OUTRO MUSIC?

  • @cdkw2
    @cdkw2 21 день тому

    3:56 I wouldn't be surprised if they were morse code lol

  • @PanoptesDreams
    @PanoptesDreams Місяць тому +2

    Restrictions birth creativity

  • @OnionChoppingNinja
    @OnionChoppingNinja Місяць тому

    While it's true developers always prefer to have more resources available I think deliberetly limiting oneself on the amount of resources one can use is a virtue.
    We live in a world where 16GB of ram 8gb of vram 4core+ 3ghz CPU's is becoming the norm, yet the state of AAA gaming is worse then ever. yet the best new releases out there are the AA and Indy games that still run fine on 10+ year old systems.

  • @Mobik_
    @Mobik_ 2 місяці тому

    Scott the Woz?! Is that you at the end?!

  • @chrisray9653
    @chrisray9653 2 місяці тому

    Before the libraries of 50k lines of code that put a dialogue screen up.

  • @heterodoxagnostic8070
    @heterodoxagnostic8070 2 місяці тому

    nice

  • @nunyabeeznutz5286
    @nunyabeeznutz5286 2 місяці тому

    Fun fact you know what is also 40 KB? the maximum allowed size for metadata for images. Hmm makes you think...

  • @LettersAndNumbers300
    @LettersAndNumbers300 2 місяці тому

    What about a game like Shadowgate? How did they fit that?

  • @maxasaurus3008
    @maxasaurus3008 Місяць тому

    When I saw the no internet screen I was certain it was a segue to a vpn commercial

  • @minirop
    @minirop 14 днів тому

    golf on mars has been demaked on the NES? 😲

  • @Birb64
    @Birb64 2 місяці тому

    That sine jump idea makes so much since now. I used to wonder how jumps looked the way they do, I'm gonna figure out which takes less time to process for most hardware.

    • @thespinningcube
      @thespinningcube 2 місяці тому

      It would be more physically accurate for the jump to follow a parabolic path rather than a sinusoidal one, and that’s actually not terribly hard to do on a computer, especially for a character’s physics.
      Just track the character’s vertical velocity, use the velocity to move the character vertically by adding it to the current vertical position every frame, and subtract a constant amount from the velocity every frame to simulate acceleration due to gravity. This last part is what makes the character slow down on the way up and speed up on the way down.

  • @jonsena1373
    @jonsena1373 15 днів тому

    are you still working on the 8 bit minecraft project?

  • @deltapi8859
    @deltapi8859 Місяць тому

    what language is the source code shown? never seen if and endif in assembly.

  • @potatogameryt
    @potatogameryt Місяць тому

    Wait is it actually 60 frames per second for a CRT? I thought it was 24?

  • @ErdrickHero
    @ErdrickHero Місяць тому +1

    I hope you're not just using GB Studio. A channel like this needs real programming.

    • @InkboxSoftware
      @InkboxSoftware  Місяць тому +2

      I've doing it all in assembly for now, but I might use some music tools later since making music for these machines is like writing a whole program on its own

  • @mrfun216
    @mrfun216 2 місяці тому +3

    Can you make this game for the Atari 2600?

    • @InkboxSoftware
      @InkboxSoftware  2 місяці тому +2

      Sure, why not?

    • @mrfun216
      @mrfun216 2 місяці тому

      @@InkboxSoftware will you do it in a video?

    • @InkboxSoftware
      @InkboxSoftware  2 місяці тому +2

      No, I've never touched the Atari 2600

    • @mrfun216
      @mrfun216 2 місяці тому

      @@InkboxSoftware you could use a tutorial like Truttle1 did

    • @retroboi128thegamedev
      @retroboi128thegamedev 2 місяці тому +1

      @@mrfun216 i can't believe that truttle1's video on the atari came out only like less than a day before this video came out

  • @deusexmaximum8930
    @deusexmaximum8930 Місяць тому +1

    1:56 is or isn't

  • @SendFoodz
    @SendFoodz 2 місяці тому +1

    I feel like that open license ending music is unwritten-rule copyrighted lol

  • @geckoo9190
    @geckoo9190 2 місяці тому

    What?, the controller data in the nes is a fkn byte?, that knowledge would have saved me a lot of troubles back in the days when I spent hours trying to fix my controllers.

    • @InkboxSoftware
      @InkboxSoftware  2 місяці тому

      Actually, the controller is polled and relays each button's current state in a sequence. That process takes quite a few clock cycles, but you can take that sequence and fit it all on one byte for reference.