The 6502 CPU Powered a Whole Generation

Show video

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

Show video