Emulation Online
Emulation Online
  • 15
  • 9 983
How the NES controller works
In this video we'll learn how the controller works on the NES. Whether you're building an emulator, or want to write games for the NES, this will tell you everything you need to know.
This is #12 in a series where I build a NES emulator to better understand the system.
If you'd like to learn more about the NES, check out the first video in this series: ua-cam.com/video/G1NyJv1LEKI/v-deo.html
Enjoying this content? Consider like and subscribing! New videos released weekly. Sharing this video with others that might enjoy it helps even more.
The next part of this series is currently only available in article form, on my site:
www.emulationonline.com/systems/nes/apu-audio/
Patreon: patreon.com/EmulationOnline
Article on my site (includes full source code mentioned in video): www.emulationonline.com/systems/nes/controller/
00:00 - Intro
00:38 - The NES controller port
01:20 - Shift Registers in the Standard Controller
02:14 - MMIO Registers
03:55 - Writing a controller program
06:00 - Outro
Tools I Use and Recommend (these links support the channel):
Security Screwdriver Set: amzn.to/3ZlApH6
Desoldering Iron: amzn.to/3Tcve8p
Hot Air Rework Station: amzn.to/4gmj339
#emulation #nes #programming #emulator #retrogaming
Переглядів: 273

Відео

How the NES draws backgrounds
Переглядів 4812 місяці тому
In this video we'll see how the NES manages to store and draw impressive background graphics with surprisingly little storage space. This is #11 in a series on building an NES emulator. If you'd like to learn more about the NES, check out the first video in this series: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Enjoying this content? Consider liking and subscribing! New videos released weekly. Sh...
Drawing Characters on the NES
Переглядів 3802 місяці тому
As we continue to learn about the NES for our emulator, its time to look at sprite rendering. This is used for characters and other dynamic information on the screen. This is #10 in a series on building an NES emulator. If you'd like to learn more about the NES, check out the first video in this series: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Enjoying this content? Consider like and subscribing...
Emulating Color on the NES
Переглядів 2,7 тис.2 місяці тому
In this video we'll learn how the CPU of the NES controls the colors used for graphics. This is #9 in a series on building an NES emulator. If you'd like to learn more about the NES, check out the first video in this series: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Enjoying this content? Consider like and subscribing! New videos released weekly. Sharing this video with others that might enjoy it...
Chiplab Prototype: Remote controlled 6502
Переглядів 1913 місяці тому
I'm building a "Chiplab", to allow easily running experiments against potentially undocumented digital integrated circuits. First up I'm building the system to support the 6502, a popular and well documented classic microprocessor. This is video number 2. Introduction here: ua-cam.com/video/W6JaUERHlM0/v-deo.html As a first step, I have the 6502 booting and loading some hardcoded reset vector. ...
Decoding NES Images for Emulation
Переглядів 3953 місяці тому
Ever wonder how the NES handles images? In this video we'll decode some image data, and see how the tricks of the NES enabled it to achieve great graphics while reducing cost. This is #8 in a series on building an NES emulator, but stands on its own. If you'd like to learn more about the NES, check out the first video in this series: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Patreon: patreon.com/...
Emulating a NES Cartridge
Переглядів 4433 місяці тому
Now that we've seen what cartridge hardware looks like, we'll see what it takes to emulate a basic cartridge. This is part of a series on building an NES emulator. First video: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Patreon: patreon.com/EmulationOnline 00:00 - Intro 00:52 - INES Format Introduction 02:18 - INES header walkthrough 05:33 - Loader explanation 05:53 - 6502 Reset Vector 07:23 - run...
Peeking inside a NES Cartridge
Переглядів 5623 місяці тому
Now that we've wrapped up the 6502 CPU Emulator, we're ready to see how the system gets its program code and data. This brings us to the cartridge. This is part of a series on building an NES emulator. First video: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Patreon: patreon.com/EmulationOnline 00:00 - Intro 00:24 - Cartridge Internals 02:24 - Cartridge Pinout 04:27 - System Memory Map 05:07 - NROM...
ChipLab Introduction - Better testing for Emulator Development
Переглядів 1913 місяці тому
In this video I talk about my plan to develop a system to make it easier to run tests against integrated circuits. 00:00 - Introduction 00:15 - Top 3 Emulation Challenges 01:15 - ChipLab Idea 02:20 - Rough design 03:16 - Planned Features 04:32 - Request for Feeback & Conclusion Tools I Use and Recommend (these links support the channel): Security Screwdriver Set: amzn.to/3ZlApH6 Desoldering Iro...
NES CPU Emulation Gotchas
Переглядів 9463 місяці тому
Before we wrap up the CPU for our NES emulator, lets take a look at a few tips for testing and fixing bugs. This is part of a series on building an NES emulator. First video: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Patreon: patreon.com/EmulationOnline 00:00 - Intro 00:14 - Testing 01:22 - nestest.nes 02:32 - nestest.log 03:25 - Quirk #1 - 6502 Page Crossing 05:27 - Quirk #2 - Memory Collisions ...
Building a NES Emulator #4 - CPU Extras
Переглядів 1 тис.4 місяці тому
Now that we have an outline for the CPU (6502) emulator, there are just a few more details we need to understand. Then we know all we need to implement the CPU emulator. This is part of a series on building an NES emulator. First video: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Patreon: patreon.com/EmulationOnline 00:00 - Intro 00:40 - Negative Numbers (Two's Complement) 03:23 - Status Register 1...
Building a NES Emulator #3 - CPU Emulator Design
Переглядів 5444 місяці тому
Now that we know how to give commands to the CPU, we can start designing the code that emulates the 6502 CPU from the NES. This is part of a series on building an NES emulator. First video: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Patreon: patreon.com/EmulationOnline 00:00 - Intro 00:20 - CPU Steps 01:19 - 6502 Instruction Decoding 02:45 - 6502 Addressing Modes 03:30 - Zero Page Addressing 05:20...
NES Programming (Assembly Language)
Переглядів 6434 місяці тому
This time we learn how the 6502 CPU in the NES avoids slowdowns, and what a computer program looks like to the CPU. This is part of a series on building an NES emulator. First video: ua-cam.com/video/G1NyJv1LEKI/v-deo.html Enjoying this content? Please like and subscribe. I aim to release one video each week. 6502 Instruction Set Reference: www.masswerk.at/6502/6502_instruction_set.html Tools I...
Building a NES Emulator #1 - NES Architecture
Переглядів 1,1 тис.4 місяці тому
Lets build a NES emulator to learn about this awesome classic game system. This is part one of a series of videos. Here we'll look at the basic components of the NES, and learn a little about how the CPU works. Enjoying this content? Please like and subscribe. I aim to release one video each week. Patreon: patreon.com/EmulationOnline Chapters: 00:00 - Intro 00:40 - NES Components 03:16 - Binary...
EmulationOnline - Channel Intro
Переглядів 1945 місяців тому
I'm making emulators and sharing the process. If you're interested in emulators, old game consoles, or just like watching things get built, you're in for some fun. First up I'm going to be documenting the creation of an NES emulator. If you have suggestions for other content you'd like to see, please let me know in the comments! Music: Cue Ball (fb-cueball.it) by christofori modarchive.org/inde...

КОМЕНТАРІ

  • @daewvey
    @daewvey День тому

    These videos are so in-depth and super easy to understand. I'm really suprised you don't have a lot more views. Please keep up the good work! I hope you'll become a lot more popular!

  • @sodapopinski9922
    @sodapopinski9922 12 днів тому

    Ok this has been bugging me for ever, so you have the sprite loaded in memory say the same position as ur arrow so as the scan line makes it where the 8x8 tile it will jump to memory output for sed sprite for 8 pixels turn off for the rest of the line drop to next scan line continue with the background until it reaches line 2 of the 8x8 draw 8 more pixels shut off and drop to the next line and repeat until all 8 x8 tile is drawn? And this is done with multiple sprites

    • @EmulationOnline
      @EmulationOnline 12 днів тому

      The actual approach used in the hardware here is pretty tricky. There's a clever dance the PPU performs in order to make the most of limited hardware. Before any scanline, the PPU will determine which sprites will be drawn on the next line. The information for the 8 winning sprites for that line are placed in some internal memory on the PPU (often called secondary OAM). When the PPU is drawing to the screen, it is loading internal shift registers based on what will be drawn for the next 8 pixels. It then shifts out these buffered values, and selects from either this (possibly empty) sprite or the background. This process is often called "sprite evaluation" if you want to look for more details.

    • @sodapopinski9922
      @sodapopinski9922 10 днів тому

      @@EmulationOnline thanks I have trouble in my head imagining the speed of how this happens.. I mean the timing at these speeds is crazy especially with no buffer--so basically it’s using the shift registers to make a continuous stream…. Per scan line then usiwa the blanking period to setup the next scan line… as long as ur fast enough and can keep the timing this avoids needing a whole page of buffering and vram

    • @EmulationOnline
      @EmulationOnline 10 днів тому

      @@sodapopinski9922 Yep, the shift registers help render at high speed. Each byte from vram has info for several pixels. Fill the shift register from vram, then shift the bits out just as they are needed for rendering.

    • @sodapopinski9922
      @sodapopinski9922 10 днів тому

      @@EmulationOnline is it in code we keep track of the vertical bits and use the shift register to keep track of the 8 bits horizontal in an 8x8tile So basically I’m wondering it knows what tile it wants how does it keep track how many lines from the tile have been drawn is there a register to keep track that you he system checks every scan line

  • @Lifeismeaningless-mu2sz
    @Lifeismeaningless-mu2sz 17 днів тому

    Amazing channel. Finally someone on the internet that actually explains emulation, where most just say: just read the docs bro!

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

    Are the 4x4 chunk a meta block?

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

      I've seen a lot of different names applied to this. The key idea is that 2x2 tile areas share a palette, and 4x4 tiles or 2x2 of those earlier chunks are represented per byte in the attribute table.

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

    Thank you been looking for nes sprite videos.

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

    Ah the page crossing behavior is an interesting oddity in the 6502. Nice explanations!

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

    Awesome videos! I love how you explain this stuff. For sure subscribing!

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

    Nice! Cool demo game you made towards the end.

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

    Great video, keep it up with this serie

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

    I love these videos, please keep making more! This is a tad more complicated than Gameboy but thanks to you I'm understanding it

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

      @@bonciutalentadv7599 Thanks, glad you're enjoying them!

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

    Keep it up

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

    We're almost done with graphics on the NES! Coming up we have the background images and some details into how timing works. Hope you're enjoying the series so far, let me know what you think and if there's anything you'd like to see more of in these videos.

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

    Cool stuff bro!

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

    Great stuff 👏 👍🏾

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

    you should get a new mic (also maybe stay a bit away from the mic)

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

    Awesome

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

      Thanks! Make sure you check out the other videos in the series. And more are in the works.

  • @jerico2794
    @jerico2794 3 місяці тому

    ha) Already did similar on rp2040 and even ended up running apple 1 original code with tv output)

    • @EmulationOnline
      @EmulationOnline 3 місяці тому

      Very cool. How did tv output work on the apple 1?

    • @jerico2794
      @jerico2794 3 місяці тому

      ​@@EmulationOnline I apologise) of course, not TV output, but composite video to be correct)

  • @yuniorcabrera975
    @yuniorcabrera975 3 місяці тому

    That's awesome, looking forward to testing this!

  • @GhillieDMC
    @GhillieDMC 3 місяці тому

    this is an amazing yet easy to understand video, surely the creator is really popular- oh.

    • @EmulationOnline
      @EmulationOnline 3 місяці тому

      Glad you liked it! I'm going to keep making these videos, so maybe one day :)

  • @danielgriffin4624
    @danielgriffin4624 3 місяці тому

    Cheers :)

  • @hawthornrabbit
    @hawthornrabbit 3 місяці тому

    3:14 Maybe a pointless nitpick, but I have tried to train myself not to use decimal names for hexadecimal numbers - so 0x20 is "two-zero", rather than "twenty". It's analogous to the way people say "one-zero" for 0b10, rather than "ten".

    • @EmulationOnline
      @EmulationOnline 3 місяці тому

      Thanks for the suggestion! I certainly want to avoid ambiguity or misleading. I try to make sure any numbers are written on screen, to help remove any questions as to what I'm talking about. My hunch is that people would prefer to read these numbers anyway. I'll try digit-at-a-time pronunciation in the future. The main downside is that it takes longer to communicate.

  • @hawthornrabbit
    @hawthornrabbit 3 місяці тому

    This is a great introduction! Very easy to follow and I love the use of a text editor as a presentation tool :)

  • @qjmi
    @qjmi 3 місяці тому

    i really like your videos!

  • @maximnumberone
    @maximnumberone 3 місяці тому

    Great series, keep going. At 6:28 seems like problem with rendering source video, blank video stram

    • @EmulationOnline
      @EmulationOnline 3 місяці тому

      Thanks for pointing this out, it should be fixed in a bit. *edit* Fixed now.

  • @BlendiGoose
    @BlendiGoose 3 місяці тому

    as a lua dev i was confused for a second when you typed "~="

    • @EmulationOnline
      @EmulationOnline 3 місяці тому

      Oh, thanks for calling this out. For anyone else confused, I mean roughly equal or approximately equal. I haven't done much lua. I didnt realize it means not-equal there, which is actually the opposite of what I meant.

  • @GameBacardi
    @GameBacardi 4 місяці тому

    Hopefully the-one-who-name-I-won't-announce do not ghostban these videos. Keep up good work.

  • @starleaf-luna
    @starleaf-luna 4 місяці тому

    it makes sense! I forgot 6502's stack is limited to one memory page and was confused why a pointer was just 8 bits long XD

    • @EmulationOnline
      @EmulationOnline 4 місяці тому

      Yep definitely confused me initially too.

  • @jamescarrico1233
    @jamescarrico1233 4 місяці тому

    Hell yeah brother I'm on board Very interested to see it all the way through. Have you built an NES emulator before?

    • @EmulationOnline
      @EmulationOnline 4 місяці тому

      Welcome! I haven't built a NES emulator before, but built emulators a for a few other simple systems. For the videos, I make sure to describe parts that are already fully working. This helps ensure my descriptions are correct.

  • @oglothenerd
    @oglothenerd 4 місяці тому

    I love low-level stuff like this!

  • @r1konTheAutomator
    @r1konTheAutomator 4 місяці тому

    Ive been into reverse engineering and software engineering for over 20 years. Your initial explaination of how a cpu and a calculator are similar, and how code is just instructions on which calculator buttons to press automatically is quite awesome

  • @yuniorcabrera975
    @yuniorcabrera975 4 місяці тому

    You had my curiosity, now you have my attention

  • @yuvarajcena26
    @yuvarajcena26 4 місяці тому

    Make more videos

  • @ModReplay
    @ModReplay 4 місяці тому

    Another great explanation video. Keep them coming!

  • @jordanschick1601
    @jordanschick1601 4 місяці тому

    Very interesting, cant wait for the rest.

  • @ModReplay
    @ModReplay 5 місяців тому

    Looking forward to it! Nice song choice btw.