The Real Story of Hacking Together the Commodore C128
szczys writes "Bil Herd was the designer and hardware lead for the Commodore C128. He reminisces about the herculean effort his team took on in order to bring the hardware to market in just five months. At the time the company had the resources to roll their own silicon (that's right, custom chips!) but this also meant that for three of those five months they didn't actually have the integrated circuits the computer was based on."
The people I knew with 128s back then all used the 64 mode but used the 128 as an excuse to buy a better monitor. I never knew anyone using the CP/M mode.
Mostly random stuff.
Bil will be teaching a class at the Vintage Computer Festival East next spring. He also lectured about the 128 and Commodore repair at the same event in 2012. Details are on c128.com.
He is claiming a lot of "firsts" that I would swear were in my Apple ][e prior to Winter '85...
Want to do a crazy program you can't write on modern computers?
What?
Simply loop through a sequence of poking two random numbers, and incrementing a number that you print.
What?
Every time, the system will do different things.
What ?
If you did this on a modern computer, eventually it'd corrupt system files and the thing wouldn't boot.
WHAT?
It makes you wonder why modern OSes aren't hardened with the theory: No matter what the user does, allow the computer to boot up safely next time.
You're an idiot.
CLI paste? paste.pr0.tips!
Ah, but you weren't a true C64 department-store hacker until you entered the couple of POKEs that disabled RUN/STOP and RESTORE keys before entering that loop.
Want to do a crazy program you can't write on modern computers?
What?
Yeah, can't is a blatant lie.
Yeah, that's trivial to do on a modern computer too. A trivial loadable kernel module in linux could do so, for example.
Simply loop through a sequence of poking two random numbers, and incrementing a number that you print.
What?
That is what it says, write a random value to a random memory location in a loop.
Every time, the system will do different things.
What ?
Of course it will. Sometimes you random memory location will be the memory mapped to the screen and a character will show up. Sometimes you'll change a return address on the stack and run some random code.
If you did this on a modern computer, eventually it'd corrupt system files and the thing wouldn't boot.
WHAT?
That's true, eventually you'll write over some file data just before it is flushed to disk and trash a file required for booting. Or screw with memory the file system is using and mess that up on the next write (though given the use of checksums that's pretty unlikely). The key is eventually since you'll have to run it a *lot* of times before it does something like that before crashing itself.
And of course not when running as a normal user process.
It makes you wonder why modern OSes aren't hardened with the theory: No matter what the user does, allow the computer to boot up safely next time.
You're an idiot.
Yes he is.
Computers that have the OS on ROM unsurprisingly aren't susceptible to making the system unbootable by screwing with boot files. The same is true of a modern computer hardwired to boot off of ROM as well though. And of course it makes upgrading that base OS essentially impossible (short of replacing the ROM, or actually using an EEPROM - and of course if software can do the upgrade then the random memory setting could also cause it to happen and screw up booting)
True. I was one of those guys initially. I was a CS major in 1985 and my computer experience consisted of mainframes, CP/M machines and IBM PCs. Anything else was a "toy". I had a new girlfriend who suggested I could do my CS homework at her house because her dad "had a computer". She didn't know what kind it was, but he was an engineer so I figured it was probably pretty nice. I took her up on her offer, figuring that the suggestion was nothing more than a ploy to get me to come over to her house. When we got to her house she took me to the room he used as his office and pointed. I literally guffawed. It was a Commodore 64. She was somewhat offended at my reaction and I quickly apologized. Over the next few weeks I was a frequent visitor to her house and I began playing with the C64. The more I worked with it, the more respect I had for the platform. I especially liked the serial interface and how components could be daisy-chained. Far from being a toy, the C64 had the capability to do some pretty advanced stuff. And it was a LOT less expensive than an IBM PC. Eventually, the girlfriend became my wife, and her dad gave me the Commodore after he moved on to a PC. The wife and I broke several years ago. I still have the C64.
Proverbs 21:19
a couple of weeks later the marketing department in a state of delusional denial put out a press release guaranteeing 100% compatibility with the C64. We debated asking them how they (the Marketing Department) were going to accomplish such a lofty goal but instead settled for getting down to work ourselves.
"First they came for the slanderers and i said nothing."
I was in 5th or 6th grade, and I woke up to a new computer in my room. The printer immediately broke and I noticed the desk was half up-side down. My dad had assembled it and the desk in the dark, during the night, while I was asleep (I'm a heavy sleeper). He was no technician, but I appreciated the effort. I traded c64 games with kids at school and stacks of 5.25 floppies via mail. Commodore games were fantastic; much better than NES. Junior year of High School, I finally had the initiative to figure out what my dad had done to the printer, and it turned out to be a simple problem that I fixed. I used 80 column mode to type and print essays for school for the next two years. Much praise to my old man. Granted, first year of college and he helped me acquire a 386 with Windows 3.0, which I had for three years, then built my own. I'll never forget my C=128. Thanks, dad!
I was a big fan, and a game developer for the C64. Those were the days that a machine could be fully understood by an untrained person with a knack for programming. When the C128 came out, I was interested, especially in the 80 column screen and CP/M software compilers. But there were too many limits on the machine (no hard drive easily added, no real OS, etc.) and it didn't feel like enough of an advancement over the C64. My grandfather did buy one, and I had some time with his, but that never really sparked much either. My next machine would be the Amiga, and as soon as that become somewhat affordable by a college student (the A500), I never looked back.
RM
}#q NO CARRIER
THe 6502 was an amazing processor. the Apple II was also a 6502. Unlike it's near contemporaries, the 8086 and Z-80 (and 6800), the instruction set was reduced. It had only 2 data registers (A,B) and two 8 bit address registers ( X Y) and fewer complicated ways to branch. Instead it effectively memory mapped the registers by using instructions like, offset Y by A, treat that as an address and get the byte at that location. Because it could do all that in one clock cycle, This effectively gave it 256 memory mapped registers. It also didn't have separate input lines for perifprials, and instead memory mapped those.
Nearly every instruction took a microsecond. Thus while the clock rate was 1 Mhz, it was much faster than a 4 Mhz 8080 series chip since those could take multiple cycles to do one instruction. Few memory chips (mainly static memory) could keep pace with that clock rate so the memory would inject wait states that further slowed the instruction time. The 6502's leisurley microsecond time was well matched to meory speeds. Moreover, on the 6502 only half the clock cycle was used for the memory fetch. This left the other half free for other things to access memory on a regular basis.
The regularity of that free memory access period was super important. it meant you could do two things. First you could backside the video memory access onto that period. On the 8080s using main memory you could often see gltiches on video displays that would happens when the video access was overridden by the CPU access at irregular clock cycles. As a result most 8080 series based video systems used dedicated video card like a CGA or EGA. Hence we had all these ugly character based graphics with slow video access by I/O in the Intel computer world. In the 6502 world, we had main memory mapped graphics. This is why the C64/Amiga/Apple were so much better at games.
This regular clock rate on the main meory had a wonderful side effect. It meant you could use Dynamic memory which was faster, cheaper, denser, and MUCH MUCH lower power than static memory. With the irregular access rates of the 8080 refreshing a page of dynamic memory requird all sorts tricky circuitry that trried to opportunistically find bus idle times to increment the dynamic refresh address, occasionally having to halt the CPU to do an emergency refresh cycle before the millisecond window of memory lifetime expired. As a result, the 8080 seris computers like Cromenco, Imsai, altair and Northstar all had whopper power supplies and big boxes to supply the cooling and current the static memory needed.
So the C64s and Apples were much nicer machines. However they had a reputation of being gaming machines. At the time that didn't mean "high end" like it does now. It mean toys. the Big Iron micros were perceived as bussiness machines.
Oddly that was exactly backwards. But until Visicalc, the bussiness software tended to be written for the 8080 series.
I think it was this memory mapping style rather than formal I/O lines to dedicated cards for periphrials (keyboard decoders, video, etc..) that lead apple to strive for replacing chips with software. they software decoed the serial lines (rather than using USART chips) they soft sectored the floppy drives rather than using dedicated controller chips, etc... And that was what lead to making the macintosh possible: less hardware to fit in the box, lower cost chip count, lower power more efficient power supplies.
Eventually however the megahertz myth made the PCs seem like more powerful machines than the 68000 and powerPC.
Some drink at the fountain of knowledge. Others just gargle.
This is such a Slashdot story :)
"A girl invited me to her house on several occasions. Each time, I spent more and more time being impressed with the Commodore 64"
My opinions are my own, and do not necessarily represent those of my employer.
Well, you know, there was other stuff going on, as her father and step mother were out of town that winter, but this is Slashdot, not Penthouse forum, so...
Hey, I eventually married the girl. ;-)
Proverbs 21:19
Excellent, my wife's been on me to upgrade my C64
Table-ized A.I.
Since I designed, wirewrapped, and programmed embedded 6502 and 8080 system in that era I am well prepared to assess your claims. In a nut shell you are an arrogant tard and the original poster is figuratively accurate inexact.
Your post is really bizarre.
Ok, with you there.
Well, that's just a bunch of crap: http://www.obelisk.demon.co.uk/6502/reference.html (look at the "Cycles" column.)
What the original poster was likely saying, since it becomes clear later in the article, was that all the 6502 instructions were divided up into alternating cycles of memory fetches and internal calculations with an exact period of 1 microsecond for those. The 8080 series would use 1,2,3,4 and more with wait states cycles for an instruction with no regular pattern (in terms of future predictable times) of when the bus would be busy.
So you are wrong, have a reading comprehension problem, and are an ass about it.
The Wikipedia article on the 6502 indicates that DRAM access times were on the order of 250ns - 450ns. In particular, 250ns access times are well-matched to 4 MHz clock rates; do the math. At 1 MHz, 250ns DRAM has time to go make a sandwich before it needs to supply the next memory cells.
Sigh, again you have a reading comprehension problem. The original author was discussing static memory. Moreover, the cycle time for memory access always involves some overhead. The time when the CPU reads the data bus needs to occur after the bus has settled which is not at the start of the memories data valid period. But most of all 250ns memory was rare and expensive. Most computers in that time period did use wait states. Why do you think processors even allowed wait states?
Again you are being an ass about this as well.
No. Then, as now, video display glitches were caused by updating video RAM directly outside of a VSync pulse. You could just as easily get video glitches on 6502s as on 808x machines.
that was an additional restriction on 8080 machines. But on 6502 machines one did not have to wait for the vertical sync to update the video memory. In fact that is EXACTLY what the original poster was pointing out, without trying to flaunt jargon like you.
This makes you look stupid now.
Which leads us to:
Patently false. Video memory on an 808x machine (even on CGA and EGA cards) was most certainly memory mapped.
yes it could be done. But then you had the problem of glitches or waiting for VSYNC (or if you liked to live dangerously, HSYNC). It wasn't pretty to build hardware or write code for. Your interaction with it didn't treat it like main memory but rather so
sorry it should be SYS64767
Getting old here.
READY.
PRINT ""+-0
I called it "Commode-odor". I was an Atari fan, but most of my friends had C=64s. A few years later, though, I got an Amiga.
Assuming you mean the 8-bit Atari 400 and 800 (and its compatible redesigns, the XL and XE series), I did pretty much the same thing- was an Atari fanboy, but ended up with an Amiga. When one knows a little more about the "Commodore" Amiga and "Atari", it all seems a bit silly.
The major irony is that the Amiga developers included a number of ex-Atari staff- most significantly Jay Miner- who had worked on the 400/800 and the VCS/2600 before that. It represented (some have argued) a continued thread of architectural design that the 400/800 had significantly improved upon from the VCS, and had the same state-of-the-art custom chipset approach as its predecessors. (Indeed, just as happened with the 400 and 800, the Amiga was originally meant to be a console, before it evolved into a computer).
Also worth noting that "Amiga" was originally an independent company and it was only later bought by Commodore (after some legal wrangling with Atari, who'd had some involvement with them).
Meanwhile, Jack Tramiel had left Commodore (after falling out with the management), bought Atari Inc's computer and console division (i.e. the one that brought us the VCS and 400/800), which formed his new Atari Corp. The latter was a very different company to Atari Inc. (very obviously a much more shoestring operation). The Atari ST was designed by a different team after Tramiel had sacked most of the old Atari Inc. engineers, and very much reflected the "new" Atari; affordable, but much more off-the-shelf parts.
Atari Corp continued selling the XL and XE (cost-reduced versions of the 400 and 800), but they didn't design it; they merely milked the profits from a design they'd inherited while they focused on *their* Atari ST.
So... which was really the "true" successor to the Atari 400 and 800? By any measure, it was the "Commodore" Amiga. Who cares who made it? I briefly owned an ST because I couldn't afford an Amiga, but I ended up selling it and buying the latter a year later.
"Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
Several times in the article, he mentions that the C128 was the last 8-bit computer to be designed. This isn't true -- a year later, Tandy announced the CoCo3, also with 128KB and capable of 80 column text display. It didn't run CP/M, but instead it ran Microware OS-9.