The 6502 CPU Powered a Whole Generation!
I have made countless videos about old computers from the 1980s, but in this episode we're going to have a look at the processor that powered them all, or at least most of them. And then at the end of the video we're going to have a quick chat with Bill Mensch, one of the original creators of the 6502 microprocessor The 1980s brought us affordable home computers for the first time ever, arcade machines, and of course video game consoles. There was one microprocessor that seemed to be ubiquitous. One processor that seemingly powered an entire generation. And that processor was the 6502 by MOS Technology. I want to start with the standard 6502. There were at least a dozen variants of it that were more or less compatible, but might not be pin-compatible, and we'll come back to those later. So, let's start by having a look at some of the computers that used the official, standard 6502. These would be the Commodore PET, and the VIC-20 The original Apple II and II+. Also
the Atari 400 and 800 home computers, the Oric Atmos, most of the Acorn computers like the Atom and Electron series, and of course the BBC micro. There were also dozens of arcade machines that used the 6502, more than I want to cover here. But if you've ever played Asteroids, Centipede, Missile Command, Tempest, crystal castles, or ever really stepped into an arcade of any sort, you've probably played some machines that ran on the 6502. All of these systems used a standard 6502 processor. And what I mean by that is,
you can take the CPU out of say a VIC-20, stick it in a very different kind of computer, such as an Apple II, and it will just work. You can even pull the 6502 out of a Commdore disk drive and stick it in an Atari 400, and it would work just fine. It's strange today to think of all of these different incompatible computers running the same exact chip. However, the scope of the 6502 reaches far beyond these. When you start looking
at the variants, the list becomes huge. So, what is a variant exactly? Well, these are other versions of the 6502 that have either added some extra features, or in some cases even removed features in order to make the chip either smaller or cheaper. They all run the same machine code as the original, but they aren't necessarily pin compatible, meaning you can't pull one out of one type of machine and then stick it in a different kind of machine and expect it to work. Computers that used variants would be the Commodore 64 and 128, and the Plus/4. Also Apple used variants in the Apple III and IIgs. Atari used them in the XL and XE series of home
computers, and even inside their disk drives. Another popular use of the 6502 was of course, in game consoles. This would include the Atari 2600, 5200, 7800, and the Lynx handheld. More importantly Nintendo used a variant in the NES, as well as the Super Nintendo, and the TurboGrafx 16. But what might surprise you would be some of the not so obvious places you can find 6502 processors. Ever played with a Furby, yeah, those run on a 6502. How about a Tamagotchi, surprise, those run on a 6502. In fact, there are countless toys that have a 6502 core, but they are really hard to catalog for you because they are usually embedded into an epoxy blob these days, making it really hard to tell just by opening up a toy. Here's one that may surprise you. If you have
a pacemaker or any sort of implanted technology in your body, it is very likely running a 6502 inside. There are even 6502 processors orbiting the planet inside satellites, and I believe they were used in few minor systems on the space shuttle and international space station, although I don't know if there are still any in use there today. And apparently the terminators of the future also run on 6502 as the computer code seen on screen is 6502 assembly instructions, and if Futurama is to be believed, then a thousand years from now, robots like Bender will be operating on 6502 processors. The point is, unless you have been living under a rock your whole life, everyone on the planet has at some point interacted with this processor. But, let's go back in time to the beginning. Back
to 1975. Many notable things were happening. Gerald Ford was President of the USA. Disco music was at its peak. The Rubiks cube went on sale. The movie Jaws just came out. And, the Vietnam war was coming to an end. Oh, and The 8-Bit Guy was born, that's me. But in the world of technolgy, there were also many exciting things happening that year. Video Cassette Recorders for home users entered the market. The Altrair home computer
kit was introduced. A little software company called Microsoft was started. And of course, more importantly for the purposes of this video, the 6502 Microprocessor went on sale. For the first year, it was being sold for $25 a unit, which was crazy cheap compared to its nearest competitor, the Motorola 6800, which sold for $175 a unit. At this time it was mostly being used in hobby and enginering projects like the KIM-1 computer, and later in Steve Wozniak's little computer, the Apple 1. But, let's skip forward to 1977, a year mostly remembered for the debut of the Star Wars franchise, was also the year the 6502 really took off. Computers like the Apple II and Commodore PET entered the market. Two of the big-3 home computers of that year used the 6502. But the real volume would come, not from a home computer,
but from the Atari 2600 video game console. Atari would sell nearly 400,000 units of the 2600 in 1977 alone, and eventually over 30 million of them over the life of the product. Needless to say, this was just the tip of the iceberg. but now let's have a look at some of the features of this chip, and see how it worked. I want to start by talking about how the CPU communicates with other chips. 8 of the pins on the CPU represent the data bus. Each of these can be either on or off, which represent a 1 or zero. Hence, this is an an 8-bit data bus. So,
for illustration we'll connect this to the data bus of a RAM chip. This way the CPU and the RAM chip can send and receive 8-bit numbers. But there's another important line that the CPU controls. This is the read/write line. If the line is on, its means to read and thus the data is expected to travel this direction. If the line is off, then it means write, and the data will travel in this direction instead. And so this line also has to connect to the RAM
chip so both the CPU and the RAM chip understand the direction data is flowing at any given time. OK, hopefully all of this makes sense so far. Of course, most any motherboard is going to be far more complicated than this, because there will be a lot more chips like I/O chips, video chips, etc. And they all connect to the same data bus. So the question is, how do they all talk over the same data bus at the same time without signals colliding with each other? Well, they don't. They are all allowed to listen to the bus, but only allowed to talk on the
bus when the CPU wants to talk to them. So how does that work? Well, each chip on the bus has a CS line. It stands for Chip Select. Sometimes it may be called an Enable line. Either way, it does the same thing. When this line is activated, that means the chip is allowed to talk on the bus. That chip could be a RAM chip, ROM chip, I/O chip, video chip, whatever. So the next question is, what determines when that chip is activated? OK, we have the data bus, and the read/write line. But we also have something called the address bus, which on the 6502 is 16 bits. So, while the data bus can communicate in numbers between 0 and 255,
the address bus can represent numbers between 0 and 65,535, or another way of saying that is 64 Kilobytes. The size of the address bus determins the maximum memory of the computer, not counting banking schemes, which we can get into later. Have you ever wondered why memory modules, when they increase to the next size, are always double the previous size? They increase in powers of two. Well, the reason for that has to do with binary addressing. So, imagine you have a RAM chip
that is 16 megabytes in size. It would need 24 address lines to be able to access all of that RAM. And that means a minimum address of zero, or a maximum address of, well, a bunch of ones. So, if you wanted to make the chip bigger, there's no way to really add fractional amounts of RAM. You would have to add an additional address line. In doing so, you've also added another number to your binary number, which will always result in multiplying the max value by two. So, back to our CPU address bus. The way this works is it goes into a bunch of decoding logic,
which I'm not going to get into here, but that logic will take the address and determine which of the chips will be selected, whether it is RAM, ROM, or a video chip, etc. Now, much of what I've shown here could be applied to most any CPU. But now I want to tell you a few things that sets the 6502 apart. So, let's compare with the Z80 , another popular CPU of the era. It was quite common for 6502 systems to run at 1 Mhz, and Z80 systems to run at 4 mhz. Now, you might be tempted to think the Z80 would be 4 times faster. But it's not. Why is that? Well, for one thing let's look at the clock pulse. Imagine this is your 1 mhz clock pulse. Most CPUs
would only be doing work at the top of the clock pulse like this. However, the 6502 also does work on the bottom of the clock pulse like this, essentially doing twice as much work per clock cycle than a typical CPU. But that isn't the only thing that makes a difference. Most instructions require more than one clock pulse to complete and the 6502 requires fewer cycles on average than other CPUs of the era to complete an instruction. The Z80 was especially inefficient because, despite being an 8-bit CPU, it's ALU, or "Arithmetic Logic Unit" is only 4 bit, and thus most calculations require extra clock cyclces to complete any 8-bit math.
So, let's compare 4 common CPUs from the 1980s at their most common clock frequencies. If you look at raw performance, the 6502 actually competes well against the other CPUs even at its much lower clock speed of 1 Mhz. The moment you double it to even 2 Mhz, it suddenly outperforms just about everything except the 68000. Most systems ran at 1 Mhz, but there were some that ran just a bit faster. Atari 2600 ran at 1.19 Mhz
Basically all subsequent Atari computers and game consoles ran at 1.79 Mhz. interestingly enough, the original Nintendo also ran at 1.79 Mhz Apple III ran even faster at 1.8 Mhz The BBC Micro ran at 2.0 Mhz as did the Commodore 128, but only in 80 columns mode. The Apple IIgs ran at 2.8 Mhz The Super Nintendo 3.58 Mhz
And the fastest machines from the time period that I know of are the Apple IIc Plus and some clones like Laser 128 ex2, which ran at 4 Mhz. I know 4 Mhz doesn't sound like a lot, but that was some serious speed. unfortunaetly, there was little to no software that really took advantage of that. So the best examples we really have of what could be done at the time would be to look at the Super Nintendo. The problem is, it's hard to say exactly what
aspects of these games you can really credit the CPU, versus some of the advanced graphics co-processors that were also in the system. In fact, some of these games, like starfox, even used a 3D coprocessor located in the cartridge itself. The Apple IIgs might be a better system to look at since it had much less in terms of graphics acceleration, thus relying primarily on the CPU for most of the work. of course, another problem is the Super Nintendo and Apple IIgs are technically running 65816 CPUs, which is the 16-bit version of the 6502, which we're going to come back to here in a little bit. That being said, one interesting comparison
is Wolfenstein 3D. This is the SNES version. And while there is some amount of graphics acceleration on the SNES, the CPU is really doing the heavy lifting of rendering this game. Now let's look at the Apple IIgs version. It uses the exact same processor, but lacks most of the
accelerated graphics features. That's why the game is scaled down to the center of the screen, even though technically the level of detail is exactly the same as the SNES version. And you may notice it runs a little slower, which makes sense because the CPU in the Apple IIgs is slower. But now check this out. This is the same version but here the Apple IIgs has an 8 Mhz
accellerator in it. So, same type of processor, just running almost 3 times faster. In fact, with this CPU you can expand the rest of the screen out and it still plays relatively decently. Modern versions of the 6502, made by WDC are actually rated to run at 14 Mhz, and I've heard of people overclocking them to run even faster. The commander X16 runs at 8 Mhz, and thus might be a good example of what can be done. Planet X16, which is a real-time-strategy game I wrote for the Commander X16, is a somewhat interesting example. Believe it or not,
it runs just about perfectly, even if I jumper the computer down to 4 Mhz. And that's why we're also working on a port for the Super Nintendo which is close enough to that speed. I hope to show you more of this in a later episode, but I think it will be a very interesting game for the SNES. A better example might be the KG3D demo on the Commander X16, running a bog standard 8-bit 6502 at 8 mhz. As you can see, this 3D environment runs very smoothly at 8 Mhz. Now, for those that grew up with IBM PCs, imagine trying to run something like this on a turbo-XT at 8 mhz. It's just not going to happen. And so, I hope this better illustrates that CPU
megahertz isn't a good method for comparing speed between different types of CPUs. Let's switch gears for a moment and talk about some technical details, specifically math. So, a lot of people might ask the question, "if the processor can only deal with 8 bit numbers as in numbers from 0 to 255 how can it possibly do math operations on numbers larger than that?" Imagine you have two 16-bit numbers you need to add together. Well, it can't do it all at once.
So, as a programmer you'll need to add the least significant bytes together and get the result. But adding these two values exceeds 255, so that will set the carry bit. So the next addition you do, over here will take that into account and there you go, you'll get your 16 bit result. So really, the only downside to working with larger numbers on the 8bit CPU is that it does require more instructions, which makes the code longer and more cycle counts than performing the same operation on, say a 16bit CPU. Well, one thing you may find particularly interesting is the 6502 actually has no instructions for multiply or divide. But, I'm sure you've guessed, there is a way to accomplish that. Actually, more than one way.
The easiest way to multiply is with bit shifting. There is an instruction to shift all of the bits to the left or right. So, take this binary number, which is equal to 26 in decimal. If you shift everything to the left by one bit, then you essentially multiplied the number by two. You can do it again, and now you've multiplied by 4, and again and now you've multiplied by 8. Likewise,
you can shift a number to the right, and you can divide by 2, divide by 4, divide by 8, or here even divide by 16. So, multiplying or dividing by powers of 2 is very easy to do, and very fast. But let's take the original number and let's say you need to multiply it by a number that is not a power of 2, such as the number 6. Well, you can accomplish that by shifting twice to the left, that gets you multiply by 4. Then you take the original number and shift it just once
to the left, that multiplies by 2, and then you can add those together, and you have your result. This method is also fairly fast. And of course, the last method is by simply using a chart. You just store all of the results in RAM as part of your code. And then let's say you need to multiply 5 times 9, you can just look up the answer in the table, and there you have it. So, you might think these methods are overly complicated or slow. But, here's a little
interesting anecdote for you. When I started coding Planet X3 on the 8088 microprocessor, at first I was really excited that I finally had use of built-in commands for multiply and divide. But, one of the things I realized once I started trying to optimize the game for speed is that using bit shifts or lookup tables was actually significantly faster than using the built-in multiply and divide commands. So, I ended up actually stripping out all of those multiply and divide commands and replacing them with the same techniques I had been using all along on the 6502. So,
it turns out um those multiply and divide commands really aren't all that useful after all. Let's take a look at how the regular 6502 compares to some of the variants. The Atari 2600 used a processor known as the 6507, which as you can see is a smaller package having fewer pins. I'd
like to draw your attention to the address bus. As you can see there are only zero through 12, instead of 0 through 15. That reduces the addressable memory down to 8 kilobytes instead of the usual 64. That is also why Atari 2600 cartridges are typically limited to 8 KB, unless clever banking schemes are used. Now let's look at the 6502C, otherwise called the Sally chip. This chip was used in Later Atari computers like the XL and XE series,
and game consoles like the 7800. It's basically the same as a regular 6502. These 4 pins over here are re-arranged. The main reason for this is that they wanted to add the HALT signal so that the CPU could temporarily be halted so that the video circuits could use DMA. Now let's look at the 6510, which was used in the Commodore 64. As you can see, basically every pin
is in a different place. But the main difference is these P0 through P5. These are essentially general purpose IO pins. In the Commodore 64 they are used for memory banking. This was essentially a cost saving measure to add this into the CPU as it eliminated extra circuits on the board.
OK, so I'm not going to cover every variant as that would take forever. You can see here on Wikipedia a list of all of the variations of the CPU. But I just wanted to give you an idea of the ways in which most of them differ. But, I do want to take a look at the Western Design Center 65c02. This launched in 1983 and it's the only variant to my knowledge that is still in production today. This CPU was used in the Apple IIe, and IIc, Laser 128, and the Atari Lynx, among others. One of the big differences is the instruction set. This is the standard 6502
instruction set. There are some undocumented opcodes, but we won't get into that. The 65c02 added these new opcodes. Most of these are designed to make life easier on the programmer, as well as make execution a little faster. Older code will still run on this CPU, it just won't be making use of any of these new instructions. In fact, I want to show you something a lot of people don't know about. This is an ordinary Commodore VIC-20, and I'm going to remove it's
CPU. It's just a standard 6502, which is to be expected. And here we have a brand new 65c02 from Western Design Center. And what I'm going to do is insert this into the VIC-20, and power it on. And well, if you thought it was going to work, then I guess you'll be disappointed. The reason it doesn't work has nothing to do with the new opcodes, but rather the pin arrangement. If you compare the two processors, you'll see they are almost identical pin arrangements. In fact,
only these 3 pins are different. I'm not going to go into great detail on what these do. But, let's see if we can make this work in the VIC-20. I'll start by bending up two of those pins that were different. I'm just going to leave one disconnected,
and the other I'm going to use a resistor and tie it to 5V, pulling it high. I know, it doesn't look terribly elegant. But let's stick it back into the VIC-20 now and see what happens. Check it out, it works. At this point the VIC-20 now has additional instructions available to it if
you wanted to write code to support it. And even though this CPU can run at 14 mhz, it is obviously only going to run at the clock speed the VIC-20 gives it, which is still 1 mhz. So there isn't a huge advantage to using this. I run a number of games and didn't have any compatibility issues, although I'm sure there's probably at least one or two out there that were using some undocumented opcodes that might fail with this CPU inside. OK, now let's take a look at the 65c816. This chip debuted in 1985, and it is a significant upgrade to the 6502. This chip is 16-bit,
sort of. You see, there's no standard way to define how many bits a CPU is. Some people judge it based on how wide the data-bus is. In this case, the data-bus is still 8-bit, just like the 6502. But internally, it can do 16-bit math. It also has a ton of other new features. In fact, here are those opcodes we looked at earlier for the 65c02. Well,
the 816 supports all of these opcodes. In fact, when it boots up, it starts in 8-bit mode, thus essentially operating exactly like the 65c02. There are a few small differencees, I'm sure some of the keyboard warriors will want to point out. For example, Some 65C02s made by rockwell and WDC, had these extra instructions here. I didn't show them earlier because not all varients supported these, and they aren't used very often. But the 816 definitely doesn't support these and instead
adds all of these when operating in 16-bit mode. When performing 16-bit math, that means instead of requing 6 or 7 instructions to handle problems like this one half at a time, it can do the whole thing in a single instruction. This sort of thing can really speed up execution for certain types of software. But, perhaps a more important aspect of the chip
is the larger address bus, let me show you how that works. The pin arrangement on the 816 is very similar to the 6502, but it's a little bit more complicated to get to work in an older computer because as you can see there are now 9 pins that are different from the original. but you may be counting up the address lines and seeing that there are still only 0 through 15. So how can it access more than 64K, you might ask? Well, when you put the chip into the correct mode, the data-bus pins will pull double duty. So when the clock cycle is high,
they are data lines like usual. but when the clock is low, they are become address lines 16 through 23. Thus giving it a 24-bit address, capable of addressing up to 16 MB of RAM, a massive amount more than a typical 8-bit computer. So, can you install one of these into something like a VIC-20? Well, sort of. You're going to need a ltitle adapter board like this one, which are remarkably hard to find at the moment. But in theory you can pop this into your VIC-20
or other 8-bit system and instantly have a 16-bit capable computer, except that you won't have access to the extra RAM. Perhaps a better example, something I can actually show, is the Commander X16. By default it comes with a 65c02, but it actually supports the 816. I keep one around for testing and I have a big label on it so I don't get it
confused with my other CPUs. But yeah, the X16 runs just fine with the 816 installed, and in theory if people wanted to write code that made use of the 16-bit aspect of it, they could. I think the 816 was a really great processor, but it only ever saw widespread use in the Apple IIgs and the Super Nintendo. So, the last thing I have for you guys is, I finally man managed to sit down and have a conversation with Bill Mensch, one of the original creators of the 6502 and the 816 processor, and I had a few questions for him.
So, Bill, tell me who are the current, modern-day customers of the 6502. OK, so we have a lot of interest in your world, meaning the hobby world. And so we sell boards into that. and we sell chips into that. And as you know, you and Ben Eater, Ben Eater has been especially active in that world. And then we have some others, Stefany I think you know. But in any event. I find it hard
to believe that just the retro market keeps the whole 6502 business alive. There's got to be more other modern customers. And the other thing that we still get royalties off of is life-support. so, we keep millions of people alive one heartbeat at a time, with the 65c02. Really? Why do you feel like the 6502 architecture didn't last much beyond the 16-bit era with like the Apple IIgs and Super Nintendo? Is it just because everyone was going to MS-DOS compatibility, or was there some other reason? Well, I specifically was recommending ARM. OK. So when my licensees asked what I was doing at 32-bit, I said, "Well, I have some specifications for 32 bit. I'm happy to share them with you. But, I don't think that's what you want." Well, if you've made it this far then you've probably learned more about the 6502 than you probably ever wanted to know. But, hopefully at least you have a little bit of understanding of
the significant role that the CPU has played over the last 40 years and also why it is my favorite CPU. But, that's all I have for now, so as always thanks for watching!
2024-03-28 06:50